본문 바로가기
Java (국비)/Java 이론

(접근)제어자 private 과 getter,setter

by Hwanii_ 2023. 5. 17.
728x90

public => 자바는 public이 디폴트 이다.

 

단순 연산자로부터의 접근을 막고 싶을 때, private 을 붙힌다.

(stu.name = "홍길동" 처럼)

 

1. private : 해당 클래스 안에서만 접근이 가능 하다.

2. 그러기 때문에 객체와 무관한 (static) 것 빼고는 모든 멤버변수에 private를 붙혀준다.

3. 접근제어자 private 는 "캡슐화" 와 많이 관련 되어 있다.

 

캡슐화 :  https://hwanii96.tistory.com/19

 

예시)

 

그러면 main() 에서 stu.name 처럼 표현 하게 되면 멤버변수 자체가 private 설정이 된 상태라,

이런식으로 빨간줄 에러가 뜨게 된다.

 

Student 라는 클래스안에 멤버변수 name이 보이지 않는다는 말이다.

(외부에서 직접적으로 멤버변수 name의 값에 접근 할 수 없는 상황)

 

그러면, 내가 멤버변수 name을 쓰고 싶을 때 어떻게 접근을 해야 할까 ?

 

바로, 해당 클래스 내부에 게터(getter)와 세터(setter)를 만들어 주며 해결할 수 있다.

 

setter : 외부로 부터 무언가 값을 받아 옴.

getter : 외부로 부터 받아온 어떤 값을 결과값으로 토해 냄.

 

즉,

세터는 멤버 변수에 값을 설정 해주는 아이.

게터는 멤버 변수로 부터 값을 받아올 수 있도록 하는 아이.

 

게터와 세터는 이클립스 화면에서, 마우스 우클릭 - Source - Generate Getters & Setters 에서

자동으로 생성할 수 있다. 

 

이런식으로

getName()이라는 게터 메서드와, setName()이라는 세터 메서드를 만들어 주는것이다.

 

세터 메서드가 인자로 String name을 받으니,

stu.setName("이름")

을 해서 멤버변수 name의 값을 설정해주게 된다.

 

name이 잘받아졌는지 확인하려면, 아래와 같이 하면 된다.

 

console

 

주의할점 :

 

이렇게 하면, stu 객체의 주소값이 출력되게 된다.

 

추가 :

.toString 의 개념

 

원래는 System.out.println(stu.toString()); 이다.

즉, .toString 이 생략 되어 있다는 것이다.

 

근데, 이 .toString 메서드도 사실은 최상위 클래스인 object 클래스에 있는 메서드 인데,

이 메서드를 입맛대로 재정의 해서 사용할 수 있다.

오버라이딩을 하는것이다.

 

아웃풋으로 String 타입을 뱉는 메서드인 toString

 

이렇게 toString() 메서드를 재정의 하면 이 메서드의 기능은

반환값으로 "학생 : " + this.name 을 뱉어낸다.

 

그래서, 

 

생략 (.toString())

stu만 적어도 이름을 뱉어낸다.

 

=> toString() 메서드는 Student 클래스 안에 있기 때문에,

stu.toString() 을 하는 상황.

 

잘 출력 되는 모습을 볼 수 있다.

 

반응형

'Java (국비) > Java 이론' 카테고리의 다른 글

컬렉션 프레임워크  (0) 2023.05.18
추상 클래스 와 추상 메서드  (0) 2023.05.17
클래스에서의 타입 변환  (0) 2023.05.16
상속 4  (0) 2023.05.15
상속 3  (0) 2023.05.15