접근자와 프로퍼티, 루비
감춘 값을 꼭 읽고 바꿔야 할 때는 어떻게 할까?
접근자
읽는 문과 쓰는 문
데이터 멤버는 보통 감춥니다. 그런데 클라이언트가 그 값을 읽거나 바꿔야 할 때가 있습니다. 흔한 해결책이 접근자(accessor) 메서드입니다. 값을 읽어 주는 게터(getter)와 값을 넣어 주는 세터(setter)를 내놓습니다.
메서드는 객체에 딸린 함수로, C++의 멤버 함수와 같은 것입니다. 클라이언트는 타입을 가져다 쓰는 코드입니다. 20과 25는 예시 값입니다.
C#의 프로퍼티
변수처럼 쓰는 접근자
C#은 접근자를 프로퍼티(property)로 만듭니다. 사용하는 쪽은 메서드를 부르지 않고 변수에 값을 넣고 읽듯이 적습니다. 값을 넣으면 set이, 읽으면 get이 저절로 불립니다.
이 강의가 따르는 교재의 예입니다. DegreeDays가 프로퍼티이고, 소문자로 시작하는 degreeDays가 감춘 멤버입니다. value는 넣으려는 값입니다.
set이 하는 일
들어오는 값을 검사합니다
변수처럼 보여도 실제로는 set이 실행됩니다. 교재의 set은 값이 0보다 작거나 30보다 크면 오류 글을 내보내고 저장하지 않습니다. 감춘 멤버는 여전히 문을 거쳐서만 바뀝니다.
0과 30은 교재 코드에 적힌 범위이고, 넣어 본 25와 45는 예시 값입니다.
C#의 클래스와 struct
가벼운 클래스, struct
C#은 C++와 자바를 바탕으로 합니다. 클래스의 인스턴스는 모두 힙에 놓이고, 가비지 컬렉션이 거두어 소멸자는 거의 쓰지 않습니다. 여기에 가벼운 클래스인 struct가 더 있습니다. 값을 스택 영역에 직접 담고, 상속은 지원하지 않습니다.
상속은 이미 만든 것을 물려받아 새로 만드는 것으로, 11강에서 다룹니다.
루비의 클래스
@가 붙으면 인스턴스 변수
루비도 클래스로 묶습니다. 변수 이름 앞의 @ 하나는 인스턴스 변수, 둘은 클래스 변수라는 표시입니다. 생성자의 이름은 initialize로 정해져 있고, new를 부르면 저절로 불립니다.
def … end는 루비에서 메서드를 정의하는 문법이고, Array.new는 빈 배열을 만듭니다.
루비의 접근 제어
실행 중에 바뀌는 클래스
루비의 멤버는 private이나 public으로 지정할 수 있고, 지정하지 않으면 public입니다. 그리고 루비의 클래스는 동적입니다. 프로그램이 실행되는 도중에도 클래스의 구성을 바꿀 수 있습니다.
메서드를 하나 더하는 것은 구성이 바뀌는 한 가지 예시입니다.
다음 편