[TIL]20210910

박창현·2021년 9월 11일
0

TODAY I LEARNED

목록 보기
44/53

자바

인스턴스로 선언 vs 정적으로 선언

필드를 선언할 때 인스턴스 필드로 선언할지 정적으로 선언할 지 판단 기준이 있어야한다.
--> 객체마다 가지고 있어야할 데이터라면 인스턴스 필드로 선언하고, 객체마다가 아닌 공용으로 쓸 데이터라면 정적 필드로 선언하는 것이 좋다.

인스턴스 멤버

new로 인스턴스를 생성할때 스택영역에 이름과 '힙영역으로 가는 주소'가 있고, 힙 영역에는 각 인스턴스별로 필드가 존재한다. 하지만 메소드는 메소드 영역에 따로 보관되며 같은 클래스에서 만들어 진 여러 인스턴스가 공동으로 사용한다. 그러면 필드만 인스턴스 필드라고 부르지 왜 메소드도 인스턴스 메소드냐 싶은데, 이는 메소드안에 인스턴스 필드가 사용되는 경우가 있기 때문이다. 아무리 메소드 내부이지만 인스턴스 필드를 사용하려면 객체가 필요하기 때문에, 정적(static) 관련과 다르게 인스턴스라고 말한다.

정적 멤버

필드나 메소드 앞에 static을 붙여서 선언할 수 있다.
클래스의 필드에 파이(3.14)를 선언한다면 이 값이 굳이 힙 영역의 모든 인스턴스에 하나하나 포함될 필요가 없기에 static을 사용해 같은 종류의 인스턴스끼리는 필드를 공유하도록 만든다.
또한, 정적 메소드 내부에 인스턴스 필드를 포함한다면 인스턴스 메소드로 선언하고 포함하지 않는다면 정적 메소드로 선언한다.

String color;
void setColor(String color) { this.color = color } // 인스턴스 필드를 포함함.
static int plus(int x, int y) { return x + y } // 인스턴스 필드를 포함하지 않음.
profile
개강했기에 가끔씩 업로드.

0개의 댓글