JAVA 문법 Getter, Setter

형기브·2023년 5월 31일
0

JAVA

목록 보기
2/6

문제점

우리는 접근제어자를 통해 필드나 메서드에 접근하는 권한을 부여했다.

private 을 사용하면 자신의 클래스가 아닌 클래서에서는 접근하지 못한다.

그렇지만! 자바에서는 private 필드에 접근하여 값을 읽어오거나 수정하는 방법이 있다.

바로 Getter와 Setter !

public class Tv1 {
    private String color = "black";
    private int size = 100;
    private boolean power = false;
	
    
    //Getter
    
    public String getColor() {
        return color;
    }

    public int getSize() {
        return size;
    }

    public boolean getPower() {
        return power;
    }
    
    //Setter
    
     public void setColor(String color) {
        this.color = color;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public void setPower(boolean power) {
        this.power = power;
    }
}

이렇게 getter를 설정해두면 다른 클래스(Main)에서 getColor()를 통해 color 값을 불러올 수 있다.
또 setter를 통해 변수에 접근해 값을 변경 할 수도 있다.

public class Main {
    public static void main(String[] args) {
		Tv1 tv = new Tv1();
		// System.out.println(tv.color); 바로 private 변수에 접근했으므로 오류.
        System.out.println(tv.getColor());  // "black" 출력
        
        
        //tv.size = 10;  바로 private 변수에 접근해 값을 지정할 수 없다.
        tv.setSize(300);   setter를 이용.
        System.out.println(tv.getSize());  // 300 출력.
	}
}

방법 자체는 이렇게 간단하지만 왜 굳이 private으로 접근을 막아놓고 또 접근할 수 있는 방법을 만들어 놓은 것일까??

  • 알게된 점: 이유는 개체의 무결성을 지키기 위해서이다.
getter 를 통해 값을 가져올 때 내부 필드를 값을 숨긴 채로 가공된 값만 얻을 수 있다.
setter를 통해 값을 설정 할 때, tv 의 size가 음수일 수 없는데 
누군가 -값을 설정 할 수도 있다. 
이 때 setter 메소드 내에 이를 방지하는 로직을 만들어 주면
음수값을 입력했을 때 경고를 하거나 막을 수 있다.

이 두 가지는 사실 객체지향 방법론에서 캡슐화의 예를 잘 보여준다고 할 수 있다.

profile
Slow but Steady

0개의 댓글