본문 바로가기

전체 글

(271)
4. Effective Kotlin - 가독성 가독성을 목표로 설계하라 인지 부하 감소 가독성은 사람에 따라 다르게 느낄 수 있다. // Type:A if (person != null && person.isAdult) { view.showPerson(person) } else { view.showError() } // Type:B person?.takeIf { it.isAdult } ?.let(view::showPerson) ?: view.showError() 가독성은 뇌가 얼마나 많은 관용구에 익숙해졌냐에 따라 다르다. Type:A의 경우 kotlin을 사용해보지 않은 개발자라도 빠르게 이해할 수 있다. 하지만, Type:B의 경우 kotlin에서 일반적으로 사용되는 패턴으로 익숙하지 않아 어려울 수 있다. 그리고, 사실 Kotlin을 오래 하지 ..
3. Effective Kotlin - 결과 부족 시 null & Failure를 사용하라 결과 부족 시 null & Failure를 사용하라 함수가 원하는 결과를 만들지 못하는 경우가 있다. 예를 들면 다음과 같다. 서버로부터 데이터를 읽어들이는 과정에서 네트워크 오류로 읽어들이지 못한 경우 조건에 맞는 첫 번째 요소를 찾으려 했으나 없는 경우 위와 같은 상황을 핸들링하는 방법은 크게 두 가지이다. null 혹은 _Failure_를 나타내는 _sealed class_를 사용하라. 예외를 throw한다. 위는 두 가지 차이점이 있다. 먼저, 예외는 정보를 전달하는 목적이 아니다. 반면에, _null_과 _Failure_는 정보 전달의 역할을 충분히 수행한다. 가능하면 nullable을 리턴하지 않는 것이 좋다. null을 리턴해야되는 경우 개발자에게 getOrNull 등을 사용해서 무엇이 리턴..
2. Effective Kotlin - Inferred, Exception Inferred 타입을 가급적 제한하라. 코틀린은 타입 추론을 지원한다. 타입 추론은 매우 편리하지만, 엄격해야 될 필요성이 있다. 예를 들어 다음과 같은 경우를 고려해야 된다. open class Animal() class Zebra : Animal() var zebra = Zebra() zebra = Animal() // --> Error 발생, zebra의 타입은 Zebra이다. //방지하기 위한 코드 var zebra: Animal = Zebra() zebra = Animal() 예외를 활용해 코드를 제한하라. 확실하게 어떤 형태로 동작해야되는 코드가 있다면, 예외를 활용하여 제한을 걸어두는 것이 좋다. 코틀린은 require, check 등을 지원한다. 제한을 걸면 다음과 같은 이점이 있다. 문..
1. Effective Kotlin - Destructuring declaration Destructuring declaration 직역하면 구조분해 선언이다. Old한 언어에서는 특정 함수나 작업의 결과 값을 하나만 받을 수 있다. 최신 언어의 경우 여러 결과를 동시에 받을 수 있다. 구조분해 선언을 활용하면 변수를 선언과 동시에 초기화할 수 있어 가독성 향상에 도움이 된다. 예시 fun updateWeather(degrees: Int) { val (description, color) = when { degrees "cold" to Color.BLUE degrees "mild" to Color.YELLOW else -> "hot" to Color.RED } }
[Objective-C] 3. 프로토콜(Protocol) 1. 프로토콜(Protocol) 프로토콜은 선언만 되고 구현이 되지 않은 객체 지향의 흔한 개념인 인터페이스를 의미한다. 작성법은 다음과 같다. @Protocol 프로토콜명 : NSObject 메서드 정의 @end 이런 프로토콜은 다른 클래스에서 구현할 수 있다. 이 때, '프로토콜을 따른다'라고 표현한다. 2. 프로토콜(Protocol)을 따르는 클래스 Flyable.h @protocol Flyable - (void)fly; @end KingFisher.h @interace KingFisher @end KingFisher.m @implementation KingFisher - (void)fly { NSLog(@"Fly High"); } @end 3. Delegate Pattern Delegate Pat..
[Objective-C] 2. Class - Method & Property 1. 개요 클래스가 무엇인지 설명하기보다는 어떻게 작성하면 될 지를 위주로 설명합니다. 2. 기본 작성법 Objective C는 헤더 파일과 구현 파일로 나뉜다. 먼저 헤더 파일을 작성해보자. Human.h #import @interface Human: NSObject { - (void)print:(NSString *)message; + (void)printWithName:(NSString *)name message:(NSString *)message; } 먼저 헤더 파일에서는 클래스의 설계를 작성한다. 흔한 객체 지향 언어에서 class '클래스명'의 문법이 아닌 @interface '클래스명'의 문법을 가진다. 그리고, NSObject는 Objective-C의 루트 클래스로 Objective-C의 런..
[Objective-C] 1. 개요 1. 개요 과거 애플의 프로그래밍 언어로 활용되었다. 현재도 일부 기업에서 활용되는 상황이다. 최근 iOS 개발을 하게 되어 Objective C에 대해 정리하면 좋을 것 같아 앞으로 블로그에 기록해보려고 한다. 2. 특징 C의 확장 C언어에서 단순히 객체 지향 패러다임을 추가한 형태이다. 순수 C 코드를 그대로 활용할 수 있다. 이런 객체 지향 개념을 추가하기 위해 별도의 런타임이 필요하다. JVM 처럼 가상 머신을 활용하는 형식은 아니고, 단순히 라이브러리를 링크하는 것이다. 구조체 Objective C의 모든 객체는 사실 구조체로 이루어져있다. 객체의 존재하는 메서드는 해당 메서드의 구현체(함수)로의 함수 포인터를 구조체 안의 리스트 형태로 들고 있다. 따라서, 객체의 메서드를 호출하면 구조체의 리..
[Android] Jetifier란? 개요 Support library 이슈를 해결하기 위해 알게 된 Jetifier에 대해서 알아본다. Jetifier The standalone Jetifier tool migrates support-library-dependent libraries to rely on the equivalent AndroidX packages instead. The tool lets you migrate an individual library directly, instead of using the Android gradle plugin bundled with Android Studio. Support Library에 종속적인 라이브러리를 비슷한 AndroidX로 마이그레이션할 때 사용한다. 즉, 과거 안드로이드에서 자주 ..