[24.07.02] TIL - 023

🎧 0. 오늘의 추천곡

갑자기 떠오른 노래가 명곡이 아닐까요?

그래서 갑자기 떠오른 명곡을 추천드립니다.

성시경 - 거리에서 입니다.

💻 1. 코드 카타

오늘의 코드 카타는 숫자 변환하기입니다.

근데 아쉽게도, 아직 못 풀었습니다. 제가 쓴 답은 다음과 같습니다.

class Solution {
    fun solution(x: Int, y: Int, n: Int): Int {
        var answer: Int = -1
        var num = x
        // 3진법으로 만들어서 
        var trit = 0
        if(x == y) return 0
        while(true) {
            // 3번 다 y보다 이상이면 나가는 변수
            var isCannot = 0
            repeat(3) {
                num = x
                val tritStr = trit++.toString(3)
                for(i in tritStr) {
                    when(i) {
                        '0' -> num += n
                        '1' -> num *= 2
                        else -> num *= 3
                    }
                }
                if(num == y) return tritStr.length
                //if(num == y && answer > num) answer = tritStr.length
                else if(num > y) isCannot++
            }
            if(isCannot == 3) break
        }
        return answer
    }
}

3진법을 써서 모든 구간을 돌아보는 건데요.

아쉽게도 끝내는 방법을 찾는 것에서 막혀 있습니다.

풀게 되면 이후 TIL에서 작성해보겠습니다.

🍎 2. 수준별 학습반 강의 - SOLID 원칙

오늘은 SOLID 원칙에 대해서 강의를 들었습니다.

제가 이전에 하던 개인 프로젝트에서도 가장 고민이 되던 부분이었는데, 마침 오늘 이 강의를 듣게 됐습니다.

SOLID 원칙은 객체지향 프로그래밍에서 준수해야 하는 5가지 원칙을 말합니다.

S: SRP(단일 책임 원칙)는 말그대로 하나의 클래스는 단일 책임만 져야 한다는 뜻입니다.

단일 책임을 지게 되면, 다양하게 조합하여 사용할 수 있기에, 좋은 객체지향 프로그래밍을 할 수 있습니다.

O: OCP(개방-폐쇄 원칙)는 확장에는 개방적이어야 하지만, 수정에는 폐쇄적이어야 한다는 뜻입니다.

특정 객체를 한 곳에 몰아둔다던지 하는 것보다, 여러 인터페이스와 클래스를 만들어두는 것이 확장성에 더 도움됩니다.

L: LSP(리스코프 치환 원칙)는 서브 타입이 기반 타입으로 대체돼, 동작이 가능해야 한다는 뜻입니다.

I: ISP(인터페이스 분리 원칙)는 기능이나 특성마다 인터페이스를 분리해야 한다는 뜻입니다.

모든 걸 하나의 인터페이스에 몰아넣지 않고, 여러 개로 추상화시켜 유연성을 높일 수 있습니다.

D: DIP(의존관계 역전 원칙)는 고수준의 모듈이 저수준의 모듈에 의존해선 안 되며, 추상화가 세부사항에 의존해서는 안 된다는 뜻입니다.

저수준 모듈에 의존하게 되면, 고수준 모듈을 하나 짤 때마다 계속해서 수정이 필요하게 됩니다.

반면, 이 관계가 역전되면, 확장만으로도 쉽게 모듈을 추가할 수 있게 됩니다.

모든 원칙들은 비슷한 말 같습니다.

왜냐하면, 이는 결국 추상화와 다형성에 대해 어떻게 다룰지 알려주는 내용이기 때문입니다.

하지만, 이를 생각하고 객체를 구상하다 보면, 확실히 더 좋은 코드를 짤 수 있습니다.

🎯 3. 끝

오늘은 이외에는 전부 프로젝트 구상에 대한 회의였습니다.

내일부터는 프로젝트를 진행해서 빨리 끝내야 할 것 같습니다.

내일은 코드카타를 풀고 싶네요.

끝.

profile
여기는 공부 기록용 블로그

0개의 댓글