코딜기

[Java] 정보은닉(Infomation Hiding) 본문

Language/Java

[Java] 정보은닉(Infomation Hiding)

코딜기 2024. 8. 26. 20:17
반응형

정보은닉(Infomation Hiding)이란?

  • 정보 은닉이란 객체의 상태를 숨기고 외부에서 접근할 수 없도록 보호하는 것을 의미합니다.
  • 정보 은닉을 사용하면, 객체의 필드에 불필요한 값이나 문제가 발생할 수 있는 값들이 직접 들어오는 것을 막을 수 있습니다.
  • 그렇기 때문에 접근 제한자를 적절하게 이용하여 직접적인 접근을 막고, 메서드를 통해 접근하게 하는 것이 정보 은닉입니다.

정보은닉을 고려하지 않았을 때의 문제점

public class Car {
    String model; // 모델명
    int speed; // 현재 속도

    public Car(String model) {
        this.model = model;
    }
}
  • 위와 같은 Car 클래스가 있고, 이를 통해 Car의 속성을 가진 테슬라 객체를 만든다고 가정합니다.
public class Main {
    public static void main(String[] args) {
        Car tesla = new Car("테슬라");
        tesla.speed = 1000000000;
        tesla.speed = -124398523;
    }
}
  • 모델명이 테슬라인 객체를 만들고 속성 중 하나인 speed를 초기화해 줍니다.
  • int 형태로 speed를 선언했으므로, 위의 코드는 오류 없이 실행이 됩니다.
    • 하지만, 현실적으로 1,000,000,000, -124,398,523와 같은 속도는 현실성이 떨어집니다.
    • 따라서 변수에 들어갈 값을 선택적으로 받기 위해서 정보 은닉의 개념이 사용됩니다.

정보은닉 사용

  1. 필드에 접근제한자 private을 붙여서 외부로부터의 접근을 막습니다.
  2. setter 메서드를 통해서 private로 선언된 변수를 선택적으로 초기화 및 수정을 해줍니다.
  3. getter 메서드를 통해서 값을 꺼낼 수 있습니다.

setter와 getter

  • setter와 getter 메서드는 접근 제한을 public으로 지정하여 어디서든 접근이 가능하게 합니다.
  • setter 메서드 : 매개값을 받아 유효성 검사를 진행한 후에 적절한 값들만 초기화 및 수정을 하고, 잘못된 값을 거릅니다.
  • getter 메서드 : 필드값을 리턴하는 행위를 담당합니다.
public class Car {
    private String model; // 모델명
    private int speed; // 현재 속도

    public Car(String model) {
        this.model = model;
    }
        
    // setter: 필드값 변경을 대리하는 메서드
    public void setSpeed(int speed) {
        if (speed < 0 || speed > 200) {
            System.out.println("속도가 올바르지 않습니다.");
            return;
        }
        this.speed = speed;
    }

    // getter: 은닉된 필드값을 참조하는 메서드
    public int getSpeed() {
        return this.speed;
    }
}

※ speed 변수를 보호하여 잘못된 값으로 초기화 및 수정되는 상황을 방지할 수 있습니다.

반응형
Comments