ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] 자바, 정보 은닉
    JAVA 2020. 6. 20. 14:29

     

    정보 은닉


    안녕하세요? 장장스입니다.

    오늘은 정보 은닉에 대해서 포스팅 하겠습니다. 객체지향의 특징이라고 할 수 있는 정보 은닉에 대해 알아보기 전에 캡슐화와 접근제어자에 대해 간단하게 알아 보겠습니다.

     

     

    캡슐화란?


    캡슐화(encapsulation)는 객체 지향 프로그래밍에서 다음 2가지 측면이 있습니다.

    • 객체의 속성(data fields)과 행위(메서드, methods)를 하나로 묶는다.

    • 실제 구현 내용 일부를 외부에 감추어 은닉한다.

     

     

     

    접근 제어자란?


    객체 지향 프로그램에서는 예약어를 사용해 클래스 내부의 변수나 메서드, 생성자에 대한 접근 권한을 지정할 수 있습니다. 이러한 예약어를 '접근 제어자(access modifier)'라고 합니다.

    • public

        외부 클래스 어디에서나 접근이 가능합니다.

    • protected

        같은 패키지 내부와 상속 관계의 클래스에서만 접근 할 수 있습니다. 그 외 클래스에서는 접근이 불가능합니다.

    • private

        같은 클래스 내부에서만 접근할 수 있습니다.

    • 아무 것도 없음

        디폴트값이며 같은 패키지 내부에서 접근할 수 있습니다.

     

     

    정보 은닉이란?


    결론부터 말하자면 클래스 내부에서 사용할 변수나 메서드를 private로 선언해서 외부에서 접근하지 못하도록 하는 것을 객체지향에서 '정보은닉(information hiding)'이라고 합니다.

    clock 이라는 class가 있습니다. 일반적으로 시계는 시간은 0~23시, 분은 0~59분까지 나타낼 수 있습니다.

    public class clock{
    	public int time;
    	public int min;
    }

    그런데 누군가가 시계에 접근해서 존재하지않는 30시간 17분 이라고 입력하게 되면 문제가 생길 겁니다. 때문에 외부에서 누군가가 접근하지 못하게 정보 은닉이 필요합니다.

    다음과 같이 코드를 고쳤습니다.

    public class clock{
    	private int time;
    	private int min;
        
      public setTime(int time){
        	if(time<0 || time>23){
            	system.out.println("시간 오류입니다.");
        	}else{
            	this.time = time;
            }
        }
      public setMin(int min){
        	if(min<0 || min>59){
            	system.out.println("분 오류입니다.");
        	}else{
            	this.min = min;
            }
        }
    }

    접근 제어자를 public -> private로 바꿨습니다.

    private으로 설정하게 되면서 외부클래스에서는 변수에 접근할 방법이 없습니다. 그래서 getter, setter 메서드를 생성하여 해당 변수에 값을 설정 할 수 있도록 구현 할 수 있습니다.

     

     

    References


     

     


    잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)

     

    댓글