본문 바로가기
Minecraft - Diamond Picaxe
학교 공부

Kotlin 공부

이 글은 테크과학!DiMo님의 Kotlin 강좌를 보고 작성하였습니다!

 

헷갈렸던 개념들 위주로 작성하였습니다.

코틀린의 전반적인 내용을 담고 있지는 않습니다..!

 

객체프 재수강 수강신청 성공하길 기원하며

 

https://youtu.be/8RIsukgeUVw?si=dOumtEiAyR40FfrI


+ 권장 사항

 

클래스 이름은 파스칼 표기법(모든 단어를 대문자로 시작)

ClassName

 

함수나 변수 이름은 카멜 표기법(첫 단어만 소문자로 시작)

functionName


변수 선언 방법

 

var : 일반적으로 통용되는 변수, 언제든지 읽기 쓰기가 가능함(r은 구부러져서 읽기쓰기 계속 ok)

val: 선언시에만 초기화 가능, 중간에 값을 변경할 수 없음(l은 뻣뻣해서 한번만 ok)

 

+클래스에 선언된 변수는 property(속성), 이 외의 scope 내에 선언된 변수는 local variable(로컬변수)라고 불린다.

+고전적인 언어들은 변수가 선언된 후 초기화 되지 않으면 기본값으로 초기화되거나 값이 할당되지 않았다는 표시로 null값을 가지지만, Kotlin기본 변수에서 null을 허용하지 않으며 또한 변수에 값을 할당하지 않은 채로 사용하게 되면 문법 에러를 표시하고 컴파일을 막아주므로 의도하지 않은 동작이나 null pointer exception 등을 원천적으로 차단해 준다는 장점이 있다.

 

변수에 값이 할당되지 않았다는 것을 하나의 정보로 사용하기 위해선, 아래처럼 변수 선언 시, 자료형 뒤에 물음표를 붙이면 null을 허용하는 nullable 변수로 선언해 줄 수 있다. 다만, nullable 변수는 값이 null인 상태로 연산할 시 null pointer exception이 발생할 수 있으므로 꼭 필요한 경우에 한해서만 사용해야 한다. 

fun main() {
    var a:Int? = null
}

 


클래스의 기본 구조

 

'값'과 그 값을 사용하는 '기능'들을 묶어놓은 것

고유의 특징값을 담는 변수인 '속성' + 기능을 구현한 '함수'로 이루어짐

'인스턴스'(클래스를 이용해서 만들어내는 서로 다른 속성의 객체)를 만드는 틀

 

fun main() {
    
    var a = Person("박보영", 1990) //클래스 선언 시 적은 속성 순서대로 괄호 안에 작성
    var b = Person("전정국", 1997)
    var c = Person("장원영", 2004)
  
    println("안녕하세요, ${a.birthYear}년생 ${a.name}입니다~")
}

class Person(var name:String, val birthYear:Int) //괄호 안 속성들이 곧 생성자
  • Person이라는 클래스는 이름과 생년월일을 속성으로 가진다. (변수를 선언하는 것과 형태가 같음)
  • a라는 변수에 '박보영'님의 인스턴스를 만들었다.
  • 인스턴스를 담은 변수인 a를 사용하기 위해선 변수명.속성명을 쓴다.

 

fun main() {
    
    var a = Person("박보영", 1990)
    var b = Person("전정국", 1997)
    var c = Person("장원영", 2004)
  
    a.introduce() //인스턴스를 통해 이 함수를 참조하여 호출함
    b.introduce()
    c.introduce()
}

class Person(var name:String, val birthYear:Int){
    fun introduce() {
        println("안녕하세요, ${birthYear}년생 ${name}입니다!") //클래스 내부에서는 속성 이름만 사용함
    }
}
  • 자주 사용하는 공통적인 기능은 클래스 내에 함수로 넣는다.

클래스의 생성자

 

새로운 인스턴스를 만들기 위해 호출하는 특수한 함수

인스턴스의 속성을 초기화하며 인스턴스 생성시 구문을 수행하는 역할을 한다(init을 통해서)

init함수는 패러미터나 반환형이 없는 특수한 함수, 생성자를 통해 인스턴스가 만들어질 때 호출되는 함수

생성자를 호출하면, 생성자를 호출하는 클래스의 인스턴스를 만들어 반환받을 수 있다.

 

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

class Person(var name:String, val birthYear:Int){ //괄호 안 속성들이 곧 생성자
    init {
        println("${this.birthYear}년생 ${this.name}님이 생성되었습니다.")
    }
}

 

  • this는 인스턴스 자신의 속성이나 함수를 호출하기 위해 클래스 내부에서 사용되는 키워드이다. 

생성자를 사용할 때, 항상 모든 속성을 수동으로 초기화하는 것이 비효율적인 경우가 존재한다. 예를 들어 100명의 사람 중에 90명이 1997년생이라면 1997년을 기본값으로 만들 수 있는 방법을 고려할 것이다. 이때는 클래스를 만들 때 기본으로 선언되는 기본생성자 외에 필요에 따라 추가적으로 선언할 수 있는 보조생성자를 이용한다. 

 

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

class Person(var name:String, val birthYear:Int){
    init {
        println("${this.birthYear}년생 ${this.name}님이 생성되었습니다.")
    }
    
    constructor(name:String): this(name,1997){
        println("보조 생성자가 사용되었습니다.")
    }
}
  • 보조생성자는 constructor라는 키워드를 사용한다.
  • 보조생성자를 만들 때는 반드시 기본생성자를 통해 속성을 초기화 해줘야 한다.
  • 보조생성자가 기본 생성자를 호출하도록 하려면 콜론을 붙인 후 this라는 키워드를 사용하고 기본생성자가 필요로하는 패러미터를 괄호 안에 넣어준다.

클래스의 상속

 

이미 존재하는 클래스를 확장하여 새로운 속성이나 함수를 추가한 클래스를 만들어야할 때,

여러 개의 클래스를 만들었는데 클래스의 공통점을 뽑아 코드 관리를 편하게 해야할 때 클래스의 상속을 사용한다.

속성과 함수를 물려주는 쪽을 수퍼 클래스, 물려받는 쪽을 서브 클래스라고 한다.

코틀린은 상속 금지가 기본값이기에 'open'을 통해서 상속을 가능하게 해준다.

 

fun main() {
    var a = Animal("별이",5,"개")
    var b = Dog("별이", 5)
    
    a.introduce()
    b.introduce()
    
    b.bark()
}

open class Animal(var name:String, var age: Int, var type: String)
{
    fun introduce(){
        println("저는 ${type} ${name}이고 ${age}살 입니다~")
    }
}

class Dog(name:String, age:Int) : Animal(name,age,"개") //클래스의 자체 속성으로 만들어주는 var 붙이지 않는다.
{
    fun bark(){
        println("멍멍!")
    }
}
  • 서브클래스는 수퍼클래스에 존재하는 속성과 같은 이름의 속성을 가질 수 없다.
  • 서브클래스가 생성될 때는 반드시 수퍼클래스의 생성자까지 호출되어야 한다.
  • Dog클래스를 만들 때는 생성자에서 이름과 나이를 받긴 하지만 클래스의 자체 속성으로 만들어주는 var을 붙이지 말고(val,var 등을 붙이면 속성으로 선언됨) 일반 패러미터로 받아 Animal 클래스의 생성자에 직접 넘겨준다.
  • 클래스의 상속은 클래스 선언 뒤에 콜론을 붙이고 수퍼클래스의 생성자를 호출할 수 있도록 해준다.

오버라이딩과 추상화

 

아아

'학교 공부' 카테고리의 다른 글

혼자 공부하는 컴퓨터 구조 + 운영체제  (0) 2026.01.31
git, github 공부  (0) 2025.07.22