목록분류 전체보기 (138)
DOing
현업에서 개발을 하다보면 느끼겠지만, 기획은 계속 변한다. 어제까지 분명 A라고 했는데 아침 회의에 갑자기 B도 아니고 C로 변해있는 경우도 있고, 열심히 다 만들었더라도 유저들이 다른 것을 요구하거나 새로운 기능을 원할 수 있다. 흔히 있는 일이고 사실 요구사항 변경은 SW의 본질이라고 할 수 있다. 그렇기에 변경 용이한 아키텍처를 작성하는 것이 개발자에게는 중요한 일일 것이다. '헤드퍼스트 디자인패턴'에서는 이런 변경에 용이한 코드를 작성하기 위해 패턴을 제안하고, 예제 코드들을 패턴을 적용해서 개선해나간다. [ 책 소개 ] 제목에서 알 수 있듯이, 디자인 패턴 설명하고 있는 책이다. 다 다루는 것은 아니다. 실무에서 자주 사용하는 디자인 패턴들을 집중해서 다루고 있다. (14가지 패턴 : 전략패턴,..
코틀린의 프로퍼티 위임(Delegation)을 이용하면 일반적인 프로퍼티 패턴들을 간단하게 사용할 수 있다. 대표적인 예시로 표준 라이브러리의 lazy(처음 사용하는 요청이 들어올 때 초기화하는 패턴), observable(변화가 있을 때 감지하는 패턴)와 의존성 주입, 데이터 바인딩 등에 활용될 수 있다. 일반적으로 이런 패턴들을 사용할 때 자바에서는 어노테이션들을 많이 활용해야 한다. 하지만 코틀린에서는 프로퍼티 위임을 사용해서 간단하고 type-safe하게 구현할 수 있다. 우선 프로퍼티 위임에 대해서 간단히 알아보고, 동작 원리, 어떻게 활용될 수 있는지에 대해서 차례대로 알아보자. ✏️ 프로퍼티 위임(Delegation) 프로퍼티 위임은 프로퍼티의 접근자(getter, setter) 구현을 다른..
자바에서는 자주 사용하지 않았던 용어 같은데, 코틀린에 오니 갑자기 많이 쓰이게 되는 용어들이 있다. 대충 느낌은 오니까 대수롭지 않게 넘겼는데, 찾아보니 분명한 차이가 있었고 이 차이들에서 코틀린의 특징을 담고 있다라고 느껴졌다. 이런 용어들 중에 대표적으로 함수와 메서드, 프로퍼티와 필드가 있었는데 이번 기회에 이런 용어들에 대해 분명하게 알고 가면 좋을 것 같아서 포스팅을 하게 되었다. ✏️ 함수 vs 메서드 코틀린의 기본적인 함수(function)은 fun 키워드로 시작한다. 이를 활용해서 톱레벨 함수, 클래스의 멤버함수, 함수 내부의 지역함수를 만들 수 있다. 또한 추가적으로 함수 리터럴을 활용해서 익명함수를 정의할 수도 있다. 메서드(method)는 클래스와 연결된 함수를 의미한다. 멤버 함수..
코틀린에서 중첩 클래스(Nested Class)와 내부 클래스(Inner Class)를 혼용해서 사용하고 있는 것같다는 느낌을 받게되었고 차이를 명확하게 알아보고자 포스팅하게 되었다. ✏️ 중첩 클래스(Nested Class) 주의해서 볼 것은 클래스 타입이 "바깥 클래스.중첩 클래스"라는 점과 생성자를 호출할때도 "바깥 클래스.중첩 클래스()"라는 점이다. Nested 클래스는 Nested라는 식별자만 Outer 클래스에 속해있을 뿐, 실제로는(물리적으로는) 완전히 분리된 장소에 있다. 따라서 Nested 클래스의 멤버함수는 Outer 클래스의 프로퍼티나 멤버 함수에 접근할 수 없다. ✏️ 내부 클래스 (Inner Class) 중첩 클래스의 경우 바깥 클래스의 인스턴스와 중첩 클래스의 인스턴스는 서로 ..
코틀린을 다루며 자주 등장하는 함수 리터럴에 대한 개념을 제대로 잡기 위해서, 상수와 리터럴을 비교하며 리터럴이란 무엇인지, 코틀린에서의 함수 리터럴이란 무엇인지에 대해서 포스팅하고자 한다. 🌱 상수(Constant) 상수와 리터럴 둘다 변하지않는 값(데이터)을 의미한다. 더 구체적으로 말하면, 상수는 변하지 않는 변수를 의미한다. 상수에 데이터는 숫자가 올 수 있지만, 클래스나 구조체와 같이 기본형에서 파생된 객체를 넣을 수 있다. 상수의 데이터가 변하면 안된다고 해서, 참조변수를 상수로 지정할 때, 참조변수에 넣은 인스턴스 안의 데이터까지도 않는다고 착각할 수 있다. 하지만 참조변수가 상수, 즉 참조변수 메모리의 주소값이 변하지않는다는 의미이지 그 주소가 가리키는 데이터들까지 상수라는 의미가 아니다...
개발자 회고라고 하기엔 남들처럼 대단하게 해낸 일은 없어서 좀 쓸까말까 고민도 했지만, 나를 기준으로 두고 봤을 때는 정말 많이 성장한 한 해라고 생각해서 일단 써보기로 했다. 1. 그럴싸한 첫 웹프로젝트 (그땐 그렇게 생각했었찌) 무려 2020년 12월 20일부터 2021년 4월 6일까지, 4개월 동안 했던 프로젝트였다. 왜 그렇게 오래걸렸냐하면 빠르게 완성하는게 목표가 아니고 공부하면서 차근차근 적용해보는 것이 목표였기 때문이다. (+ 엄청난 삽질..) 이때는 프론트와 백으로 나누지 않고 기능 단위로 나눴었다. 당시에 내가 상품, 결제 확인, 리뷰-답글, 카카오페이 결제등을 담당했었다. 위에 보는 페이지도 내가 만든 파트 중 일부다. 당시에는 열심히 하긴 했는데 부족한 부분이 정말 많았었다. 대표적으..
자바에는 없지만, 코틀린에서는 자주 사용되는 함수들로 let, also, apply, run, with이 있다. 이들은 모두 범위 지정함수들이다. 서로 유사한 점이 많아서 무엇을 골라 사용해야하는 것인지 헷갈릴때가 많았다. 이번 포스팅에서는 이들의 차이를 알아보고자 한다. 수신 객체 지정 람다 (Lamdas with Receivers) vs 일반 람다 Scope functions 을 분석하기 전에 다시 짚고 넘어가야하는 개념이다. 확장함수에서 수신객체를 사용하여 블록내로 객체를 넘겼듯이 수신객체 지정 람다도 수신객체를 사용하여 객체를 전달한다. 따라서 수신객체 지정람다에서는 수신객체를 this로 대신할 수 있으며, this를 생략할수도 있다. 하지만 this를 생략하게되면 수신객체인지 외부의 객체 혹은 ..
현대 프로그래밍 언어에서 보편적으로 사용되는 람다는 메서드로 전달할 수 있는 익명 함수를 의미한다. 이번 포스팅에서는 코틀린에서 이러한 람다를 어떻게 사용하고 있는지 알아보려고 한다. 람다를 제대로 이해하기 위해 우선 코틀린에서 사용하는 함수의 반환타입과 연산자에 대해서 먼저 설명하고, 람다에 대해 본격적으로 알아보겠다. Unit 자바의 void와 같은 기능을 한다. Unit은 의미 있는 값을 반환하지 않는 함수의 반환타입으로 사용할 수 있다. 코틀린에서 void를 안쓰고 Unit을 사용하는 이유는 다음과 같다. Unit은 모든 기능을 갖는 일반적인 타입 Unit은 타입 인자로 사용 가능. Unit은 단 하나의 인스턴스를 갖는 타입을 의미한다. unit 타입에 속한 값은 Unit 단 하나이다. 반환 타입..