Study
-
9-3. 제네릭스 : 타입 별명(Type Alias)Study(종료)/Kotlin 22.09.13 ~ 12.18 2022. 11. 13. 15:34
9장 9-1. 제네릭스 : 타입 파라미터 9-2. 제네릭스 : 변성 9-3. 제네릭스 : 타입 별명(Type Alias) 9-3. 제네릭스 : 타입 별명(Type Alias) 제네릭과 직접적인 연관은 없지만, 복잡한 제네릭 타입을 다룰 때 도움이 될 수 있는 타입 별명 (type alias)라는 언어 기능에 대해 작성해보겠다. 코틀린에서 타입 별명을 도입한 이유는 기존 타입의 이름을 대신할 수 있는 새 이름을 도입할 수 있게 하기 위해서라고 한다. 주 목적은 제네릭 타입이나 함수 타입처럼 긴 이름을 짧게 부를 수 있도록 해주는 것 이다. 타입 별명 정의는 typealias 키워드로 이뤄지며, 그 다음 별명이 오고 = 기호 다음 실제 타입이 온다 typealias IntPredicate = (Int) ->..
-
9-2. 제네릭스 : 변성 (Variance)Study(종료)/Kotlin 22.09.13 ~ 12.18 2022. 11. 13. 15:12
9장 9-1. 제네릭스 : 타입 파라미터 9-2. 제네릭스 : 변성 (Variance) 9-3. 제네릭스 : 타입 별명 9-2. 변성 변성은 타입 파라미터가 달라질 때 제네릭 타입의 하위 타입 관계가 어떻게 달라지는지 설명하는 제네릭 타입의 한 측면이다. 배열과 가변 컬렉션은 타입 인자의 하위 타입 관계를 유지하지 않는다. 좀 더 자세히 설명하자면 String은 Any의 하위 타입이지만, Array은 Array의 하위 타입으로 간주되지 않으며, 반대의 경우인 Array가 Array의 하위 타입으로도 간주되지 않는다. 반대로 List나 Set같은 불변 컬렉션의 경우, 타입 파라미터의 하위 타입 관계가 컬렉션 타입에서도 유지된다. List은 list의 하위 타입이고, 따라서 아래와 같은 코드 역시 성립한다...
-
9-1. 제네릭스 : 타입 파라미터Study(종료)/Kotlin 22.09.13 ~ 12.18 2022. 11. 10. 23:57
9장 9-1. 제네릭스 : 타입 파라미터 9-2. 제네릭스 : 변성 9-3. 제네릭스 : 타입 별명 내가 알고 있는 제네릭스는 " " 형태로 선언하는 방식으로 Type 부분에는 정수형 Int, 소수형 Double, 문자형 String 등의 타입이 들어갈 수 있다고 알고있다. 사용할 때는 예를들면 어떤 가변 길이의 데이터를 저장하고 싶을 때 List를 사용하면 원하는 타입을 지정해 사용 가능하고 제공해주는 함수를 통해 삽입 삭제 검색 등의 기능도 쉽게 가능하므로 아주 편리한 방식이라고 생각하고 있다. 하지만 실제로 구현을 할 때는 Type 종류별로 모두 고려해야 하므로 구현은 아주 어려울 것이라고 막연하게 생각하고 있다. 책에서는 제네릭스를 이렇게 설명한다. 제네릭스는 여러분이 알지 못하는 타입의 데이터를..
-
8-2. 클래스 계층 이해하기 : 추상 클래스와 인터페이스Study(종료)/Kotlin 22.09.13 ~ 12.18 2022. 11. 6. 20:46
8장 8-1. 클래스 계층 이해하기 : 상속 8-2. 클래스 계층 이해하기 : 추상 클래스와 인터페이스 8-2. 클래스 계층 이해하기 : 추상 클래스와 인터페이스 8-1장에서 본 모든 상위 클래스는 자기 자신에 대한 인스턴스를 만들 수 없는 타입들이었다. 하지만 별도의 인스턴스가 있을 수 없고 구체적인 경우를 구현한 다른 클래스의 인스턴스만 만들 수 있는 추상적인 개념은 표현하는 클래스라면 인스턴스 생성은 바람직하지 않다. 8-1장에서 사용한 Person과 Organization이 상속한 Entity 클래스의 경우를 예시로 들 수 있다. 하지만 Entity 자체는 추상적인 개념이다. 따라서 구체적인 하위 클래스의 인스턴스가 아닌 Entity 인스턴스를 생성하는 것은 의미가 없다 이제부터 코틀린에서 이런 ..
-
8-1. 클래스 계층 이해하기 : 상속Study(종료)/Kotlin 22.09.13 ~ 12.18 2022. 11. 5. 22:40
8장 8-1. 클래스 계층 이해하기 : 상속 8-2. 클래스 계층 이해하기 : 추상 클래스와 인터페이스 7장은 양이 좀 많았는데 8장은 적은 분량은 아닌 것 같은데 7장에 비하면 확실히 나은 것 같다 8장에서는 4, 6장에서 배운 코틀린의 객체지향 측면을 계속 다룬다. 클래스 상속 개념 / 하위 클래서 정의 방법, 추상 클래스 / 인터페이스 / 클래스 위임을 통해 복잡한 클래스 계층 구조를 설계하는 방법에 대한 내용이 있다. 8-1. 상속 도메인 개념에 있는 is-a 관계(자동차는 교통수단이다와 같은 A는 B에 포함된다는 관계)를 표현하기 위해 대부분의 객체지향 언어는 상속이라는 개념을 사용한다. 클래스 A가 (하위(subclass) / 파생(derived) 클래스라고 부른다) 클래스 B(상위(super..
-
7-2 컬렉션과 I/O 자세히 알아보기 : 파일과 I/O 스트림Study(종료)/Kotlin 22.09.13 ~ 12.18 2022. 10. 30. 20:47
7장 7-1. 컬렉션과 I/O 자세히 알아보기 : 컬렉션 타입 (1) (7-1.1~ 7-1.4) 7-1. 컬렉션과 I/O 자세히 알아보기 : 컬렉션 타입 (2) ( 7-1.5~ 7-1.7 ) 7-1. 컬렉션과 I/O 자세히 알아보기 : 컬렉션 타입 (3) ( 7-1.8~ 7-1.11 ) 7-2. 컬렉션과 I/O 자세히 알아보기 : 파일과 I/O 스트림 7-2. 파일과 I/O 스트림 입/출력 연산을 처리하는 표준 라이브러리 기능에 대해 작성해보겠다. 이 기능들은 자바에 있는 파일, I/O 스트림, URL 관련 API를 기반으로 만들어져JDK에 이미 있는 I/O 관련 클래스를 더 쉽게 사용할 수 있도록 해주는 확장 함수와 확장 프로퍼티를 제공한다. 1) 스트림 유틸리티 다음 함수들을 사용하면 스트림의 전체 ..
-
7-1 컬렉션과 I/O 자세히 알아보기 : 컬렉션 타입(3)Study(종료)/Kotlin 22.09.13 ~ 12.18 2022. 10. 30. 00:22
7장 7-1. 컬렉션과 I/O 자세히 알아보기 : 컬렉션 타입 (1) (7-1.1~ 7-1.4) 7-1. 컬렉션과 I/O 자세히 알아보기 : 컬렉션 타입 (2) ( 7-1.5~ 7-1.7 ) 7-1. 컬렉션과 I/O 자세히 알아보기 : 컬렉션 타입 (3) ( 7-1.8~ 7-1.11 ) 7-2. 컬렉션과 I/O 자세히 알아보기 : 파일과 I/O 스트림 7-1. 컬렉션 9) 변환 코틀린 표준 라이브러리는 컬렉션의 모든 원소를 주어진 큐직에 따라 변경한 뒤 정해진 방식으로 조합하여 새로운 컬렉션을 만들어내는 변환 함수를 제공한다. 이 함수는 mapping, flattening, association 세가지 유형으로 나눌 수 있다. 1) mapping 매핑 변환은 주어진 함수를 원본 컬렉션의 원소에 각각 적용..
-
7-1 컬렉션과 I/O 자세히 알아보기 : 컬렉션 타입(2)Study(종료)/Kotlin 22.09.13 ~ 12.18 2022. 10. 29. 22:26
7장 7-1. 컬렉션과 I/O 자세히 알아보기 : 컬렉션 타입 (1) (7-1.1~ 7-1.4) 7-1. 컬렉션과 I/O 자세히 알아보기 : 컬렉션 타입 (2) ( 7-1.5~ 7-1.7 ) 7-1. 컬렉션과 I/O 자세히 알아보기 : 컬렉션 타입 (3) ( 7-1.8~ 7-1.11 ) 7-2. 컬렉션과 I/O 자세히 알아보기 : 파일과 I/O 스트림 7-1. 컬렉션 5) 컬렉션 원소에 접근하기 기본 컬렉션 연산 외에 개별 컬렉션 원소에 대한 접근을 편하게 해주는 함수들을 살펴보자. first() / last() : 주어진 컬렉션의 첫 번째 / 마지막 원소 반환, 해당 컬렉션이 비어있을 경우 Exception 발생 firstOrNull() / LastOrNull() : 해당 컬렉션이 비어있을 경우 Exc..