1️⃣ private
- 클래스 내부에서만 호출 가능
2️⃣ protected
- 클래스 내부와 하위 클래스에서 호출 가능
3️⃣ public
- 어디서나 호출 가능
4️⃣ static
🔎 변수
- 한 클래스에서 공통적인 값을 유지해야할 때 선언
- 클래스가 메모리에 생성되어 프로그램이 종료될 때까지 유지
- 객체를 생성하지 않고 '클래스이름.변수명'으로 호출가능
- static 변수 = 클래스 변수
🔎 함수
- 클래스 메소드
- 인스턴스 변수를 사용할 수 없으므로, 인스턴스와 관계없는 메소드를 클래스 메소드로 정의한다.
- 객체를 생성하지 않고 '클래스이름.메소드명'으로 호출 가능
public class InstanceClass{
int a;
int b;
public int add(){
return a + b;
}
}
public class StaticClass{
public static int add(int a, int b){
return a + b;
}
}
@Test
@DisplayName("static 메소드")
public void staticTest() {
int a = 1;
int b = 2;
assertEquals(3, StaticClass.add(a, b));
}
@Test
@DisplayName("인스턴스 메소드")
public void instanceTest() {
InstanceClass instanceClass = new InstanceClass();
instanceClass.a = 2;
instanceClass.b = 4;
assertEquals(6, instanceClass.add());
}
💡 정리
- 인스턴스 변수: 인스턴스가 생성될 때마다 생성됨, 인스턴스마다 각기 다른 값 유지
- 클래스 변수: 모든 인스턴스가 하나의 저장공간을 공유, 항상 공통된 값을 가짐
5️⃣ final
public class FinalClass{
final int a = 21;
final int b;
public FinalClass(int b){
this.b = b;
}
}
- final: 한번 값이 정해지면 값을 바꿀 수 없음
- static final: 객체마다 저장될 필요 X + 여러 값을 가질 수 X = 모든 영역에서 고정된 값 = 상수