자바 60

[Kotlin] 확장 함수 & 확장 프로퍼티

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 확장함수 - 메서드를 다른 클래스에 추가하기 저번 글에서 코틀린 컬렉션은 자바 컬렉션과 똑같은 클래스이지만, 코틀린에서는 아래 코드에서처럼 자바보다 더 많은 기능을 쓸 수 있다고 했다. 우리는 extension function(확장 함수)를 사용하여 기존 JVM 언어 API 를 재작성하지 않고도 코틀린이 제공하는 여러 편리한 기능을 사용할 수 있다. 확장함수는 어떤 클래스의 멤버 메서드인 것처럼 호출할 수 있지만 그 클래스의 밖에 선언된 함수이다. `StringUtil` 이라는 파일을 만들어서 어떤 문자열의 마지막 문자를 돌려주는 메서드를 추가해보자. fun String.lastChar()..

Kotlin 2024.01.01

[Kotlin] 컬렉션에서의 함수 정의와 호출

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 코틀린 컬렉션, 문자열, 정규식에서의 함수 정의와 호출 기능을 알아봅니다. 코틀린 컬렉션 만들기 아래와 같이 set 과 리스트, 맵을 만들 수 있다. private val set = hashSetOf(1, 7, 53) private val list = arrayListOf(1, 7, 53) private val map = hashMapOf(1 to "one", 7 to "seven", 53 to "fifty-three") 여기서 `to` 는 코틀린의 키워드가 아닌 일반 함수이다. (나중에 조금 더 자세히 다룬다.) @Test fun printObjectType() { println(set...

Kotlin 2024.01.01

[Kotlin] 클래스와 프로퍼티 기초

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 이번에는 클래스를 선언하는 기본 문법, 그리고 프로퍼티를 다룬다. JavaBean 클래스를 코틀린 코드로 보기 먼저 간단한 `JavaBean` 클래스 `Person` 을 봅시다. public class Person { private final String name; public Person(String name) { this.name = name; // 필드가 늘어날 수록 생성자 바디에 비슷한 코드가 반복적으로 들어간다. } public String getName() { return name; } } `Person` 클래스는 필드를 오직 `String` 타입의 `name` 만을 가진다. 만..

Kotlin 2023.12.27

디자인 패턴 - 프록시 패턴(Proxy pattern) 자바 코드 예시로 보기

먼저 프록시(proxy)의 뜻을 살펴봅시다. 위처럼 proxy 는 대리, 대리인, 대용물 이라는 뜻을 가집니다. 그렇다면 프록시 패턴이라 하면, 누군가가 어떠한 일(역할)을 대신 해주는 모습의 디자인 패턴임을 예상할 수 있겠네요. Proxy pattern(프록시 패턴) 프록시 패턴은 클라이언트가 실제 서비스 객체를 대신하는 객체를 제공해주는 구조 디자인 패턴입니다. 클라이언트의 요청을 수신하고 일부 작업들을 수행한 다음 요청을 서비스 객체에 전달하는 형태이지요. 여기서 일부 작업들에는 흔히 접근 제어, 캐싱 등이 있습니다. 프록시 객체는 서비스 객체와 같은 인터페이스를 가지기 때문에 클라이언트에 전달되면 실제 객체와 상호적으로 교환이 가능합니다. 우리가 코드를 변경할 수 없는 클래스에 몇가지의 행동들을 ..

안드로이드 통신에 자주 사용하는 Retrofit 알아보기 (2) - create 뜯어보기

이전 글에서 이어집니다. https://sh1mj1-log.tistory.com/167 안드로이드 통신에 자주 사용하는 Retrofit 알아보기 (1) - HttpURLConnection, OkHttp, Retrofit 장점을 중심 Jwt 토큰 관련해서 프로젝트의 버그 픽스, 간단한 리팩토링(리팩토링이라고 하기도 뭐하지만) 을 진행하면서 이 김에 Retrofit 클래스의 내부 구조에 대해서 조금 이해를 해야 할 필요가 있을 것 같 sh1mj1-log.tistory.com 이번에는 Retrofit 을 사용해서 서버와 통신을 할 때 Retrofit 클래스 내부가 어떻게 구현이 되어 있는지에 대해 조금 더 자세히 알아보겠습니다. Retrofit 클래스 이전 글(안드로이드 통신에 ... Retrofit 장점을 ..

디자인 패턴 - 데코레이터 패턴(Decorator pattern) 자바 코드 예시로 보기

데코레이터 패턴이란? 데코레이터 패턴은 객체지향 프로그래밍에서 자주 사용되는 디자인 패턴입니다. 어떤 객체를 특수한 Wrapper 객체들 내에 감싸서(wrap, decorate) 새로운 행동을 가지도록 하는 것입니다. 이렇게만 설명하면 크게 감이 안 올 수 있는데요. 먼저 구체적인 프로그램을 만든다고 가정해서 이 프로그램에 데코레이터 패턴을 적용해 나가는 것으로 설명하겠습니다. 문제 상황 우리는 사용자들에게 알림을 보내는 `Notifier` 라이브러리를 만들고 있다고 합시다. `Notifier` 는 사용자들에게 중요한 이벤트에 대해 이메일로 알림을 보내줄 수 있는 기능을 가집니다. 클라이언트 역할을 하는 타사 이메일 애플리케이션은 `Notifier` 객체를 한 번 생성하고, 설정한 후에 중요한 이벤트가 ..

서브클래싱과 서브타이핑 - 코드로 이해하는 객체지향

상속은 크게 두 가지로 목적으로 사용됩니다. 상속은 타입 계층을 구현하기 위해 사용됩니다. 부모 클래스는 계층 안에서 일반적인 개념을 구현하고 자식클래스는 특수한 개념을 구현합니다. 상속은 코드 재사용을 위해 사용됩니다. 간단한 선언으로 부모 클래스의 코드를 재사용할 수 있습니다. 하지만 재사용을 위해 상속으 사용하면 부모 클래스와 자식 클래스가 강하게 결합되기 때문에 변경하기 어려운 코드를 얻게 될 확률이 높습니다. 그러므로 상속의 사용의 일차적인 목표는 타입 계층을 구현하기 위함이어야 합니다. 코드 재사용을 목표로 상속을 사용하면 부모, 자식 클래스가 강하게 결합되어 설계의 변경을 방해합니다. 하지만 타입 계층을 목표로 상속을 사용하면 다형적으로 동작하는 객체들의 관계에 기반하여 확장 가능하고 유연한..

다형성 - 코드로 이해하는 객체지향

상속은 클라이언트 관점에서 인스턴스들을 동일하게 행동하는 그룹으로 믂고 싶을 때 사용해야 합니다. 단지 단순히 코드를 재사용하기 위함이 목적이면 안 됩니다! 다형성은 런타임에 메시지를 처리하기에 적합한 메서드를 동적으로 찾는 과정을 통해서 구현됩니다. 또 상속은 이런 메서드를 찾기 위한 탐색 경로를 클래스 계층의 형태로 구현하기 위한 방법입니다. 상속의 관점에서 다형성이 구현되는 기술적인 매커니즘을 먼저 살펴봅시다. 다형성 다형성(Polymorphism)은 여러 타입을 대상으로 동작할 수 있는 코드를 작성할 수 있는 방법입니다. 객체지향 프로그래밍에서 다형성은 아래처럼 분류될 수 있습니다. 오버로딩 다형성: 하나의 클래스 안에 동일한 메서드 존재하는 경우입니다. 흔히 말하는 메서드 오버로딩이 이 경우이죠..

합성과 유연한 설계 - 코드로 이해하는 객체지향

상속은 부모 클래스와 자식 클래스를 연결해서 부모 클래스의 코드를 재사용하고 합성은 전체를 표현하는 객체가 부분을 표현하는 객체를 포함해서 부분 객체의 코드를 재사용합니다. 상속 관계는 is-a 관계입니다. 자식 클래스가 Cat, 부모 클래스가 Animal 이면 Cat is a Animal 인 것이죠. 합성은 has-a 관계입니다. Cat has a Claw(발톱). 형식이지요. 이 둘은 코드 재사용이라는 동일한 목적을 가지지만, 이것을 제외하면 구현 방법, 변경을 다루는 방식이 다릅니다. 상속은 부모 클래스의 코드를 자식 클래스가 자신의 것처럼 사용하고, override 할 수 있게 합니다. 하지만 부모 클래스의 내부 구현, 의도를 자세히 알고 이해해야 상속을 제대로 사용할 수 있기 때문에 자식 클래스..

[JAVA] 이진 트리 백준 BOJ 1991 전위 순회, 중위 순회, 후위 순회

이진 트리(binary tree) 는 각 노드의 자식 노드(차수)의 개수가 2 이하로 구성되어 있는 트리입니다. 트리 영역에서 가장 많이 사용됩니다. 이진 트리 핵심 이진 트리 종류 이진 트리는 크게 아래 세 개로 나뉩니다. 그림만으로도 각각의 특징을 대충 느낌을 잡을 수 있을 텐데요. 편향 이진 트리(Skewed Binary Tree) 같은 높이의 이진 트리 중에서 최소 개수의 노드 개수를 가짐. 왼쪽 혹은 오른쪽 서브트리만을 가지는 이진트리. 포화 이진 트리(Full Binary Tree) 모든 레벨의 노드가 꽉 차있는 이진 트리. N = 2ᴴ - 1 을 만족한다. (N: 노드의 개수, H: 트리의 높이) 완전 이진 트리(Complete Binary Tree) 트리의 높이가 H 일 때 레벨 1 부터 ..