2020. 4. 26. 16:28ㆍ인프런/웹개발 코스 [JAVA 개발언어]
캡슐화
캡슐화는 객체지향 프로그래밍의 특성 중 하나로 객체의 속성(data fields)과 행위(메서드, methods)를 하나로 묶고, 실제 구현 내용 일부를 외부에 감추어 은닉한다에 초점을 맞추고 있습니다
자바에서 캡슐화는 데이터들(변수)과 그 데이터를 처리하는 코드(메서드)들을 하나의 단위로 묶는 메커니즘으로 말합니다.
캡슐화된 클래스의 변수들은 접근제어자로 인해 클래스 외부에서는 접근을 할 수 없습니다 하지만 해당 클래스 내부의 메서드를 통해 별수를 조작할 수 있습니다.
즉 오직 캡슐화된 클래스 내부의 메서드만을 통해 변수를 조작 가능합니다. 이를 정보 은닉이라 합니다
자바에서는 다음과 같이 캡슐화 할수 있습니다
예시
- Declare the variables of a class as private
: 클래스 내부의 변수를 선언할 때 'private' 접근제어자를 사용합니다.
- Provide public setter and getter methods to modify and view the variable values.
: setter, getter 메서드를 통해 변수의 값들을 조회하거나 수정할 수 있도록 합니다.
캡슐화를 사용하는 이유
- 객체의 필드와 메서드를 하나로 묶고 실제 구현 내용을 내부에 감춥니다
- 외부 객체는 제공하는 필드와 메서드만 이용할 수 있습니다
- 클래스 필드 값에 대한 수정권한을 가질 수 있습니다
조회만 가능 (read-only)하게 하거나 수정만 가능(write-only)하게 만들 수 있습니다. - 필드에 저장된 모든 값들을 컨트롤 할 수 있습니다.
클래스의 변수 값이 손상될 위험이 줄어듭니다. - 사용자는 데이터가 클래스에 어떻게 저장되는지 확인할 수 없습니다.
클래스 내부의 데이터 형태가 변경되어도 사용하는 코드를 변경할 필요가 없습니다
데이터가 변경되어도 다른 객체에 영향을 주지 않아 독립성이 유지됩니다. - 클래스의 결합도가 낮아져 재사용이 용이 합니다.
캡슐화 예제
package JavaClassTester;
public class Wallnut {
private String name;
private String blog;
public void setName(String name) {
this.name = name;
}
public void setBlog(String blog) {
this.blog = blog;
}
public String getName() {
return name;
}
public String getBlog() {
return blog;
}
}
위의 코드처럼 private을 사용하여 다른 곳에서는 사용하거나 볼 수 없도록 은닉화 시켜주고 변수들을 지정하여줍니다
다음으로 Wallnut에 있는 변수들을 접근하기 위해 메서드를 활용하도록 코딩합니다
package JavaClassTester;
public class WallnutNet {
public static void main(String[] args) {
Wallnut wal = new Wallnut();
wal.setName("자신의 이름");
wal.setBlog("자신의 블로그주소");
System.out.println("이름 :"+wal.getName());
System.out.println("블로그 :"+wal.getBlog());
}
}
위의 코드처럼 메서드를 활용해서 Wallnut에 간접적으로 접근해서 사용합니다 그리고 "new 사용할 클래스"를 사용해서 객체를 만들어 사용한다.
만약 다른 패키지에 있는 값을 사용하려면 import를 값을 가져올 수 있으며 해당 패키지의 모든 클래스를 가져오고 싶다면 import 패키지 "이름.*"을 입력해주시면 됩니다.
단 public 외 값이 없다면 사용이 불가능하고 public가 있어야 외부 패키지에서 값을 가져올 수 있습니다.
참고한 수업 링크
https://www.inflearn.com/course/%EC%9B%B9%EA%B0%9C%EB%B0%9C-%EA%B8%B0%EC%B4%88-java#curriculum
'인프런 > 웹개발 코스 [JAVA 개발언어]' 카테고리의 다른 글
다형성 (0) | 2020.04.27 |
---|---|
상속 (0) | 2020.04.26 |
객체지향 프로그래밍 (0) | 2020.04.26 |
함수 (0) | 2020.04.26 |
변수 부터 예외처리까지 (0) | 2020.04.25 |