제 10장 . 캡슐화(encapsulation)

7931 단어 JavaJava

캡슐화(encapsulation)

이 전까지의 강의로 이제 클래스와 인스턴스를 활용하는 방법으로 현실세계를 객체 지향 프로그램으로 개발 할 수 있게 되었다.

실수로 속성을 덮어 쓰거나 잘못된 조작 하는 등 휴먼 에러를 없애기 위해서 "캡슐화"라는 방법을 이용해 실수를 방지할 수 있다.

간단하게 말해서 중요한 데이터를 쉽게 바꾸지 못하도록 사용한다.

  • 정보 은닉

    외부에서 특정 객체의 데이터 및 함수를 직접 접근을 막음으로써 변경을 못하게 하고 유지보수나 확장시 오류의 범위를 최소화 할 수 있고,
    객체내 정보손상, 오용을 방지하고, 조작법이 바뀌어도 사용방법 자체는 바뀌지 않고, 데이터가 변경되어도 다른 객체에 영향을 주지 않기 때문에 독립성이 좋다.

접근 지정자(access modifier)

private : 자기 자신의 클래스에서만 사용가능하게 해준다

private int hp;  // 모든 변수는 private 접근 지정자를 우선적으로 사용해준다음 
// 필요시에 풀어주는 방식으로 사용한다.

public : 모든 클래스에서 사용하게 해준다

public class Cleric {}  // 모든 클래스는 기본적으로 public 접근 지정자를 사용해준다음
// 필요시에 풀어주는 방식을 사용하지만 클래스를 만드는 목적이 다른곳에서 사용하기 위해서
// 만들어주는것이기에 풀어주는 경우는 거의 없다고 볼 수 있다.

package private : 자신과 같은 패키지에 소속된 클래스

protected : 자신과 같은 패키지에 소속되거나 자신을 상속받은 자식의 클래스

Getter
보통 클래스의 멤버변수는 private 접근 지정자를 사용해준다고 했는데 getter를 통해서 멤버변수의 값을 변경 또는 호출할 수가 있다.

Setter

이렇게 모든 변수에 private를 사용하게 되면 코드가 늘어나는 단점이 있다.
이를 위해서 편리하게 사용하기 위해서 tool에서 지원을 해준다.

Tip) 우클릭 - generate - 선택창이 뜨는데 원하는 것 클릭 후 선택

또는, 저의 intellij의 경우에는 Alt+insert를 누르면 generate창이 뜬다.


이렇게 창이 뜨는데 여기서 원하는 것을 선택하면 (예시 같은 경우에는 Getter and Setter 선택)

이렇게 창이 뜨는데 확인을 누르면 선택한 부분에 대한 Getter와 Setter가 생성되는것을 확인할 수 있다.

<getter & setter 사용 예시>

public class Student {

    private String name;
    private int age;

    public String getName() {  // getter
        return name;
    }

    public void setName(String name) {  // setter
        this.name = name;
    }

    public int getAge() {  // getter
        return age;
    }

    public void setAge(int age) { //setter
        this.age = age;
    }
}
public class SchoolMain {
    public static void main(String[] args) {
        Student student = new Student();
        student.setName("한동윤");  //setter을 이용한 이름 재설정
        student.setAge(27);  // setter을 이용한 나이 재설정

        String name = student.getName();  // getter을 이용한 이름 나타내기
        System.out.println("이름 : " + name);
        int age = student.getAge();  // getter을 이용한 나이 나타내기
        System.out.println("나이 : " + age);
    }
}

좋은 웹페이지 즐겨찾기