SlideShare a Scribd company logo
Kotlin
Data, Nested classes
새차원
새로운 차원의 앱을 지향합니다.
http://blog.naver.com/cenodim
hohoins@nate.com
새차원
Data Classes
• Data 클래스
– 용도: 데이터는 보유하지만 아무것도 하지 안는 클래스
– 코틀린에서는 data class 제공
새차원
data class User(val name: String, val age: Int)
Data Classes
• Data 클래스
– 기본 생성자에서 선언된 속성을 통해, 아래의 기능들을 컴파일러
가 자동으로 생성해 줌
• equals()
• hashCode()
• copy()
• toString() of the form "User(name=John, age=42)",
• componentN() functions
– 명시적으로 정의해주는 경우에는, 컴파일러가 자동으로 생성해
주지 안음
새차원
Data Classes
• 의미 있는 Data 클래스의 조건
– 기본생성자에 1개 이상의 파라매터
– 기본생성자의 파라매터가 var, val로 선언
– Data 클래스는 abstract, open, sealed, inner가 안됨
• 1.1이후에 바뀐 점
– Data 클래스 interface구현 가능
– Sealed class 상속가능
새차원
Data Classes
• 기본 값
– Jvm에서 파라매터 없는 생성자가 필요한 경우,
– 모든 프로퍼티에 기본 값을 설정해 주면 됨
새차원
data class User(val name: String = "", val age: Int = 0)
val exam_0 = User()
val exam_1 = User("Kotlin")
val exam_2 = User("Kotlin", 113)
val exam_3 = User(age=113)
val exam_4 = User(name="Kotlin", age=113)
Data Classes
• 복사
– 객체의 기존 값들은 유지하고, 일부 값만 고쳐서 새로운 객체를
만들고 싶은 경우
– Data 클래스에 컴파일러가 copy를 만들어 주기 때문에 바로
copy를 호출해서 사용하면 됨
새차원
fun copy(name: String = this.name, age: Int = this.age) =
User(name, age)
val jack = User(name = "Jack", age = 1)
val olderJack = jack.copy(age = 2)
Data Classes
• Destructuring Declarations
– data 클래스는 Destructuring Declarations을 사용 가능함
– 컴파일러가 componentN 함수를 자동으로 만들어 주기 때문
새차원
val jane = User("Jane", 35)
val (name, age) = jane
println("$name, $age years of age")
// prints "Jane, 35 years of age"
Data Classes
• Standard Data Classes
– 스텐다드 라이브러리에서 제공하는 data 클래스도 있음
• Pair
• Triple
– 물론 가독성을 위해서는 프로퍼티에 의미 있는 이름을 제공하는
클래스가 최고임
새차원
val jane = User("Jane", 35)
println(jane) // User(name=Jane, age=35)
val pair = Pair("Jane", 35)
println(pair) // (Jane, 35)
Nested Classes
• 중첩 클래스 (Nested Classes)
– 클래스는 다른 클래스에 중첩될 수 있음
새차원
class Outer {
private val bar: Int = 1
class Nested {
fun foo() = 2
}
}
val demo = Outer.Nested().foo() // == 2
Nested Classes
• 내부 클래스 (Inner Class)
– 클래스에 inner를 표기하면 바깥쪽 클래스의 멤버에 접근 할 수
있음
새차원
class Outer {
private val bar: Int = 1
inner class Inner {
fun foo() = bar
}
}
val demo = Outer().Inner().foo() // == 1
Nested Classes
• 익명 내부 클래스 (Anonymous inner classes)
– 객체 표현식 (object expression)을 이용해서 익명 내부 클래스의
인스턴스를 생성할 수 있음
– Functional java interface인 경우에는 접두어에 인터페이스 이름
을 사용해서 람다식으로 표현할 수 도 있음
새차원
mSearchEditText.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View?) { // ...
}
})
mSearchEditText.setOnClickListener( View.OnClickListener {
v -> // ....
})
감사합니다.
새차원

More Related Content

What's hot

[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼
[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼
[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼
Sanghoon Yoon
 
Java lambda
Java lambdaJava lambda
Java lambda
Hyosang Hong
 
파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기
Yong Joon Moon
 
Java 강의자료 ed11
Java 강의자료 ed11Java 강의자료 ed11
Java 강의자료 ed11
hungrok
 
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
MIN SEOK KOO
 
Scala type class pattern
Scala type class patternScala type class pattern
Scala type class pattern
Yong Joon Moon
 
Java 변수자료형
Java 변수자료형Java 변수자료형
Java 변수자료형
Hyosang Hong
 
Ksug2015 - JPA1, JPA 소개
Ksug2015 - JPA1, JPA 소개Ksug2015 - JPA1, JPA 소개
Ksug2015 - JPA1, JPA 소개
Younghan Kim
 
Programming java day2
Programming java day2Programming java day2
Programming java day2Jaehoonyam
 
[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)
용호 최
 
파이썬 객체 클래스 이해하기
파이썬  객체 클래스 이해하기파이썬  객체 클래스 이해하기
파이썬 객체 클래스 이해하기
Yong Joon Moon
 
Scala dir processing
Scala dir processingScala dir processing
Scala dir processing
Yong Joon Moon
 
Swift 3 Programming for iOS : class and structure
Swift 3 Programming for iOS : class and structureSwift 3 Programming for iOS : class and structure
Swift 3 Programming for iOS : class and structure
Kwang Woo NAM
 
python data model 이해하기
python data model 이해하기python data model 이해하기
python data model 이해하기
Yong Joon Moon
 
Java start01 in 2hours
Java start01 in 2hoursJava start01 in 2hours
Java start01 in 2hours
Kenu, GwangNam Heo
 
15 swift 클래스
15 swift 클래스15 swift 클래스
15 swift 클래스
Changwon National University
 
The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표재정 이
 

What's hot (17)

[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼
[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼
[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼
 
Java lambda
Java lambdaJava lambda
Java lambda
 
파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기파이썬 class 및 인스턴스 생성 이해하기
파이썬 class 및 인스턴스 생성 이해하기
 
Java 강의자료 ed11
Java 강의자료 ed11Java 강의자료 ed11
Java 강의자료 ed11
 
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
이것이 자바다 Chap. 6 클래스(CLASS)(KOR)
 
Scala type class pattern
Scala type class patternScala type class pattern
Scala type class pattern
 
Java 변수자료형
Java 변수자료형Java 변수자료형
Java 변수자료형
 
Ksug2015 - JPA1, JPA 소개
Ksug2015 - JPA1, JPA 소개Ksug2015 - JPA1, JPA 소개
Ksug2015 - JPA1, JPA 소개
 
Programming java day2
Programming java day2Programming java day2
Programming java day2
 
[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)
 
파이썬 객체 클래스 이해하기
파이썬  객체 클래스 이해하기파이썬  객체 클래스 이해하기
파이썬 객체 클래스 이해하기
 
Scala dir processing
Scala dir processingScala dir processing
Scala dir processing
 
Swift 3 Programming for iOS : class and structure
Swift 3 Programming for iOS : class and structureSwift 3 Programming for iOS : class and structure
Swift 3 Programming for iOS : class and structure
 
python data model 이해하기
python data model 이해하기python data model 이해하기
python data model 이해하기
 
Java start01 in 2hours
Java start01 in 2hoursJava start01 in 2hours
Java start01 in 2hours
 
15 swift 클래스
15 swift 클래스15 swift 클래스
15 swift 클래스
 
The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표
 

10 data nested_classes

  • 1. Kotlin Data, Nested classes 새차원 새로운 차원의 앱을 지향합니다. http://blog.naver.com/cenodim hohoins@nate.com 새차원
  • 2. Data Classes • Data 클래스 – 용도: 데이터는 보유하지만 아무것도 하지 안는 클래스 – 코틀린에서는 data class 제공 새차원 data class User(val name: String, val age: Int)
  • 3. Data Classes • Data 클래스 – 기본 생성자에서 선언된 속성을 통해, 아래의 기능들을 컴파일러 가 자동으로 생성해 줌 • equals() • hashCode() • copy() • toString() of the form "User(name=John, age=42)", • componentN() functions – 명시적으로 정의해주는 경우에는, 컴파일러가 자동으로 생성해 주지 안음 새차원
  • 4. Data Classes • 의미 있는 Data 클래스의 조건 – 기본생성자에 1개 이상의 파라매터 – 기본생성자의 파라매터가 var, val로 선언 – Data 클래스는 abstract, open, sealed, inner가 안됨 • 1.1이후에 바뀐 점 – Data 클래스 interface구현 가능 – Sealed class 상속가능 새차원
  • 5. Data Classes • 기본 값 – Jvm에서 파라매터 없는 생성자가 필요한 경우, – 모든 프로퍼티에 기본 값을 설정해 주면 됨 새차원 data class User(val name: String = "", val age: Int = 0) val exam_0 = User() val exam_1 = User("Kotlin") val exam_2 = User("Kotlin", 113) val exam_3 = User(age=113) val exam_4 = User(name="Kotlin", age=113)
  • 6. Data Classes • 복사 – 객체의 기존 값들은 유지하고, 일부 값만 고쳐서 새로운 객체를 만들고 싶은 경우 – Data 클래스에 컴파일러가 copy를 만들어 주기 때문에 바로 copy를 호출해서 사용하면 됨 새차원 fun copy(name: String = this.name, age: Int = this.age) = User(name, age) val jack = User(name = "Jack", age = 1) val olderJack = jack.copy(age = 2)
  • 7. Data Classes • Destructuring Declarations – data 클래스는 Destructuring Declarations을 사용 가능함 – 컴파일러가 componentN 함수를 자동으로 만들어 주기 때문 새차원 val jane = User("Jane", 35) val (name, age) = jane println("$name, $age years of age") // prints "Jane, 35 years of age"
  • 8. Data Classes • Standard Data Classes – 스텐다드 라이브러리에서 제공하는 data 클래스도 있음 • Pair • Triple – 물론 가독성을 위해서는 프로퍼티에 의미 있는 이름을 제공하는 클래스가 최고임 새차원 val jane = User("Jane", 35) println(jane) // User(name=Jane, age=35) val pair = Pair("Jane", 35) println(pair) // (Jane, 35)
  • 9. Nested Classes • 중첩 클래스 (Nested Classes) – 클래스는 다른 클래스에 중첩될 수 있음 새차원 class Outer { private val bar: Int = 1 class Nested { fun foo() = 2 } } val demo = Outer.Nested().foo() // == 2
  • 10. Nested Classes • 내부 클래스 (Inner Class) – 클래스에 inner를 표기하면 바깥쪽 클래스의 멤버에 접근 할 수 있음 새차원 class Outer { private val bar: Int = 1 inner class Inner { fun foo() = bar } } val demo = Outer().Inner().foo() // == 1
  • 11. Nested Classes • 익명 내부 클래스 (Anonymous inner classes) – 객체 표현식 (object expression)을 이용해서 익명 내부 클래스의 인스턴스를 생성할 수 있음 – Functional java interface인 경우에는 접두어에 인터페이스 이름 을 사용해서 람다식으로 표현할 수 도 있음 새차원 mSearchEditText.setOnClickListener(object : View.OnClickListener { override fun onClick(v: View?) { // ... } }) mSearchEditText.setOnClickListener( View.OnClickListener { v -> // .... })