캡슐화

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