[Java] Getter & Setter

Getter & Setter 

(이클립스 단축키 -> Alt + Shift + S)

(인텔리제이 (Alt + Insert)

 

1) 

오늘은 Java에서 자동생성 가능한 getter & setter에 대하여 공부해보았습니다.

맨 처음 공부하면서 이런 기능을 어떻게 활용하는지와 왜 필요하는지에 대해 생각을 해보았습니다.


Getter & Setter

객체의 필드를 외부에서 마음대로 읽고, 변경하면 객체의 무결성이 깨질 수 있다.

 

이러한 문제점 때문에 OOP 에서는 직접적인 외부에서의 필드 접근을 막고 대신

메소드를 통해 필드에 접근 하는 것을 선호한다.

 

그 이유는 메소드는 데이터를 검증해서 유효한 값만 필드에 저장할 수 있기 때문이다 → 위 역할 setter

 

아래 코드를 보자

private double speed;

private 접근 제한자를 가지므로 외부에서 접근 불가능하다
speed 필드값 변경(수정) 을 원한다면, setter인 setSpeed() 메서드를 이용해야한다.

 

 

다음으로 외부에서 객체의 필드를 읽을 때에도 메서드가 필요하다.

 

필드 값이 객체 외부에서 사용하기 부적절한 경우, 메서드로 적절한 값으로 변환해서 리턴할 수 있다.

 

이 역할을 하는 메서드가 getter 이다

private double speed;

public double getSpeed() {
	double km = speed * 16;
	return km;
}
// getspeed메서드를 호출시 km 값이 return이 된다.

speed 필드값을 외부에서 가져오고 싶다면, new 로 객체 생성으로는 가져올 수 없기 때문에 

getSpeed() 라는 getter 메서드를 꼭 사용해야 한다. 

 

결국

Getter & Setter 는 필드변수가 private으로 선언시에 선언된 필드를 수정하거나, 가져오기 위해서 사용하는 메서드 이다.

 

 

❗ 🖐 질문

그냥 public 선언하면 getter,setter 선언 없이 객체 생성 후 사용하면 되는데
굳이 왜 private 선언해서 귀찮게 이렇게 할까요?

쉽게 답변하자면 객체지향 관점에서 "캡슐화" 를 준수하기 위해서 사용하는 것 입니다.

 

private으로 필드 선언을 해야지, 다른 클래스에서 객체 생성 후 이 필드 변수를 맘대로 수정하는 것을 막을 수 있다.

내가 필요 할 때 변수를 호출해서 사용했더니 원하는 값이 아닌 다른 값이 저장되어 있는,

이런 어이없는 상황을 방지하기 위함이라고 생각하면 편하다!!.

 

이상 포스팅 마치겠습니다. 댓글로 지적 환영합니다. 더 공부하고 틀린게 있다면 수정하겠습니다.

728x90