20231205 TIL

JaeYeong·2023년 12월 5일

Calculator Lv.3을 해결하면서 생긴 크고 작은 문제들을 기록해 보려고 한다.

1. 소스코드를 Lv1, Lv2, Lv3으로 구분하기

문제

각 Lv별로 어떤 것들이 달라졌는지 확인해볼 필요가 있었다.

해결 방법

이를 구분하기 위해 저번 프로젝트에서는 사용하지 않았던 git branch를 사용했다.

git branch

브랜치를 생성하는 명령어

기본 구조

git branch 브랜치이름

예시

git branch lv2

git switch

브랜치를 옮겨다닐 수 있는 명령어

기본 구조

git switch 브랜치이름

예시

git switch lv1

주의사항
git switch를 사용하다가 이런 오류가 발생하는 경우가 있는데

error: Your local changes to the following files would be overwritten by checkout:
        src/main.kt
Please commit your changes or stash them before you switch branches.
Aborting

말 그대로 다른 브랜치로 이동하기 전에 commit을 하거나, git stash로 임시 저장을 해야 한다.

결과

lv1 브랜치, lv2 브랜치, lv3 브랜치의 코드가 꼬이지 않고 원하는 코드가 저장되었다. 앞으로도 이런 상황에서는 브랜치를 구분하는 방법을 꾸준히 쓰게 될 듯하다.

2. 클래스 사용하기 in Kotlin

문제

분명 참조할 클래스를 제대로 가져온 것 같은데, 왜 클래스 내부에 정의된 메소드를 사용하지 못할까?

발생한 이유

정답

var selectAdd = AddOperation (num1,num2)
selectAdd.operatingCalc()

오답

var selectAdd = AddOperation (num1,num2)
AddOperation.operatingCalc()

클래스가 할당된 변수를 통해 클래스 내부의 메소드를 불러와야 하는데, 자꾸 클래스 이름을 가져다 붙힌다...
클래스를 제대로 이해했다면 발생하지 않을 실수였다.
변수에 위치정보를 저장하고, 그 위치정보를 통해 클래스 내부의 메소드를 불러오는 것이다.
그런데 그냥 클래스 이름을 가져다 붙히니까 Unresolved reference가 발생하는거임

해결 방법

클래스 참조에 관한 예제를 살펴보면서, 내 코드와 어느 부분이 다른지 계속 찾아봤다. 아직 클래스 사용이 익숙지 않다 보니, 발생 원인을 찾는 데에도 꽤 많은 시간을 썼던 것 같다.

3. 상속 활용하기 in Kotlin

문제

부모 클래스에서 상속이 왜 안될까?

발생한 이유

부모 클래스에서 생성자를 활용하는 경우에는, 자식에게 객체 생성 시 전달해줘야 한다.
내 경우에는 부모 클래스에서 생성자를 만들었고, 자식 클래스에 부모 클래스에 있는 생성자들 상속시켜주고 싶다.
그런데 자식 클래스에게 생성자를 전달해 주는 부분을 빼먹었다. 그 부분을 다시 한번 정리하면

부모 클래스

// Calculator.kt 
open class Calculator(_num1:Float, _num2:Float) {
    var num1 :Float
    var num2 :Float


    init {
        num1 = _num1
        num2 = _num2

    }
    open fun operatingCalc () {
        println("${num1}과 ${num2}를")
    }


}

자식 클래스

// AddOperation.kt 
class AddOperation(num1:Float,num2:Float) : Calculator(num1,num2) {
    var resultAdd : Float = num1+num2

    init {
        this.resultAdd = resultAdd
    }
    override fun operatingCalc () {
        println("${num1} - ${num2} = ${resultAdd}")
    }

}
}

AddOperation(num1:Float,num2:Float) : Calculator(num1,num2) 요 부분을
AddOperation() : Calculator 이렇게만 적어버린 것

해결 방법

상속에 관한 예제를 살펴보면서, 내 코드와 어느 부분이 다른지 계속 찾아봤다. 그래도 클래스에 대한 이해가 어느 정도 생긴 상태에서 원인을 찾아보니 찾는데 오랜 시간을 들이진 않았다.

0개의 댓글