본문 바로가기
IT/Java

자바 getter, setter 알아보기

by flatsun 2019. 1. 26.
반응형

메소드 하고 바로 게터 세터를 했었어야 했는데

생각도 안하고 있었다가 위치를 변경해 보려고 했는데


티스토리에서는 그런게 안되더라


그래서 객체화, 메소드가 뭔지 잘 모르는데 

getter setter를 하려고 하면

이해가 잘 안된다


그러니까 일단

https://flatsun.tistory.com/35

https://flatsun.tistory.com/37

여기서 객체화와 메소드가 뭔지 개념을 알아둔 다음에

getter와 setter를 배워야 이해가 쉽다 


이제 getter setter로 넘어가서



여기 범죄자에 대한 정보가 있는데

평상시 하던 것 처럼 이렇게 정의를 한 상태에서

다른 클래스에서 사용하는 경우에 문제가 발생하는데



변수 접근 지정자를 기본으로 줬기 때문에

다른 클래스에서도 아무 제한 없이 모든 변수에 접근할 수 있는데


아무 제한이 없으니 맘대로 들어와서 모든 정보를 바꿔버리는 것이 가능하다



이런 식으로..


이제 왜 getter setter가 필요한 지 보일텐데

일단 getter setter나 한번 만들어 보자



맨 처음 작성했던 GetterSetter 클래스에서

오른쪽 마우스를 누른 뒤 Source -> Generate getters and setter를 누르자



누르고 나니 getter setter가 생성 가능해지는데


getter란? 변수 값을 가져오는 메소드!

setter란? 변수 값을 설정하는 메소드!


일단은 값을 변경할 생각은 없고 값을 가져와서 볼 생각만 있으니까

getter만 설정해서 Generate를 해 보자



짠짜잔


 getName, getAge, getCrime 메소드가 쫘라락 생겼는데


메소드를 호출 시 이 클래스의 변수명의 값만 가져다 주니까

해당 메소드로 호출 시에는 이 클래스에 있는 변수 값을 가져올 수 있다는 얘기다!!


또 변수 타입 앞에 private를 써 줘야 하는데

앞에 private를 써 넣으면

값은 이 클래스에서만 갖고 있고 다른 클래스에서 가져다 변경을 못하게 된다는 얘기다




private를 넣으니 다른 클래스에서 고영욱을 세종대왕으로 바꾸는 장난질도 하지 못하게 되었다


근데 죄다 막아버렸으니 변수 값은 어떻게 가져오지?



아까 해당 클래스에서 값을 가져오는 

public 접근 지정자의 메소드 3개를 만들지 않았나

이제 그 메소드를 사용해서 변수를 직접 가져오지 않아도 

값 확인이 가능하게 만든 것이다



출력을 해 보니 깔끔하게 출력이 잘 된다

getter를 통해서 수정은 막고 값만 가져올 수 있게 만든 것이다


근데 나이를 생각해보니 30살이 아니라 42살이던데

나이는 계속 변하는 값인 만큼 수정 가능하게 만들어 보자


따라 쓸 필요 없이 

오른쪽 마우스 클릭 후

Source -> Generate getters and setter

에서 Age의 Setter만 생성하면 이렇게 setAge 메소드가 생성이 되는데


내가 setAge(값)을 넣고 출력하면 값이 변경이 되어 나오는 것이다



setter로 생성한 setAge 메소드를 사용한 후 출력하니

나이가 변경되어 출력이 잘 된다


이제 getter, setter가 뭔지 감이 올 텐데


일단 getter, setter는 단순 메소드다


사용하는 이유는? 

다른 클래스에서 접근 시 원하는 정보만 주거나 변경 가능하게 할 수 있기 때문에!!


마지막으로는 면접볼때 물어보는 캡슐화인데

getter setter는 자바의 캡슐화를 위해 사용한다


캡슐화란?


내가 작성한 클래스의 변수나 메소드를

막 갖다 쓰는게 아니라 내가 지정한 변수와 메소드만

접근 지정자(private, public . . .)를 통해 사용 가능하게 함으로써

프로그램 전체의 보안과 무분별한 값 변경으로 인한 에러 방지를 위해 사용하는 것이다!!

반응형

댓글