hayu's 개발 일지

99클럽 코테 스터디 23일차 TIL + 캡슐화 본문

기술/java

99클럽 코테 스터디 23일차 TIL + 캡슐화

hayu00 2024. 6. 12. 21:08

학습 키워드

- 캡슐화

 

공부한 내용

캡슐화

  • 캡슐화란 쉽게 말하면 변수나 메서드들을 캡슐로 감싸서 안보이게 하는 정보 은닉 개념 중 하나이다.
  • 즉, 캡슐화는 객체의 속성(Field)과 행위(Meyhod)를 하나로 묶고, 외부로부터 내부를 감싸 숨겨 은닉한다. 또한 외부의 잘못된 접근으로 값이 변하는 의도치 않는 동작을 방지하는 보호 효과도 누릴 수 있다.
  • 자바에서는 대표적으로 protected , default , private의 접근제어자를 통해 구현이 가능하다.
class Time {
    private int hour; // hour는 외부에서 접근하지 못하게private으로 선언한다.
	
    // Setter
    public void setHour(int hour) {
        if (hour < 0 || hour > 24) { // hour에 대한 유효성 검사
            return;
        } else {
            this.hour = hour;
        }
    }
	
    // Getter
    public int getHour() {
        return hour;
    }
}

public class Main {
    public static void main(String[] args) {
        MyTime time = new MyTime();
        
        // 유효하지 않은 parameter 입력
        time.setHour(25); 
        System.out.println("Hour: " + time.getHour()); // 0
		
        // 유효한 parameter 입력
        time.setHour(13); 
        System.out.println("Hour: " + time.getHour()); // 13
    } 
}
  • 여기서 클래스의 hour 멤버 변수는 private으로 선언함으로써 다른 클래스에서의 접근을 제한했다.
  • 그리고 이 private hour 변수를 다루기 위해서는 setter method인 setHour(int hour)와 getter method인 getHour()의 호출을 통해서만 가능하다.  특히 이러한 메서드로 통한 접근 기법의 좋은 점은 유효하지 않은 숫자로 직접 변수 hour를 셋팅하려는 시도를 메서드 내부에서 유효성 체크 로직을 통해 거를 수 있다는 점이다

접근제어자

  • 캡슐화는 접근 제어자를 통해 이루어진다.

public : 접근 제한 없음

protected : 동일한 패키지 내에 존재하거나 파생 클래스에서만 접근 가능

default : 아무런 접근 제한자를 명시하지 않으면 default 값이 되며, 동일한 패키지 내에서만 접근 가능

private : 자기 자신의 클래스 내에서만 접근 가능

진정한 캡슐화

  • 진정한 캡슐화는 외부로 부터, 내부의 구현을 숨기고 인터페이스에 정의된 메서드를 통해서만 상태에 접근하도록 하는것을 말한다.
  • 여기서 메서드는 단순히 속성 하나의 값을 변경하고, 반환하는 접근자 수정자를 말하는 것이 아니다. 여기서의 메서드는 객체가 책임져야 하는 어떤 일을 수행하기 위해 내부의 상태를 변경하는 메서드를 말하는 것이다.
  • 내부 구현의 변경으로 인해 외부의 객체가 영향을 받는다면 캡슐화를 위반한 것이다. 따라서 설계에서 변하는것이 무엇인지를 고려하고 변하는 개념을 캡슐화해야 다.

 

회고

 

알게된 내용

- 캡슐화에 대해 알게 되었고, 접근 제어자를 통해 이루어진다는 사실을 알게 되었다.

 

 

 

참고 자료

- https://inpa.tistory.com/entry/OOP-%EC%BA%A1%EC%8A%90%ED%99%94Encapsulation-%EC%A0%95%EB%B3%B4-%EC%9D%80%EB%8B%89%EC%9D%98-%EC%99%84%EB%B2%BD-%EC%9D%B4%ED%95%B4

- https://jaeano.tistory.com/entry/Java-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%EC%96%B8%EC%96%B4-%ED%8A%B9%EC%A7%95%EC%BA%A1%EC%8A%90%ED%99%94-Encapsulation