[JAVA] 클래스, getter/setter, 인스턴스(instance)/정적(static)

2023. 5. 15. 19:32Languages/JAVA

💬 기억하고 싶거나 공부한 내용을 기록중입니다 :)

 

1️⃣ 클래스에 대한 이해

public package packageStudy;

public class ClassStudy{

/* 1. 필드(field) 
      정의: 객체의 데이터를 저장하는 곳
      형태: [접근제어자] [제어자] 타입 필드명 [ = 초기값];
*/ 
	String toolName = "java";
	int toolNum = 5;
    
/* 2. 생성자(constructor)
      정의: 필드 초기화, 객체 생성
      형태: [접근제어자] 생성자명 (args 리스트){} 
*/
	public ClassStudy(){
	}
/* 3. 메소드(method)
      정의: 객체의 실행, 동작
      형태: [접근제어자] [제어자] 리턴유형 메소드명 (args 리스트){}
*/
    String getToolName(){
    	return toolName;
    }
    
    void setToolName(String toolName){
    	this.toolName = toolName;
    }
}

 

2️⃣ getter/setter

- 필드를 클래스 외부에서 접근하는 것을 막는다고 한다. 외부에서 값을 마음대로 변경한다면, 해당 객체의 무결성이 무너지기 때문이다.

- 따라서 필드를 선언할 때, 외부에서 마음대로 변경할 수 없도록 제한을 하게 된다. 그런데 이 값들을 다른 실행클래스에서 사용하는 경우도 생긴다. 이럴 때 getter와 setter 메소드는 실행클래스에서 가져오거나 수정할 때 필요한 메소드이다.

public package packageStudy;  // 선언 메소드

public class ClassStudy{

	private String coffeeName = "ice americano";
    
    public String getCoffeeName(){
    	return coffeeName;
    }
    
    public void setCoffeeName(String coffeeName){
    	this.coffeeName = coffeeName;
    }
}
public package packageStudy;

public class ClassStudy_Main{

	public static void main(String[] args){
    
    	ClassStudy classStudy = new ClassStudy();
        
        System.out.println(classStudy.getCoffeeName());  // 커피 이름 불러오기
        
        classStudy.setCoffeeName("cafe Latte");
        System.out.println(classStudy.getCoffeeName());  // 변경된 커피 이름 불러오기
    }
}

 

3️⃣ 인스턴스 vs 정적

- 인스턴스(instance) 멤버 : 인스턴스 필드와 인스턴스 메소드로 구성됨. 객체(인스턴스)를 생성 후에 사용 가능

ClassName 참조변수 = new ClassName();

- 정적(static) 멤버 : 정적 필드와 정적 메소드로 구성됨. 클래스에 고정된 멤버로, 객체 생성을 따로 하지 않고 사용할 수 있음

public package packageStudy;

public class ClassStudy{

	static int numHamBurger = 3;
	static int numCheeseBurger = 5;
    
	static int numBurger(int x, int y){
		return x+y;
	}
}
public package packageStudy;

public class ClassStudy_Main{

	int numHamBurger = ClassStudy.numHamBurger;
	int numCheeseBurger = ClassStudy.numCheeseBurger;
    
	int numBurger = ClassStudy.numBurger(3,5);
	System.out.println(numBurger);
    
}

* 주의사항

1) non static 메소드에서는 static 메소드로 접근 가능

2) static 메소드에서는 non static 메소드로 접근이 어려움

3) 방법: non static 필드 또는 메소드를 static으로 바꿔주거나, 실행 메소드에서 객체를 생성하여 할당된 참조변수를 통해 접근해야 함