[JAVA] 자바 정복기 - 인스턴스 멤버와 정적 멤버

개발log·2024년 3월 30일

NEW 자바 정복기

목록 보기
10/27
post-thumbnail

인스턴스 멤버

  • 객체 마다 가지고 있는 멤버
    인스턴스 필드: 힙 영역의 객체 마다 가지고 있는 멤버, 객체마다 다른 데이터를 저장
    인스턴스 메소드: 객체가 있어야 호출 가능한 메소드, 클래스 코드(메소드 영역)에 위치하지만, 이해하기 쉽도록 객체 마다 가지고 있는 메소드라고 생각해도 됨

정적 멤버

  • 객체와 상관없는 멤버, 클래스 코드(메소드 영역)에 위치
    정적 필드 및 상수: 객체 없이 클래스만으로도 사용 가능한 필드
    정적 메소드: 객체가 없이 클래스만으로도 호출 가능한 메소드

인스턴스 멤버와 this

인스턴스 멤버

  • 객체를 생성한 후 사용할 수 있는 필드와 메소드
public class Car {
	//필드
    int gas;
    
    //메소드
    void setSpeed(int speed) { ... }
}
Car myCar = new Car();
myCar.gas = 10;
myCar.setSpeed(60);

Car yourCar = new Car();
yourCar.gas = 20;
yourCar.setSpeed(80);

this

  • 객체 내에서 인스턴스 멤버에 접근하기 위해 사용
  • 생성자와 메소드의 매개변수 이름이 필드와 동일할 경우 필드임을 지정하기 위해 주로 사용
Car(String model) {
	this.model = model;
}
void setModel(String model) {
	this.model = model;
}

정적 멤버와 static

정적 멤버

  • 클래스에 고정된 멤버로서 객체 생성하지 않고 사용할 수 있는 필드와 메소드
public class 클래스 {
	//정적 필드
    static 타입 필드 [= 초기값];
    
    //정적 메소드
    static 리턴 타입 메소드(매개변수 선언, ...) {...}
}

정적 멤버 사용

  • 클래스 이름과 함께 도트 연산자로 접근
클래스.필드;
클래스.메소드(매개값, ...);
public class Calculator{
	static double pi = 3.14159;
    static int plus(int x, int y) {...}
    static int minus(int x, int y) {...}
}
double result1 = 10*10*Calculator.pi;
int result2 = Calculator.plus(10,5);
int result3 = Calculator.minis(10,5);

정적 메소드 선언 시 주의할 점

  • 정적 메소드 선언 시 그 내부에 인스턴스 필드 및 메소드 사용 불가
  • 정적 메소드 선언 시 그 객체 자신 참조인 this 키워드 사용 불가
public class ClassName{
	//인스턴스 필드와 메소드
	int field1;
    void method1() {...}
    //정적 필드와 메소드
    static int field2;
    static void method2() {...}
    
    //정적 메소드
    static void method3(){
    	this.field1 = 10; //x → 컴파일 에러
        this.method1(); //x → 컴파일 에러
        field2 = 10; //o
        method2(); //o
    }
}
  • 정적 메소드에서 인스턴스 멤버 사용하려는 경우
    객체 우선 생성 후 참조 변수로 접근
static void method3(){
	ClassName obj = new ClassName();
    obj.field1 = 10;
    obj.method1();
}

정리

  • 인스턴스 멤버: 객체를 생성한 후 사용할 수 있는 필드와 메소드
    인스턴스 필드, 인스턴스 메소드
  • this: 객체 내부에서도 인스턴스 멤버에 접근하기 위해 this를 사용할 수 있음
    주로 생성자와 메소드의 매개변수 이름이 필드와 동일한 경우, 인스턴스 멤버만 필드임을 명시
  • 정적멤버: 클래스에 고정된 멤버로서 객체 생성하지 않고 사용할 수 있는 필드와 메소드
  • static: 정적 멤버를 선언할 때 사용하는 키워드
profile
나의 개발 저장소

0개의 댓글