목록Kotlin (46)
밤빵's 개발일지
3주차 과제도 시작하기 전 여러 고민이 있었다. 코틀린의 문법에 익숙하지 않으니까 클래스 구조나 예외 처리 방법에 대해 어떻게 접근해야 할지 고민했고, 자바와는 다른 코틀린의 data class나 companion object 같은 개념들을 이론만 알지 적용하는건 어려웠다. 그리고 예외 상황을 어떻게 깔끔하게 처리할지에 대한 고민까지.... 과제를 해결하기 위해 코틀린 공식 문서를 참고하고, 여러 예제 코드를 살펴보면서 문법에 대한 이해를 넓혀 나갔다. 초기에는 간단한 기능부터 구현해 보며 자신감을 쌓고, 이후 단계적으로 복잡한 로직을 추가해 나가면서 문제를 해결할 수 있었다....! 과제 요구사항 분석이번 과제는 사용자가 로또 구입 금액을 입력하고, 로또를 구매하며, 당첨 번호를 입력받아 당첨 통계를 ..
코틀린은 자바와 유사한 객체지향 언어로, 클래스와 객체를 사용하여 프로그램을 구조화할 수 있다. 그리고 자바보다 더 간결하고 이해하기 쉬운 방식으로 클래스를 정의할 수 있다. 클래스 선언코틀린에서 클래스는 class 키워드를 사용하여 선언한다. 클래스는 속성과 메서드를 가질 수 있고, 객체를 정의하고 동작을 부여할 수 있다. class Car { var brand: String = "" var speed: Int = 0 fun drive() { println("$brand is driving at $speed km/h") }}→ Car 클래스는 brand와 speed라는 두 개의 속성을 가지고 있으며, drive()라는 메서드를 통해 자동차가 주행 중이라는 메시지를 출력..
코틀린을 공부하면서 람다와 함수 사용에서의 성능 문제에 대해 접하게 되었다. 특히, 람다를 무명 클래스로 컴파일하는 코틀린의 특성 때문에 성능 저하의 가능성이 있다는 점을 알게 되면서 람다의 효율성을 개선하기 위해 사용하는 inline 함수와 타입 보존을 위한 reified 키워드에 대해 학습하고, 각각의 개념과 동작 원리를 정리해야 할 필요를 느꼈다.....! Inline 함수코틀린에서 람다는 기본적으로 무명 클래스로 변환된다. 무명 클래스란 특정 시점에 객체로 만들어지는 임시 클래스를 의미하고, 이 과정에서 메모리를 추가로 사용하게 된다. 그렇다고 모든 람다가 매번 새로운 클래스를 생성하는 것은 아니고, 람다가 특정 변수를 포획할 때(클로저 사용 시) 새로운 무명 클래스 객체가 생성된다. 이런 과정..
자바의 스트림과 코틀린의 시퀀스 두 가지 모두 컬렉션 데이터를 처리하는 데 있어 유용한 기능을 제공하지만, 몇 가지 차이점이 있다. ▶ 자바 스트림과 코틀린 시퀀스자바 스트림(Java Stream)자바 8부터 도입된 스트림은 컬렉션의 요소들을 필터링, 매핑, 집계하는 기능을 제공한다. 스트림은 lazy하게 처리되고, 최종 연산이 호출되기 전까지 실제 연산을 수행하지 않는다. 효율적인 메모리 사용과 최적화를 가능하게 한다.코틀린 시퀀스(Kotlin Sequence)코틀린 시퀀스도 자바 스트림과 비슷하게 컬렉션 데이터를 lazy하게 처리하고, 코틀린에서는 더 많은 확장 함수를 제공하여 시퀀스를 다루기 쉽게 만들어 준다. 코틀린 멀티 플랫폼에서도 사용할 수 있다는 점이 큰 장점이다.▶ 자바 스트림과 코틀린 ..
코틀린으로 자동차 경주 게임을 구현한 프리코스 2주차 과제 내용을 바탕으로 개발일지를 작성했다. 프리코스 1주차 과제 하면서 나 코틀린으로는 코테 절대못푼다😢 라는 생각이 들어서 과제만 해보자란 생각으로 꾸역꾸역 과제를 했었다. 코틀린을 배우고싶어서 시작한 거였는데 ai없이 코드를 작성하려고하니까 잘 모르기도하고, 작성법은 낯설어 죽겠고 시간이 너무 많이 소요되서 포기부터 하고 간략하게만 구현했다. 경험해본걸로 만족하고 공부 더 열심히 하는걸로..! ▶과제 요구사항 분석2주차 과제는 사용자가 입력한 자동차 이름과 시도할 횟수에 따라 자동차 경주 게임을 진행하는 프로그램을 작성하는 것으로 주요 기능으로는 자동차 이름과 횟수를 입력받고, 경주 로직을 통해 자동차의 이동을 결정하며, 최종적으로 우승자를 결..
확장성과 오버엔지니어링.이 두 개념은 개발자로서 코드 설계를 고민할 때 자주 맞닥뜨리게 되는 문제이지만, 초입자인 내가 이해하기엔 어려운 주제였다. 이번 개발일지를 통해 확장성과 오버엔지니어링이 무엇인지 학습하고, 이 두 개념의 균형을 어떻게 잡아야 하는지 이해하려고 한다. ▶ 확장성(Scalability)이란?확장성(Scalability)이란 소프트웨어 시스템이나 코드가 성장하는 요구사항에 맞추어 쉽게 확장될 수 있는 능력을 의미한다. 여기서 확장성은 단순히 더 많은 기능을 추가하는 것뿐만 아니라, 현재의 코드 구조를 크게 변경하지 않고도 요구사항에 유연하게 대응할 수 있는 것을 말한다. 예를 들어, 특정 기능이 추가될 때 기존 코드를 크게 수정하지 않고 새로운 기능을 쉽게 추가할 수 있다면 그 코드의..
커링(Currying)은 여러 개의 매개변수를 갖는 함수를 단일 매개변수를 갖는 함수의 연속으로 변환하는 기법이다. 이를 통해 함수를 부분 적용하여 코드의 유연성을 높이고 재사용성을 강화할 수 있다 ▶ 커링(Currying) 커링은 함수형 프로그래밍의 중요한 개념 중 하나이다. 함수가 여러 개의 인자를 받을 때, 이를 부분 적용하여 하나의 인자만 받는 함수들을 연속적으로 반환할 수 있도록 변환하는 것을 의미한다. 예를 들어, 두 개의 매개변수를 갖는 함수 f(a, b)는 f(a)(b)의 형태로 변환될 수 있다. 이는 각 인자를 하나씩 받아 최종 결과를 반환하는 방식으로 동작한다.코틀린에서는 기본적으로 커링을 지원하지 않지만, 고차 함수를 사용하여 커링을 구현할 수 있다.▶커링 구현 방법코틀린에서 커링을 ..
sealed interface는 제한된 클래스 계층을 정의하여 다형성을 구현하는 도구이다. sealed 클래스와 유사하지만 인터페이스의 특성을 가지기 때문에 다양한 구현체가 더 자유롭게 동작할 수 있다. ▶sealed interface의 개념sealed interface는 sealed 클래스와 마찬가지로 특정 계층 내에서만 구현될 수 있도록 제한한다. 같은 파일 내에서만 구현 클래스가 정의될 수 있어 외부에서 무분별하게 구현체를 추가하는 것을 방지한다. 이를 통해 코드의 안전성을 높이고 유지보수를 용이하게 할 수 있다. sealed interface Vehicle { fun drive()}class Car : Vehicle { override fun drive() { println..
Lazy Evaluation과 lazy 키워드로 지연 초기화를 활용하는 방법은 프로그램의 성능을 최적화하고 코드의 효율성을 높이기 위해 필수적인 기술이다. ▶Lazy Evaluation이란?Lazy Evaluation은 필요한 시점까지 계산을 미루는 기법이다. 이는 프로그램이 불필요한 계산을 피하도록 도와주어, 메모리 사용량을 줄이고 성능을 향상시킨다. 예를 들어, 특정 변수가 프로그램 실행 중에 필요하지 않다면, 해당 변수의 초기화 작업을 지연시켜 자원을 절약할 수 있다.▶lazy 키워드lazy 키워드를 사용하여 변수를 지연 초기화할 수 있다. lazy 키워드를 사용하면, 변수가 최초로 사용될 때 초기화된다. 이를 통해 초기화 비용을 필요할 때까지 미룰 수 있어 프로그램 시작 시의 부하를 줄일 수 있다..
실드 클래스는 특정 계층의 클래스들을 제한된 범위 내에서 표현할 때 유용하다. 특히, 상태 관리(State Management) 코드에서 다양한 상태를 명확하게 나타내는 데 큰 도움이 된다. ▶실드 클래스(Sealed Class)란? 실드 클래스는 추상 클래스로, 하위 클래스의 종류를 제한할 수 있는 특징을 가진다. 실드 클래스를 상속받는 클래스들은 반드시 같은 파일 내에 정의되어야 한다. 이를 통해 계층 구조를 보다 명확하고 안전하게 관리할 수 있다. 자바에서는 상속 구조가 파일 단위로 제한되지 않기 때문에, 특정 계층 내의 클래스를 제한하고 싶을 때는 코틀린의 실드 클래스가 더 직관적이고 안전하다. ▷코틀린에서 실드 클래스를 선언하는 방법sealed class Resultclass Success(v..