2장. 코틀린 기초 - 클래스와 프로퍼티

2022. 3. 18. 13:22

 

/* 자바에서 선언한 Person class */
public class Person {
	private final String name;
	public Person(String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}
}
/* 코틀린에서 선언한 Person class */
class Person(val name:String)
  • 위와 같이 코드 없이 데이터만 저장하는 클래스를 값 객체(value object)라고 한다.
  • 자바 → 코틀린으로 변환 시, public 가시성 변경자(visibility modifier)가 사라졌다.

 

2.2.1 프로퍼티

  • In JAVA...
    • 클래스 : 데이터를 캡슐화하고, 캡슐화한 데이터를 다루는 코드를 한 주체 아래 가두는 것이 목적
    • 데이터를 필드(field)에 저장하며, 멤버 필드의 가시성은 보통 비공개
    • 클래스는 자신을 사용하는 클라이언트가 그 데이터에 접근하는 통로로 쓸 수 있는 접근자 메소드(accessor method) 제공
    • 필드를 읽기 위한 게터(getter)와 필드를 변경하게 허용할 경우 세터(setter)
    • 프로퍼티(property) : 필드와 접근자를 아우르는 개념
  • 코틀린은 프로퍼티를 언어 기본 기능으로 제공. 자바의 필드와 접근자 메소드를 완전히 대신함.
    • val로 선언한 프로퍼티 : 읽기 전용, val로 선언한 프로퍼티 : 변경 가능
class Person(
	val name: String, //읽기 전용 프로퍼티, (비공개)필드와 필드를 읽는 단순한 (공개)개터 생성
	val isMarried: Boolean  //쓸 수 있는 프로퍼티, (비공개)필드, (공개)게터, (공개)세터 생성
)
  • 코틀린에서 프로퍼티 선언하는 방식 : 프로퍼티와 관련 있는 접근자를 선언
    • 읽기 전용 프로퍼티는 게터만 선언, 변경 가능 프로퍼티는 게터와 세터 모두 선언
    • 비공개 필드(값을 저장하기 위함), 세터(그 필드에 값 저장용), 게터(필드 값 읽는용)로 이루어진 간단한 디폴트 접근자 구현 제공
  • 자바에서 Person 클래스 사용하는 방법
>>> Person person = new Person("Bob", true);
>>> System.out.println(person.getName());
Bob

>>> System.out.println(person.isMarried());
true

→ 코틀린의 name 이라는 프로퍼티를 자바에서는 getName이라는 이름으로 볼 수 있음.

→ 이름이 is로 시작하는 게터에는 get이 붙지 않고 원래 이름 그대로 사용, 세터에는 is를 set으로 바꿔 사용

→ 따라서 자바에서 isMarried 프로퍼티의 게터를 호출하려면 isMarried()를 사용해야 함

  • 코틀린에서 Person 클래스 사용하는 방법
>>> val person = Person("Bob", true)   //new 키워드를 사용하지 않고 생성자 호출함
>>> println(person.name)         //프로퍼티 이름을 직접 사용해도 코틀린이 자동으로 게터 호출
Bob

>>> println(person.isMarried)    //프로퍼티 이름을 직접 사용해도 코틀린이 자동으로 게터 호출
true

→ 게터를 호출하는 대신 프로퍼티를 직접 사용. 로직은 간결하지만 코드가 더 간결해짐.

→ 자바에서는 person.setMarried(false)로 이혼했다는 사실을 기록하는 반면, 코틀린에서는 person.isMarried=false 로 기록

  • 프로퍼티를 뒷받침하는 필드 (backing field)
    • 대부분의 프로퍼티에서 그 프로퍼티의 값을 저장하기 위한 필드
    • 원한다면 프로퍼티의 값을 그때그때 계산할 수도 있음

 

  • 자바에서 Person 클래스 사용하는 방법
>>> Person person = new Person("Bob", true);
>>> System.out.println(person.getName());
Bob

>>> System.out.println(person.isMarried());
true

→ 코틀린의 name 이라는 프로퍼티를 자바에서는 getName이라는 이름으로 볼 수 있음.

→ 이름이 is로 시작하는 게터에는 get이 붙지 않고 원래 이름 그대로 사용, 세터에는 is를 set으로 바꿔 사용

→ 따라서 자바에서 isMarried 프로퍼티의 게터를 호출하려면 isMarried()를 사용해야 함

  • 코틀린에서 Person 클래스 사용하는 방법
>>> val person = Person("Bob", true)   //new 키워드를 사용하지 않고 생성자 호출함
>>> println(person.name)         //프로퍼티 이름을 직접 사용해도 코틀린이 자동으로 게터 호출
Bob

>>> println(person.isMarried)    //프로퍼티 이름을 직접 사용해도 코틀린이 자동으로 게터 호출
true

→ 게터를 호출하는 대신 프로퍼티를 직접 사용. 로직은 간결하지만 코드가 더 간결해짐.

→ 자바에서는 person.setMarried(false)로 이혼했다는 사실을 기록하는 반면, 코틀린에서는 person.isMarried=false 로 기록

  • 프로퍼티를 뒷받침하는 필드 (backing field)
    • 대부분의 프로퍼티에서 그 프로퍼티의 값을 저장하기 위한 필드
    • 원한다면 프로퍼티의 값을 그때그때 계산할 수도 있음

BELATED ARTICLES

more