개발지식

Kotlin 기본 문법(예시 코드)

우루쾅 2025. 8. 11. 23:01
728x90
반응형
SMALL

 

JAVA 를 베이스로 한 코틀린을 예시코드 통해 학습 해봅시다!

 

● loop 반복문 설정(continue에서도 사용 가능)

fun main() {
    // 코틀린은 loop 를 통해 탈출하고자 하는 반복문의 위치를 설정할 수 있다
    loop@for(i in 1..10){
        for(j in 1..10){
            if(i == 1 && j == 2) break@loop
            println("i : $i, j : $j")
        }
    }
}

 

 

  클래스 기본 구조

fun main() {
    var a = Person("박보영",1990)
    var b = Person("전정국",1997)
    var c = Person("장원영",2004)
    
    a.introduce()
    b.introduce()
    c.introduce()
}

// 클래스 속성을 등록할 때에는 (var 변수명:타입) 형식으로 선언
class Person(var name:String, val birth:Int){
    fun introduce(){
        // ${} 를 통해 값을 println에 넣을 수 있습니다.
    	println("안녕하세요, 나는 ${birth} 년생 ${name} 입니다. ") 
    }
}

 

  init && constructor

- init : 생성자를 통해 인스턴스가 만들어질 때 호출되는 함수

- constructor : 기본생성자와 다른 형태의 생성자를 제공하여 인스턴스 생성시 추가적인 기능을 제공하는 역할
                        기본 생성자를 통해 속성 초기화가 필요하며 해당 클래스를 다른 방식으로 쓴다고 보면 됨
                        자바의 오버로딩 방식과 비슷하다고 보면 됨

fun main() {
    var a = Person("박보영",1990)
    var b = Person("전정국",1997)
    var c = Person("장원영",2004)
    
    var d = Person("이루다")
    var f = Person("차은우")
    var g = Person("류수정")
}

class Person(var name:String, val birth:Int){
    // init 함수는 생성자를 통해 인스턴스가 만들어질 때 호출되는 함수
    init{
    	println("안녕하세요, 나는 ${birth} 년생 ${name} 입니다. ") 
    }
    
    // 보조생성자
    // 기본생성자와 다른 형태의 생성자를 제공하여
    // 인스턴스 생성시 추가적인 기능을 제공하는 역할
    // 기본 생성자를 통해 속성 초기화 필요!!
    // 해당 클래스를 다른 방식으로 쓴다고 보면 됨
    // 오버로딩 방식과 비슷하다고 보면 됨
    constructor(name:String) : this(name, 1997){
        println("보조생성자 생성")
    }
}

 

  상속

- 상속이 필요한 상황은 두가지!
1. 이미 존재하는 클래스를 확장하여 새로운 속성이나 함수를 추가한 클래스를 만들어야 할 때
2. 여러개의 클래스를 만들었을 때 클래스의 공통점을 뽑아서 정리할 때
- 상속의 조건
1. 서브클래스는 슈퍼클래스에 존재하는 속성과 같은 이름의 속성을 가질 수 없음
2. 서브클래스가 생성될 때에는 반드시 슈퍼클래스의 생성자까지 호출되어야 함

// 상속이 필요한 상황은 두가지!
// 1. 이미 존재하는 클래스를 확장하여 새로운 속성이나 함수를 추가한 클래스를 만들어야 할 때
// 2. 여러개의 클래스를 만들었을 때 클래스의 공통점을 뽑아서 정리할 때
// 물려주는 쪽이 슈퍼 클래스
// 물려 받는 쪽이 서브 클래스
fun main() {
    
    var a = Animal("별이", 5, "개")
    var b = Dog("별이", 5)
    
    a.introduce()
    b.introduce()
    
    b.bark()
    
    var c = Cat("루이", 7)
    
    c.introduce()
    c.meow()
    
    var d = nameA(30, "human")
    d.introduce()
    d.hello()
}

// 코틀린은 상속 금지가 기본 값
// 코틀린은 open 설정을 통해 상속을 할 수 있음!
open class Animal(var name:String, var age:Int, var type:String){
    fun introduce(){
        println("저는 ${type} ${name} 이고, ${age} 살 입니다.")
    }
}

// 상속의 조건
// 1. 서브클래스는 슈퍼클래스에 존재하는 속성과 같은 이름의 속성을 가질 수 없음
// 2. 서브클래스가 생성될 때에는 반드시 슈퍼클래스의 생성자까지 호출되어야 함
// 현재 Animal이 슈퍼클래스, Dog가 서브 클래스
class Dog (name:String, age:Int) : Animal(name, age, "개"){
    fun bark(){
        println("멍멍")
    }
}
    
class Cat(name:String, age:Int) : Animal(name, age, "고양이"){
    fun meow(){
        println("야옹야옹")
    }
}

class nameA(age:Int, type:String) : Animal("A", age, type){
    fun hello(){
        println("hello")
    }
}


  오버라이딩

이미 구현이 끝난 함수의 기능을 서브클래스에서 재구현 해줘야 할 때 사용

클래스 내부에서도 open을 fun 앞에 붙히면 오버라이딩 가능

Animal 클래스에서 open 으로 eat을 열어줘서 override 가능

fun main() {
    var t = Tiger()
    
    t.eat()
}

open class Animal{
    // 클래스 내부에서도 open을 fun 앞에 붙히면 오버라이딩 가능
    open fun eat(){
        println("음식을 먹습니다.")
    }
}

class Tiger : Animal(){
    // Animal 클래스에서 open 으로 eat을 열어줘서 override 가능
    override fun eat(){
        println("고기를 먹습니다")
    }
}

 

  추상화

형식만 선언하고 실제 구현은 서브클래스에서 일임할 때 사용(구현부는 값을 내뱉는 return 이라고 보면됨)

선언부만 있고 기능이 구현되지 않은 추상함수
추상함수를 포함하고 있는 추상 클래스로 구성

fun main() {
    var r = Rabbit()
    
    r.eat()
    r.sniff()
}

// 추상화
// 선언부만 있고 기능이 구현되지 않은 추상함수
// 추상함수를 포함하고 있는 추상 클래스로 구성
abstract class Animal{
    abstract fun eat()
    fun sniff(){
        println("킁킁")
    }
}

class Rabbit : Animal(){
    override fun eat(){
        println("당근을 먹습니다")
    }
}

 

 

출처

코틀린 - https://play.kotlinlang.org/
디모의 Kotlin 강좌 - https://www.youtube.com/watch?v=8RIsukgeUVw&list=PLQdnHjXZyYadiw5aV3p6DwUdXV2bZuhlN&index=1&pp=iAQB

728x90
반응형
LIST