Encapsulation

Haiseong Jeong·2022년 10월 22일
1
post-thumbnail

Encapsulation(캡슐화)

클래스의 멤버 변수는 private 접근 제어자를 사용하고, getter와 setter를 통해 객체의 멤버 변수에 접근해야 한다. 멤버 변수를 접근자를 통해 가져오는 이유는 클래스의 내부 구현을 숨기고 오직 API를 통해서만 다른 클래스와 소통을 하는것을 지향해야 한다. 즉, 객체 지향의 특성 중, 캡슐화를 통한 정보 은닉을 하기 위함이다.

실생활에서


캡슐화의 예로 컴퓨터 조립을 생각해 볼 수 있다. 램을 사서 끼우는 상황을 생각해보자. 컴퓨터에 대해서 잘 모르는 사람도 램을 사서 메인보드에만 끼우기만 하면 램을 장착할 수 있다. 램의 구조, 힙영역, 회로도 등 이것들이 뭔지 몰라도 신경쓰지 않고 제자리에만 꽂으면 잘 작동한다. 왜냐하면 램이 공장에서 캡슐화 되어 나오기 때문이다.

우리가 프로그래밍 할때도 마찬가지 이다. 우리가 만든 클래스를 누군가 사용할 때 클래스 내부에 멤버 변수를 임으로 변경하는 일이 생기면 안된다. 대신 사용자가 이 변수들을 바꾸고자 할 때 안전하게 수정할 방법을 우리가 만들어 주는 일이 필요하다. 캡슐화된 클래스는 API로만 소통을 하기 때문에 다른 클래스와 결합도가 낮아진다. 이로 인해, 여러 개의 클래스들을 병렬적으로 개발할 수 있어 시스템 개발 속도를 높일 수 있습니다.

getter와 setter

우선 클래스의 멤버 변수는 private로 선언해 준다. 이렇게 되면 클래스 외부에서 바로 맴버변수에 접근할 수 없다. 이제 getter와 setter로만 접근 수정이 가능하다. 메서드 이름앞에 get, set 을 붙이면 된다.

class MyClass {
	private String name;
	
	private void setName(String n) {
		name = n;
	}
	String getName() {
		return name;
	}
}

무분별하게 만들지는 말자

완벽한 캡슐화를 위해서는 되도록 setter는 고민하고 삽입하는 것이 좋을 것 같다. 객체의 상태가 변경되는 것은 객체 스스로의 행동에 의해서야 한다. 따라서 꼭 필요한 변수에 대해서만 만들고 객체 스스로 값을 바꾸게 하는 방법을 생각해 보는것이 좋은 방법이다.

profile
나는 개발자다. 5000만큼 코딩한다.

0개의 댓글