ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kotlin] 클래슀 생성과 상속
    Android/Kotlin 2021. 7. 4. 21:05
    λ°˜μ‘ν˜•
    • 이 글은 "μœ€μž¬μ„±μ˜ Google 곡식 μ–Έμ–΄ Kotlin" κ°•μ˜λ₯Ό λ“£κ³  κ³΅λΆ€ν•œ λ‚΄μš©μ„ λ°”νƒ•μœΌλ‘œ μž‘μ„±ν•œ λ‚΄μš©μž…λ‹ˆλ‹€.

    객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° (Object Oriented Programming)

    • Kotlin은 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°κ³Ό ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ° λͺ¨λ‘ κ°€λŠ₯ν•©λ‹ˆλ‹€.

    • 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄λž€ μ—¬λŸ¬ κ³΅ν†΅μ μœΌλ‘œ μ‚¬μš©λ˜λŠ” 속성듀을 ν•˜λ‚˜μ˜ 객체둜 ν‘œν˜„ν•˜μ—¬ 데이터와 κΈ°λŠ₯듀을 κ΄€λ¦¬ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° κΈ°λ²•μž…λ‹ˆλ‹€.

    • Java와 같이 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜κΈ° μœ„ν•΄μ„œ 클래슀의 생성과 μƒμ†ν•˜λŠ” 방법에 λŒ€ν•΄ μ†Œκ°œν•˜λ €κ³  ν•©λ‹ˆλ‹€.


    클래슀 생성

    class Student{
        var id: Int = 0
        var name : String = "ows"
    }
    
    fun main() {
        var obj = Student()
        print("${obj.id} ${obj.name}")
    }
    
    
    • class λΌλŠ” μ˜ˆμ•½μ–΄λ₯Ό 톡해 클래슀λ₯Ό 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.

    • Java와 달리 newλ₯Ό μ‚¬μš©ν•  ν•„μš” 없이 클래슀의 이름과 κ΄„ν˜Έλ₯Ό 톡해 생성할 수 μžˆμŠ΅λ‹ˆλ‹€.


    클래슀의 μƒμ„±μž (constructor)

    • 클래슀의 μƒμ„±μžλŠ” ν΄λž˜μŠ€κ°€ 생성될 λ•Œ μžλ™μœΌλ‘œ ν˜ΈμΆœλ˜λŠ” λΆ€λΆ„μœΌλ‘œ λ°˜ν™˜ν•˜λŠ” νƒ€μž…μ΄ μ—†κΈ° λ•Œλ¬Έμ— λ©”μ„œλ“œλΌκ³  μ§€μΉ­ν•˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€.

    • λ§€κ°œλ³€μˆ˜λ‘œ ν•„μš”ν•œ λ³€μˆ˜λ“€μ„ λ°›μ•„ λ©€λ²„λ³€μˆ˜λ“€μ„ μ΄ˆκΈ°ν™”ν•˜λŠ” λͺ©μ μœΌλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.

    • constructor ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μƒμ„±μžλ₯Ό μ„ μ–Έν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    • μƒμ„±μžλ₯Ό λ§€κ°œλ³€μˆ˜κ°€ λ‹€λ₯΄κ²Œ μ„€μ •ν•˜μ—¬ μ—¬λŸ¬ 번 μ„ μ–Έν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

    class Student{
        constructor(id : Int, name: String){
            this.id = id
            this.name = name
        }
    
        var id: Int = 0
        var name : String = "ows"
    }
    
    fun main() {
        var obj = Student(1, "hong gil dong")
        print("${obj.id} ${obj.name}")
    }

    init μ½”λ“œ λΈ”λŸ­

    • kotlinμ—μ„œλŠ” init μ½”λ“œ λΈ”λŸ­λ₯Ό 톡해 ν΄λž˜μŠ€κ°€ 생성 μ‹œμ— μžλ™μœΌλ‘œ μ²˜λ¦¬λ˜λŠ” μ½”λ“œ λΈ”λŸ­μ„ 지정할 수 μžˆμŠ΅λ‹ˆλ‹€.

    • μƒμ„±μžκ°€ 주둜 λ³€μˆ˜μ˜ μ΄ˆκΈ°ν™”ν•˜λ₯Ό ν•˜κ²Œ 되고, init μ½”λ“œ λΈ”λŸ­μ€ 생성과 λ™μ‹œμ— μ‹€ν–‰ν•΄μ•Ό ν•˜λŠ” κΈ°λŠ₯μ΄λ‚˜ λ™μž‘λ“€μ„ μ •μ˜ν•˜λ„λ‘ ν•©λ‹ˆλ‹€.

    • λ˜ν•œ, μ—¬λŸ¬ μƒμ„±μžμ—κ²Œ κ³΅ν†΅μ μœΌλ‘œ ν¬ν•¨λ˜λŠ” κΈ°λŠ₯듀을 μ •μ˜ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜κΈ°λ„ ν•©λ‹ˆλ‹€.

    class Student{
        init {
            println("Student init 블둝")
        }
    
        constructor(id : Int, name: String){
            this.id = id
            this.name = name
        }
    
        constructor(id: Int){
            this.id = id
        }
    
        var id: Int = 0
        var name : String = "ows"
    }
    public final class Student {
       private int id;
       @NotNull
       private String name;
    
       public final int getId() {
          return this.id;
       }
    
       public final void setId(int var1) {
          this.id = var1;
       }
    
       @NotNull
       public final String getName() {
          return this.name;
       }
    
       public final void setName(@NotNull String var1) {
          Intrinsics.checkParameterIsNotNull(var1, "<set-?>");
          this.name = var1;
       }
    
       public Student(int id, @NotNull String name) {
          Intrinsics.checkParameterIsNotNull(name, "name");
          super();
          String var3 = "Student init 블둝";
          boolean var4 = false;
          System.out.println(var3);
          this.name = "ows";
          this.id = id;
          this.name = name;
       }
    
       public Student(int id) {
          String var2 = "Student init 블둝";
          boolean var3 = false;
          System.out.println(var2);
          this.name = "ows";
          this.id = id;
       }
    }
    • kotlin으둜 λ§Œλ“  μ½”λ“œλ₯Ό 컴파일 ν›„ java μ½”λ“œλ‘œ λ””μ»΄νŒŒμΌν•œ κ²°κ³Όμž…λ‹ˆλ‹€.

    • kotlin은 멀버 λ³€μˆ˜λ₯Ό μžλ™μœΌλ‘œ get, setν•¨μˆ˜λ₯Ό λ§Œλ“€μ–΄ μ£ΌκΈ° λ•Œλ¬Έμ— 직접 μ ‘κ·Όν•˜λŠ” κ²ƒμ²˜λŸΌ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    • init λ©”μ†Œλ“œ λΈ”λŸ­μ—μ„œ ν˜ΈμΆœν–ˆλ˜ κΈ°λŠ₯듀이 λͺ¨λ“  μƒμ„±μžμ— ν¬ν•¨λœ 것을 확인할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.


    클래슀 κΈ°λ³Έ μƒμ„±μž

    class Student(var id: Int, var name: String){
        init {
            println("Student init 블둝")
        }
    
        constructor(id: Int) : this(id, "ows"){
            this.id = id
        }
    }
    • 클래슀 κΈ°λ³Έ μƒμ„±μžλŠ” class μ„ μ–Έν•˜λŠ” λΆ€λΆ„μ—μ„œ λ§€κ°œλ³€μˆ˜λ₯Ό μž…λ ₯ν•˜λ©΄ κΈ°λ³Έ μƒμ„±μžλ‘œ 섀정이 λ©λ‹ˆλ‹€.

    • var, val μ˜ˆμ•½μ–΄λ„ 같이 μž…λ ₯을 ν•˜κ²Œ 되면 클래슀의 λ©€λ²„λ³€μˆ˜λ‘œ μžλ™ 선언이 λ©λ‹ˆλ‹€. ν¬ν•¨ν•˜μ§€ μ•Šμ„ μ‹œ λ³€μˆ˜ μ΄ˆκΈ°ν™” μš©λ„λ‘œλ§Œ μ‚¬μš©ν•˜λŠ” μ§€μ—­λ³€μˆ˜κ°€ λ©λ‹ˆλ‹€.

    • κΈ°λ³Έ μƒμ„±μžλ₯Ό 섀정을 ν•  경우, 보쑰 μƒμ„±μž(constructor)λ₯Ό μ„ μ–Έ μ‹œμ— κΈ°λ³Έμƒμ„±μžλ₯Ό ν†΅ν•΄μ„œλ§Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 λ•Œ, this ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ λ©λ‹ˆλ‹€.

    • κΈ°λ³Έ μƒμ„±μžλ₯Ό μ œμ™Έν•˜κ³  보쑰 μƒμ„±μžλŠ” init μ½”λ“œ λΈ”λŸ­μ΄ μ‹€ν–‰λœ μ΄ν›„λ‘œ μƒμ„±μžμ—μ„œ λ³€μˆ˜κ°€ μ΄ˆκΈ°ν™”λ©λ‹ˆλ‹€.

    public final class Student {
       private int id;
       @NotNull
       private String name;
    
       public final int getId() {
          return this.id;
       }
    
       public final void setId(int var1) {
          this.id = var1;
       }
    
       @NotNull
       public final String getName() {
          return this.name;
       }
    
       public final void setName(@NotNull String var1) {
          Intrinsics.checkParameterIsNotNull(var1, "<set-?>");
          this.name = var1;
       }
    
       public Student(int id, @NotNull String name) {
          Intrinsics.checkParameterIsNotNull(name, "name");
          super();
          this.id = id;
          this.name = name;
          String var3 = "Student init 블둝";
          boolean var4 = false;
          System.out.println(var3);
       }
    
       public Student(int id) {
          this(id, "ows");
          this.id = id;
       }
    }

    λ””μ»΄νŒŒμΌν•œ 결과도 μ „κ³Ό λ™μΌν•˜κ²Œ init μ½”λ“œ λΈ”λŸ­μ„ ν˜ΈμΆœν•˜κ²Œ 되고, 멀버 λ³€μˆ˜λ„ μ •μƒμ μœΌλ‘œ μ •μ˜λœ 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.


    상속

    • 클래슀λ₯Ό 섀계할 λ•Œ κ³΅ν†΅λœ 뢀뢄이 μžˆλ‹€λ©΄ μƒμœ„ 클래슀λ₯Ό μƒμ„±ν•˜κ³  ν•˜μœ„ν΄λž˜μŠ€κ°€ λ¬Όλ € 받도둝 ν•˜λŠ” 방법이 μƒμ†μž…λ‹ˆλ‹€.

    • μƒμ†ν•˜λŠ” 클래슀λ₯Ό λΆ€λͺ¨ 클래슀, μƒμ†λ°›λŠ” 클래슀λ₯Ό μžμ‹ 클래슀라고 ν•˜λ©° μžλ°”μ™€ 달리 class둜 μ„ μ–Έλœ ν΄λž˜μŠ€λŠ” 상속할 수 μ—†κ³  open ν‚€μ›Œλ“œλ₯Ό 뢙인 클래슀만 상속이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

    open class Human(var name: String){
        fun printparentmethod(){
            println("parent method")
        }
    }
    
    class Student(var id: Int, name: String) : Human(name){
        init {
            println("Student init 블둝")
        }
    
        constructor(id: Int) : this(id, "ows"){
            this.id = id
        }
    
        fun printchildmethod(){
            println("child method")
        }
    }
    
    fun main() {
        var obj = Student(1, "hong gil dong")
        obj.printparentmethod()
        obj.printchildmethod()
    }
    • 상속 μ‹œμ—λŠ” λΆ€λͺ¨ 클래슀의 κΈ°λ³Έ μƒμ„±μžλ₯Ό μ‚¬μš©ν•΄μ„œ μ„ μ–Έν•΄μ•Ό ν•˜κ³ , λ§€κ°œλ³€μˆ˜κ°€ μžˆμ„ μ‹œμ— λŒ€μž…ν•΄μ•Ό ν•  값듀은 미리 μž…λ ₯ν•΄μ•Ό μ˜¬λ°”λ₯Έ 상속이 μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.
    λ°˜μ‘ν˜•

    'Android > Kotlin' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

    [Kotlin] Array μ‚¬μš©λ²•  (0) 2021.08.12
    [Kotlin] Functional Programming  (0) 2021.08.11
    [Kotlin] Generic, Inner 클래슀  (0) 2021.07.07
    [Kotlin] Companion Object λž€?  (0) 2021.07.05
    [Kotlin] μ ‘κ·Όμ œν•œμž, property, get(), set()  (0) 2021.07.05
Designed by Tistory.