Dart 기본 문법 (4) - 캡슐화

데구르르·2023년 12월 4일
0

Flutter

목록 보기
4/17

캡슐화 (encapsulation)

다른 파일, 클래스, 메소드 등에서 특정 변수, 메소드, 클래스에 접근할 수 있는 권한을 부여하거나 하지 않는것이다. 엑세스 제어, getter & setter로 할 수 있다.

다른 곳에서 사용하지 못하게 변수나 메소드, 또는 클래스 자체를 캡슐에다 넣어놓아 외부에서 내용물이 보이지 않게 하는 느낌이다 (아래 이미지를 참조하자).

캡슐화는 개발자의 잘못된 접근에 대한 제어방법을 제공한다. 즉, 필드에 “현실세계에서 불가능한 값"이 들어가지 않도록 제어한다. 그러므로 캡슐화는 실수로 속성을 덮어 쓰거나, 잘못된 조작을 하는 등의 휴먼 에러를 사전에 방지하기 위해 사용된다.

접근 지정자 (access modifier)

접근 범위를 지정할 때 사용된다. 디폴트는 public, 즉 모든 클래스에서 접근 가능하지만 멤버 앞에 _을 붙이면 그 멤버는 속한 클래스에서만 접근할 수 있는 private 멤버가 된다.

ex) int _hp = 10;
ex) void _die() { }

클래스 자체도 private으로 설정될 수 있다. private class는 자신의 인스턴스가 생성되지 않는다.

class _sum { 
	// 코드...
}

void main() {
	_sum number1 = _sum();  // 불가능
}

getter / setter 메소드

private 변수에 접근 / 수정하기 위해서 사용된다. 이 메소드들을 경유해서 private 필드에 접근하는 방식이다.

  • getter: 읽기 전용 프로퍼티를 구현할 때 사용
  • setter: 쓰기 전용 프로퍼티를 구현할 때 사용 (잘 쓰지 않는다고 한다)

getter / setter를 사용하는 이유

  1. Read Only, Write Only 필드의 실현
  2. 필드의 이름 등, 클래스의 내부 설계를 자유롭게 변경 가능
  3. 필드로의 액세스를 검사 가능
int get hp => _hp;

// 값의 타당성 검사
void set hp(int value) {
	vehicleAge -= value;
	if (value < 0) {
		throw Exception("hp는 0보다 작을 수 없다");
	}
}
profile
개발 기록

0개의 댓글