캡슐화(Encapsulation)

데이터와 해당 데이터를 처리하는 메서드를 하나로 묶어서 외부에서의 접근을 제한하는 것

즉, 속성과 기능을 하나로 묶고, 외부에 꼭 필요한 기능만 노출하고 나머지는 모두 내부로 숨기는 것

private 접근 제어자 활용

 

객체 = 속성(데이터) + 기능(메서드)

  1. 데이터를 숨겨라
    객체의 속성(데이터)값은 외부에서 직접 접근할 수 없게 막아야 한다.
    객체의 데이터는 메서드를 통해서만 접근할 수 있다.
  2. 기능을 숨겨라
    객체의 기능 중에서 외부에서 사용하지 않고 내부에서만 사용하는 기능들은 숨겨야 한다.
    사용자 입장에서 꼭 필요한 기능만 외부에 노출하고, 나머지 기능은 모두 내부로 숨기자.
좋은 캡슐화: 데이터는 모두 숨기고, 기능은 꼭 필요한 기능만 노출하는 것

 

 


Setter메서드와 Getter메서드를 구성해서 private 변수에 접근할 수 있도록 한다.

Setter 메서드

public void setXXX(매개변수) {
    멤버변수=매개변수;
}

 

데이터(속성)가 private 접근 제어자로 인해 값을 직접 변경할 수 없는 경우, setter 메서드를 통해 데이터를 변경할 수 있다.

package day06;

public class RamenMachine {
    double soup;
    int noodle;
    float water;

    //setter
    public void setSoup(double soup){
        this.soup = soup;
    }
    public void setNoodle(int noodle){
        this.noodle = noodle;
    }
    public void setWater(float water){
        this.water = water;
    }
}

 


Getter 메서드

public 반환타입 getXXX(){
    return 멤버변수;
}

 

외부에서 객체의 데이터를 읽을 때도 메서드를 사용하는 것이 좋다. Getter 메서드는 내부의 멤버변수에 저장된 값을 외부로 리턴한다.

package day06;

public class RamenMachine {
    double soup;
    int noodle;
    float water;

    //getter
    public double getSoup(){
        return soup;
    }
    public int getNoodle(){
        return noodle;
    }
    public float getWater(){
        return water;
    }
}

 

 


[전체 코드]

Class: RamenMachine

package day06;

public class RamenMachine {
    double soup;
    int noodle;
    float water;

    //setter
    public void setSoup(double soup){
        this.soup = soup;
    }
    public void setNoodle(int noodle){
        this.noodle = noodle;
    }
    public void setWater(float water){
        this.water = water;
    }

    //getter
    public double getSoup(){
        return soup;
    }
    public int getNoodle(){
        return noodle;
    }
    public float getWater(){
        return water;
    }
}

 

Main: RamenStore

package day06;

public class RamenStore {
    public static void main(String[] args) {
        RamenMachine ramen1 = new RamenMachine();

        //setter메서드 이용해서 soup, noodle, water 값을 각각 설정
        ramen1.setSoup(1.2);
        ramen1.setNoodle(300);
        ramen1.setWater(450.5f);

        //getter메서드 이용해서 soup, noodle, water 값을 각각 출력
        System.out.println("soup양: " + ramen1.getSoup() + "g");
        System.out.println("noodle양: " + ramen1.getNoodle() + "g");
        System.out.println("water양: " + ramen1.getWater() + "mL");
    }
}

 

실행 결과

 

+ Recent posts