kotlin #코틀린 21

Kotlin : nullable 타입 안전하게 참조하기 (ft.Safe Call)

아래 예시 코드를 보자. 물론 nullable 타입인 Movie? 타입의 bestMovie 가 아무 제한 없이 Movie 클래스의 속성에 참조할 수 있다면 위험하다. 아무것도 아닌 객체의 속성 참조는 NullPointerException을 일으킬 수 있기 때문에 (이를 코틀린에서는 런타임 전에 컴파일러를 통해 알려주긴 하다만). 그러면 참조하기 전에 그 객체가 정말 존재하는 객체인지 확인 후, 참조하면 되는 거 아닐까? 1. null 확인하기 bestMovie 가 실제 객체를 참조하는게 확실한 경우, 즉 Movie 타입을 참조하고 있다면 그 타입 속성에 참조하는게 가능하다. => 아래처럼 if 절을 이용해서 확인하면 된다. var bestMovie : Movie? = null if(bestMovie !=..

언어/Kotlin 2022.11.09

Kotlin : null 이란?

지금까지 각 변수에는 항상 어떠한 값이 제공되있어야 했다. 즉, 각 변수는 항상 특정한 개체를 참조하는데, 참조변수가 개체를 참조해서는 안되는 경우도 존재한다. 예를 들어 지금까지 만들어진 영화들 중 최고의 영화를 변수에 저장하고 싶다고가정해보자. val bestMovie = TODO() 하지만 아직 제작된 영화가 없다면 과연 이 변수는 어떤 영화 개체를 참조해야 할까? 물론 아무 의미가 없는 Movie 개체를 따로 만들어 둘 수 있지만 우아(?)하지는 않은 방법이다. 어찌됐든 게임(영화만들기 게임)이 막 시작했을 때, 아직 최고의 영화로 지정된 영화는 존재할 수 없는 거니까... 1. Nullable Types 코틀린에서 참조변수가 아무것도 참조하지 않도록 하는 방법이 있다. null 키워드를 이용하면..

언어/Kotlin 2022.11.09

Kotlin : 인터페이스 (Interface)

0.5 인터페이스란 인터페이스는 데이터 구조의 구현을 지정하지 않고 작업을 지정한다. 추상 메서드나 추상 속성(즉, Backing filed가 없음) 등이 인터페이스에 정의된다. 어떠한 특정 작업 세트를 제공하는 데이터 유형을 정의한다고 생각하면 된다. [기능이 구현되는 방식을 결정할 필요가 없는 기능 집합] 1. 인터페이스의 필요성 ( https://bruders.tistory.com/44 ) 에서 사용했던 클래스 계층 구조이다. 이 때 만들어진 영화는 비평가로부터 평가되어야 한다고 가정해보자. 이를 위해 비평 (Rating) 과 비평가 (Reviewer)에 대한 클래스를 추가로 만든다면 클래스 계층 구조는 어떻게 생겨야 할까? 왼쪽과 같은 구조를 생각했다고 가정해보자. 그러면 Reviewer 클래스는..

언어/Kotlin 2022.11.07

Kotlin : 추상클래스 (Abstract class)

1. 추상클래스의 필요성 클래스를 정의할 필요가 없는 고유한 개체 (object 키워드) 가 있듯, 객체가 없는 클래스가 존재한다. 그런 클래스가 과연 유용할까? 클래스는 ( https://bruders.tistory.com/21 ) 에서 얘기했듯 동일한 유형의 객체에 대한 일반적인 구조를 정의한다. 위 코드는 지난번에 코틀린 상속관련 예시로 작성한 코드다. Actor 클래스는 Actor 객체의 구조를, Director 클래스는 Director 클래스만의 구조를 정의했었는데, 두 사이 공통분모가 존재해 이를 따로 빼둘 둘의 상위 클래스인 Person 클래스를 만들었던 것이다. 사실 Actor 클래스와 Director 클래스의 객체만이 필요했을 뿐, Person 클래스의 객체는 따로 필요하지가 않은 상태라..

언어/Kotlin 2022.11.05

Kotlin : Type-compatibility (ft. Upcast, Downcast)

1. Type-compatibility, 타입 호환성 일반적으로 더 일반적인 타입의 변수에 더 구체적인(더 전문화된) 타입의 개체를 할당하는 것은 항상 가능하다. 더 일반적인 유형은 더 적은 수의 가능한 작업을 정의하고 하위 타입이 상위 타입의 모든 작업을 허용한다는 것이 보장되어 있기 때문이다. 밑에 예를 보자. a와 p는 당연히 문제될 게 전혀 없다. 반면에 좀 살펴봐야 할 부분은 p2와 a2 다. p2는 Actor 타입이 상위 타입인 Person 타입의 모든 작업들이 허용 가능하니 문제되지 않는다 [모든 영화배우는 사람이다]. a2는 Person 타입이 하위타입(더 전문화된)인 Actor의 모든 작업들이 실행 가능하지 않으므로 프로그래밍 실행 전 이미 컴파일러 에러가 뜬다 [모든 사람은 영화배우가 ..

언어/Kotlin 2022.10.31

Kotlin : Supertypes and Subtypes

1.타입과 클래스 속성의 상속은 코드중복을 피할 수 있는, 합리적인 방법일 뿐만이 아니라 객체들 사이간에 타입관계들을 결정짓는다. 한 객체의 Type은 그 객체에서 수행할 수 있는 모든 작업들을 결정짓는다. 숫자 자료형들이 특정 연산만 가능한 것처럼, 객체의 유형에 따라 특정 작업만이 가능하다. 예를 들어 객체 내에 정의된 메서드들. 작업에는 보여지는 속성의 읽기와 쓰기도 포함된다. 1.5 Supertypes and Subtypes, 상위타입과 하위타입 Director 클래스는 Person 클래스에서 파생되었고 확장되었다. '확장'이란 속성과 메서드들이 추가돠는 동시에 Person 클래스가 가지고 있던 기존 속성 및 메서드가 모두 상속되는 것을 의미한다. 이는 하위 클래스의 객체들이 상위 클래스의 객체들..

언어/Kotlin 2022.10.30

Kotlin : Polymorphie (ft.오버라이딩)

1. Polymorphie 란? 다형성(Polymorphie)은 공통 인터페이스를 통해 다양한 클래스의 구현에 액세스 할 수 있게 해준다. Polymorphie는 그리스어에서 유래했으며 대략, "다양한 형태"를 의미하며 객체 지향 프로그레밍의 중심 개념 중 하나이다. 이는 우리가 같은 방식으로 매우 다르게 설계된 객체를 사용할 수 있게 해준다. 저번의 클래스 계층 구조의 예시로 들었던 것이다. 탈것 클래스 내에 ' 출발하다()' 라는 메서드가 있다고 가정해보자. 그러면 자전거 클래스와 차 클래스의 출발하다()라는 메서드의 구조는 서로 당연히 다를 것이다. (출발하다() 메서드의 어떤 구현이 선택되는지에 대한 결정은 런타임에서 발생한다고 한다.) 2. Overriding 오버라이딩 Super Class의 ..

언어/Kotlin 2022.10.30

Kotlin : 상속 (inheritance)

1. 상속이란? 객체지향 프로그래밍에서 상속은 굉장히 중요한 개념 중 하나이다. '상속'을 통해 반복되는 코드의 양을 줄일수도 있고, 다른 클래스가 가지고 있는 기능(속성, 함수 등)들을 상속받아 그대로 사용할 수 있기 때문이다. 상속하는 쪽을 Super Class, (엄마클래스, 아빠클래스라 부르기도 한다고 한다) 상속받는 쪽을 Sub Class (자식클래스라고도 부름) 라 한다. 왼쪽 그림을 보자. Super Class 에는 var1,var2 이렇게 두개의 변수와 methodeA,methodeB 두개의 메서드를 가기고 있는 반면, Super Class 를 상속받은 Sub Class 는 Super Class 가 가지고 있던, 기존의 두 변수와 두 메서드 뿐만이 아니라, 새로운 속성과 메서드를 가지고 있..

언어/Kotlin 2022.10.20

Kotlin : 간단한 for 과 while, do..While 문의 이용

1. for 문의 이용 2. While문의 이용 while(조건) : 이 조건이 충족되는 한 계속 while문을 실행한다는 것. : 800ml 의 물이 들은 병을 새로 생성한 잔에 붓는다. 이 행동은 그 물의 양이 0 초과일때까지 반복된다. 즉, 병 내에 물의 양이 모두 없어지면, 그만둔다는 것. 3. do.. While문의 이용 while(조건)문이 충족되지 않는 이상 do문을 시행한다. : 내가 인풋으로 아니오를 쓰면 do문이 더 이상 시행되지 않는 다는 얘기. 4. 실행 fun main(){ val bottle = Bottle(800) val glasses = mutableListOf() while(bottle.content > 0){ val newGlass = Glass(0,150) bottle...

언어/Kotlin 2022.10.13

Kotlin : 리스트 (list)

Glass 클래스와 그 오브젝트들을 만들어봤으니, 이번에는 그 오브젝트들이 들어가있는 일종의 집합을 만들어보자. 'listOf'를 통해 리스트 생성이 가능하다. - 안에는 리스트 안에는 넣을 자료형을 입력하면 된다. 우리의 경우 클래스 Glass - 이미 만들어둔 오브젝트들을 넣어도 되지만 즉석해서 만들어 넣을 수도 있다. => Glass(65,120) 당연히 Glass 클래스 내부에 정의한 함수들도 쓸 수 있다. 정의된 리스트는 변경이 불가능한 리스트라 변경을 시도할 경우 에러가 뜬다. val가 아닌 가변변수 var로 리스트를 정의했을 경우, 마찬가지로 리스트 내부 오브젝트의 속성값들을 변경할 수는 없지만, 새 리스트를 만들어 그 리스트를 참조할 수 있다. 즉, 이랬던 상황에서 이렇게 참조하고 있던 리..

언어/Kotlin 2022.10.12