관리 메뉴

hyeals study

코틀린 기초(5)-클래스 & 프로퍼티 본문

코틀린

코틀린 기초(5)-클래스 & 프로퍼티

hyeals 2020. 2. 2. 21:47

* 클래스(class): 객체 지향 프로그래밍에서 특정 객체를 생성하기 위해 변수와 메소드를 정의하는 일종의 틀.

 

* 클래스 사용 목적: 데이터의 캡슐화(encapsulate)와 캡슐화한 데이터를 다루는 코드를 한 주체 아래 담는 것.

 

* 클래스는 사용자에게 그 데이터에 접근할 수 있도록 하기 위해 접근자 메소드(accessor method)를 제공함.

 

* 접근자 메소드(accessor method): 보통 필드를 읽기 위한 getter와 필드를 변경하기 위한 setter를 제공함. 

 

이후에 코틀린 클래스와의 비교를 위해 자바로 Person이라는 클래스를 정의함.

 

자바 클래스 Person

* 자바에서는 데이터를 field에 저장함. 멤버 필드의 가시성(visibility)은 일반적으로 비공개(private)임.

 

위의 코드에서 필드(여기에서는 name)의 갯수가 늘어나면 생성자인 Person(String name)의 내부에서 파라미터를 이름이 같은 필드에 대입하는 대입문의 수가 늘어나게 됨.

 

이렇듯 자바에서는 생성자 내부에 같은 코드가 반복적으로 들어가는 경우가 많음.

 

하지만 위 코드를 코틀린으로 변환하면

코틀린 클래스 Person

한 눈에 봐도 자바와 비교했을 때 코드가 간결해 짐을 알 수 있음.

 

위와 같은 클래스를 value object라 부름. 

 

* value object: 코드 없이 데이터만 저장하는 클래스

 

또한 자바 코드와 비교 했을 때 코틀린은 class 앞에 접근 제어자(access modifier)인 public 을 붙이지 않는데 

코틀린의 기본 접근 제어자는 public이므로 생략이 가능하기 때문임.

 


 

* 프로퍼티(property): 언어 기본 기능 이며, 자바의 필드와 접근자 메소드를 완전히 대신함.

(코틀린에서는 클래스에 멤버 변수를 선언해주면 알아서 게터와 세터가 추가되어 프로퍼티가 됨)

 

클래스에서 프로퍼티를 선언하기 위해서는 위의 코드와 같이 val이나 var를 사용하면 됨.

 

* val로 선언한 프로퍼티는 읽기 전용, var로 선언한 프로퍼티는 변경 가능.

 

코틀린 프로퍼티 예시

위의 코드에서 name은 읽기 전용 프로퍼티(게터)이며, isMarried는 변경 가능 프로퍼티(게터+세터)임.

 

* 프로퍼티를 사용하는 방법은 코틀린과 자바와 완전히 동일한 방식을 사용함.

 

코틀린 Person 클래스 사용

위의 코드를 보면 클래스를 사용할 때 자바와 다르게 new 키워드를 사용하지 않고 생성자를 호출했으며,

 

프로퍼티의 이름을 직접 사용해도 코틀린이 알아서 게터를 호출해줌을 알 수 있음.

 

위의 코드 결과

자바에 비하면 코드가 좀 더 간결해졌음!

 

세터를 사용 할 때도 간단히 person.isMarried=false로 바꿔주면 됨.

 

* 대부분 프로퍼티에는 그 프로퍼티의 값을 저장하기 위한 필드가 있는데, 이를 프로퍼티를 뒷받침하는 필드(backing field)라 부름.

 

* 하지만 프로퍼티의 값을 그때그때 계산할 수도 있음(다른 프로퍼티들로부터 값을 계산할 수 있음) → 커스텀 게터를 작성하면 됨.

 


* 커스텀 접근자: 직접 작성한 프로퍼티의 접근자

 

아래에 자신이 정사각형인지 판단하는 기능을 가진 Rectangle 클래스를 정의함.

 

Rectangle 클래스

위의 코드에서 get()은 프로퍼티 "게터"를 선언한 것임.

 

이 프로퍼티에는 자체 구현을 제공하는 "게터"만이 존재하기 때문에 사용자가 프로퍼티에 접근할 때 마다 게터가 프로퍼

 

티의 값을 매번 계산함.

 

위의 코드를 좀 더 간결하게 작성할 수 있는데, 바로 아래와 코드와 같이 작성하는 것이 가능함.

 

Rectangle 클래스 (2)

 

 

 

 

본 게시물은 "Kotlin IN ACTION"을 참고함.

'코틀린' 카테고리의 다른 글

코틀린 기초(7) - 제어 구조 [when]  (0) 2020.02.04
코틀린 기초(6)- 제어 구조 [enum]  (0) 2020.02.03
코틀린 기초(4)-함수  (0) 2020.02.01
코틀린 기초(3)-문자열 템플릿  (0) 2020.02.01
코틀린 기초(2)-변수  (0) 2020.02.01
Comments