전체 글

객체를 만들어야 할때와 만들지 말아야 할 때를 구분하자. 올바른 객체 생성 방법과 불필요한 생성을 피하자. 객체가 제때 파괴됨을 보장하고, 파괴 전 수행해야 할 정리 작업을 관리하자. 아이템1: 생성자 대신 정적 팩토리 메소드를 고려하라 특정 클래스의 인스턴스를 얻는 방법 중 가장 먼저 떠오르는 건 public 생성자을 이용한 방법일 것입니다. 하지만, 모든 개발자들은 정적 팩토리 메소드(static factory method)를 통해 인스턴스를 얻는 방법 역시 알고 있어야 합니다. 정적 팩토리 메소드를 통해 인스턴스를 제공하는 방식에는 장단점이 존재합니다. 정적 팩토리 메소드 장점 1. 이름을 가질 수 있다. 정적 팩토리 메소드는 이름만 잘 지으면 반환될 객체의 특성을 쉽게 묘사가 가능합니다. 특정 자..
IntelliJ JAVA Usages 보이는 방법 IntelliJ에서 메소드를 리팩토링할 때에 메소드가 어디어디에서 사용하는지 확인이 필요합니다. 이때, 메소드를 클릭해서 확인해볼 수도 있지만, IntelliJ 설정을 통해 좀 더 쉽게 몇 군데에서 해당 메소드를 사용하는지 체크할 수 있습니다. 이번 포스팅에서는 Usages 표시하는 방법에 대해 알아보겠습니다. 먼저, IntelliJ IDEA의 Preferences를 클릭하여 설정창에 들어갑니다. 설정 내용 중 Editor > Inlay Hints > Java를 클릭하면 Code vision 항목에 대한 설정을 할 수 있으며, 여기서 Usages 사용 여부를 체크해주면 됩니다. Inheritors에 대해서도 보고 싶다면 아래 그림처럼 Inheritors ..
들어가기 전에 프로젝트를 진행하면서, 가독성 있게 코드를 작성하기 위해 메소드를 구성하다보니, 각각 다른 API에 대해 비슷한 형태의 로직이 중복적으로 발생하였습니다. 이 로직 중에는 공통 코드(예: 객체 만드는 코드)가 존재하기 때문에 중복을 제거하고, 추후 유지보수가 편할 수 있도록 Template Method Pattern을 적용하고자 합니다. 이번 포스팅에서는 소스코드 리팩토링 시 사용할 Template Method Pattern에 대해 알아보도록 하겠습니다. Template Method Pattern 템플릿 메소드 패턴은 알고리즘 골격을 정의합니다. 템플릿 메소드를 사용하면 알고리즘의 일부 단계를 서브클래스에서 구현할 수 있으며, 알고리즘 구조는 그대로 유지하면서 알고리즘의 특정 단계를 서브클래..
·FRAMEWORK/Spring
들어가기 전에 @Controller는 전통적인 Spring controller로써 오래 사용되어졌습니다. Spring 4.0에서는 @RestController라는 좀 더 RESTful한 웹서비스를 간단히 만들 수 있는 어노테이션이 소개되었습니다. 이번 포스팅을 통해 간단히 두 가지 어노테이션의 차이를 살펴보겠습니다. Spring MVC @Controller @Controller 어노테이션은 @Component 어노테이션을 가지고 있어 classpath 스캔을 통해 자동으로 구현체를 감지할 수 있습니다. 일반적으로 @Controller는 @RequestMapping 어노테이션과 함께 많이 쓰입니다. @Controller @RequestMapping("books") public class SimpleBoo..
enum class enum 클래스는 미리 정의된 상수들로 이루어진 제한된 집합을 표현하는 클래스입니다. enum 클래스를 사용하면 정해진 상수들로 이뤄진 집합을 타입 안전(type-safe)하게 다룰 수 있습니다. 가장 단순한 형태는 아래와 같습니다. 빠뜨린 부분이 없는 when 식 enum 역시, 다른 타입과 유사하게 when을 사용해 변수 각각의 값을 비교할 수 있습니다. enum 사용 시 when 식에서 enum의 값이 될 수 있는 모든 enum 상수를 다룬다면, 따로 else를 작성하지 않아도 됩니다. 코틀린은 내부적으로 빠뜨린 부분이 없는 when 식에는 NoWhenBranchMatchedException 타입의 예외를 던지는 else가 암시적으로 추가됩니다. 빠뜨린 부분이 없는 when 식의..
코틀린 객체 코틀린의 객체 선언은 클래스와 상수를 합한 것으로 객체 선언을 통해 싱글톤(singleton: 인스턴스가 단 하나 존재하는 클래스)을 만들 수 있습니다. 객체 선언 코틀린의 객체 선언은 class 대신 object를 사용합니다. 객체 선언은 클래스를 정의하는 동시에 인스턴스를 정의한다고 보면 됩니다. 객체 정의는 Thread-Safe하기 때문에 컴파일러는 실행되는 여러 스레드에 대해 하나의 인스턴스만 공유되고 초기화 코드 역시 한 번만 실행되도록 보장합니다. 초기화 작업은 싱글톤 클래스가 실제 로딩되는 시점까지 지연되며, 보통 프로그램이 해당 객체 인스턴스에 처음 접근할 때 초기화됩니다. 자바에서는 비공개 생성자와 정적(static) 상태를 조합한 클래스 정의를 통해 싱글톤을 만들고, 아래 ..
널이 될 수 있는 타입 자바와 마찬가지로 코틀린의 참조 값에는 아무것도 참조하지 않을 경우를 나타내는 null이라는 값이 존재합니다. 코틀린 타입 시스템에는 널 값이 될 수 있는 참조 타입과 널 값이 될 수 없는 참조 타입을 구분할 수 있어 컴파일 시점에 NullPointerException(NPE) 가능성을 상당 부분 줄여줍니다. 코틀린에서는 기본적으로 모든 참조 타입은 널이 될 수 없는 타입입니다. 따라서, String 같은 타입에 null을 대입할 수 없습니다. 코틀린에서는 널이 될 수 있는 값을 받는 함수를 작성하려면 아래와 같이 파라미터 타입 뒤에 물음표(?)를 붙여 널이 될 수 있음을 명시해주어야 합니다. fun isBooleanString(s: String?) = s == "false" ||..
클래스 정의하기 JAVA와 마찬가지로 Kotlin에서는 클래스 정의를 통해 커스텀으로 정의된 연산들이 포함된 새로운 타입을 만들어줍니다. 기본적으로 클래스 선언은 참조 타입(referential type)을 정의합니다. Kotlin 1.3에 도입된 인라인 클래스(inline class)를 통해 참조 타입이 아닌 타입 역시 정의가 가능합니다. 클래스 내부 구조 자바와 마찬가지로, 코틀린 클래스도 class 키워드 다음에 클래스 이름이 오고 그 다음에 클래스 본문이 오는 형태입니다. 코틀린 클래스는 기본적으로 공개(public) 가시성입니다. 최상위 함수와 마찬가지로 최상위 클래스를 internal이나 private으로 설정할 수 있습니다. 코틀린 클래스 명은 자바와 달리, 소스 파일명과 동일하게 작성하지 ..
EARTH_ROOPRETELCHAM
ROOPRETELCHAM