본문 바로가기

Kotlin

AtomicKotlin _ 2(16 ~ 23) 객체 소개

2부를 공부하면서 list, set, map에 대해서 한번 더 생각해볼 수 있었다.

실무에서 list, set, map 모두 굉장히 많이 쓴다. 특히 list와 map은 항상 쓰이는데 2부를 공부하면서 몰랐던 사실들도 많이 알게되었다.(ex : 읽기전용은 왜 val 객체를 생성해야하는지!)

그 외에도 기본적인 용어들의 뜻을 한번 더 새길 수 있었고 var와 val의 힘을 느낄 수 있었다.


객체 지향 프로그래밍 언어에서 해결하려는 문제의 '명사'를 찾아내고 이 명사를 개체로 변환한다.

객체는 데이터를 저장하고 동작을 수행한다. 즉, 객체 지향 언어는 객체를 만들고 사용하는 언어다.

코틀린은 함수형 언어이기도 하다. 함수형 언어는 수행할 동작('동작')에 초점을 맞춘다.

코틀린은 객체 지향과 함수형을 혼합한 하이브리드 언어다.

-아토믹 코틀린 : 2부-


  1. 클래스 : 새로운 데이터 타입의 기초가 될 프로퍼티와 함수를 정의 (사용자 정의 타입이라고 부르기도 함)

  2. 멤버 : 클래스에 속한 함수나 프로퍼티

  3. 멤버 함수 : 함수 안에 정의되며 특정 클래스에 속한 객체가 있어야만 사용할 수 있는 함수

  4. 객체 생성 : 클래스에 해당하는 val, var값을 만드는 과정, 클래스의 인스턴스를 생성한다고 말하기도 함

  5. 클래스에는 많은 멤버함수가 정의될 수 있다 → IDE가 제공하는 코드완성 기능을 사용하면 클래스의 멤버를 쉽게 탐색할 수 있다.

  6. 객체 지향 언어에서는 멤버함수를 매서드라고 부르기도 함

  7. 코틀린 설계자들은 메서드 대신 함수라는 표현을 전반적으로 사용

  8. 멤버 함수는 어떤 클래스에 속한 특정 인스턴스에 대해 작용한다.

  9. 멤버함수를 호출할 때 코틀린은 조용히 객체를 가리키는 참조를 함수에 전달해서 관심의 대상이 되는 객체를 추적한다. 클래스 안에서는 this라는 이름으로 이 참조에 접근 가능

  10. 불필요한 this는 사용하지 않는 것이 좋음

  11. 클래스 밖에서는 객체를 지정해 멤버 함수를 호출

  12. 프로퍼티 : 클래스에 속한 var , val

  13. 프로퍼티를 정의 → 클래스 안에서 상태 유지

  14. 각각의 객체는 프로퍼티를 저장할 자신만의 공간을 따로 할당받는다

  15. 최상위 수준에 val는 안전하다. 변경할 수 없어서

  16. var 최상위 프로퍼티를 선언하는 일은 안티패턴

  17. 사실 var는 변경 가능, val 는 변경 불가능은 너무 단순화한 표현임

  18. 만약 class가 val고, class안의 프로퍼티가 var 인 경우도 있음
class Kitchen {
	var table : String = "Round table"
}

fun main() {
	val kitchen1 = Kitchen()
	val kitchen2 = Kitchen()
	println("kitchen1: ${kitchen1.table})  //Round table
	println("kitchen1: ${kitchen1.table})  //Round table
	kitchen1.table = "Square table"
	println("kitchen1: ${kitchen1.table})  //Square table
	println("kitchen1: ${kitchen1.table})  //Square table
}

19. var, val는 참조를 제한한다.

20. var는 참조가 가리키는 대상을 다른 대상을 엮을 수 있다, val는 엮을 수 없다.

21. 객체에서 가변성은 내부 상태를 바꿀 수 있다는 뜻

22. class Kitchen 은 가변 객체