본문 바로가기

👨‍💻 프로그래밍/Java, Kotlin, Spring25

Kotlin Sequence (스퀸스) 에 대해 알아보자 🐜 Sequence, 본질적으로 뭘까? Type Kotlin의 Sequence는 Type입니다. Collection 처럼 값을 담고 있지만 Eager하게 만드는게 아닌 Lazy하게 만들어 대량의 데이터를 효율적으로 다루거나 무한히 계속되는 데이터를 다룰 수 있게 해 줍니다. 예를들어 아래와 같이 특정 연산을 하고 난 결과의 1번째 값을 가져오는 코드가 있다고 해 봅시다. (100 until 2_000_000) .map { it * 2 } .filter { it % 3 == 0 } .first() 이 코드의 내부 동작을 살펴보면 우선 map으로 모든 원소를 2배 한 후, filter로 모든 원소의 나머지를 계산해 0인 원소만 남긴 뒤, 여기서 첫 번째 원소를 가져옵니다. Eager 하게 동작하기 때문에 이.. 2024. 2. 4.
Kotlin의 inline 함수 알아보기 inline이 뭐하는 걸까? 우리가 코딩을 할 때 적극적으로 의식하지는 않지만, 함수를 호출하는건 어느정도 Overhead를 동반합니다. 보통은 현대 컴퓨터 성능이 워낙 좋고, 컴파일러가 최적화를 최대한 해 줘서 굳이 의식할 필요는 없습니다. 하지만 Kotlin에서는 함수가 일등시민이기 때문에, Parameter에 함수를 Argument로 넘기거나, 함수를 Return Type으로 가지는 함수가 있을 수 있습니다. 이는 자바에서는 FunctionN 객체를 만들거나 Closure를 사용할 경우 함수를 호출하는 방식으로 처리합니다. 이 경우 Kotlin에서 함수형 스타일의 코드가 성능에 어느정도 영향을 줄 수 있겠죠? 그럴때 inline을 쓰면 함수 호출 부분을 없애고 코드안에 함수 내용을 넣어 줍니다. I.. 2023. 10. 9.
Spring에서 같은 type의 Bean 구분하는 방법 Spring의 가장 핵심적인 기능은 객체의 수명주기를 개발자가 관리하지 않고 Spring에서 관리해 주는 겁니다. 보통 이를 제어의 역전 (IoC)이라고 부르는데요. 객체의 수명주기를 개발자가 제어하던게 역전되서, Spring에서 관리해 준다는 의미입니다. Spring에서 관리되는 객체를 Bean이라고 부릅니다. 일반적으로 객체를 쓸 때와 같이, Spring의 Bean도 같은 타입의 Bean이 여러개 있을 수 있습니다. 스프링에서 이 Bean들을 어떻게 구분하고, 적절한 Bean을 어떻게 가져다 쓸 수 있는지 정리했습니다. @Qualifier @Configuration public class ObjectMapperConfig { @Bean public ObjectMapper mapper1() { retu.. 2023. 6. 6.
자바 21 - 자바 상속(Inheritance) 객체지향 프로그래밍에서 상당히 중요한 개념 중에 하나가 바로 상속이다. 상속은 우리가 일상생활에서도 흔히 쓰는 단어 중 하나인데, 객체지향에서의 상속도 이 일상생활에서의 의미와 상당히 비슷하다. 상속을 사용하는 이유는, 상속을 쓰는게 더 쉽게 코드를 짤 수 있기 때문이다. 상속에 대해 더 자세히 알아보자. 상속이란? 객체지향에서 상속은 현실에서의 상속과 마찬가지로 프로퍼티(Prperty)와 매소드(Method)를 물려 받는 것이다. 프로퍼티는 쉽게 말해 클래스 안에 있는 변수이고, 매소드는 쉽게 말해 클래스 안에 있는 함수이다. 현실에서의 상속과 마찬가지로, 모든 프로퍼티와 매소드를 물려 받는 것이 아니라, 접근 제어자가 private인 프로퍼티나 매소드는 상속할 수 없다. 상속에서 상속을 해주는 클래스.. 2021. 5. 21.
자바 20 - UML 다이어그램 영화를 만드는 사람은 대본을 바탕으로 영화를 만든다. 영화 대본에는 대사뿐만 아니라, 표정 연기나 조명 등 영화를 만들 때 필요한 연출 등을 담고 있다. UML 다이어그램은 프로그래머의 대본이라고 할 수 있다. UML 다이어그램, 그중에서도 클래스 다이어그램(Class Diagram)은, 클래스에 있는 변수와 매소드의 성질과 어떤 데이터를 받는지 등을 나타내 준다. UML 다이어그램이란? UML 다이어그램(Unified Modeling Language)은, 모델링을 하기 위한 언어체계이다. 그중에서도 자주 씌는 클래스 다이어그램은 클래스를 나타내 주는 모형이다. 객체지향 프로그래밍에서 프로그램은 클래스들의 상호작용으로 나타낼 수 있기 때문에 클래스 다이어그램은 프로그램의 핵심을 담고 있다고 해도 과언이 .. 2021. 5. 10.
자바 19 - static의 의미 새로운 프로그래밍 언어를 배울때 처음으로 하는게 바로 Hello World를 프린트하는 프로그램을 만드는 것이다. 자바에서 Hello World 프로그램은 다음과 같았다. class Ex { public static void main(String[] args) { System.out.println("Hello, world!"); } } 여태까지의 내용을 잘 따라왔다면 이 프로그램이 가지는 의미가 조금은 보일 것이다. 하지만 static은 뭘까? 우선, static이 뭔지 설명하기 전에 객체지향 프로그래밍의 기초적인 내용을 알아야 한다. 객체지향 프로그래밍의 기초는 여기서 배울 수 있다. static의 의미 static이 무슨 뜻인지 한 마디로 하자면 인스턴스를 만들지 않고 사용할 수 있는 변수/매소드이다.. 2021. 5. 8.
자바 18 - 오브젝트(Object), 객체지향 프로그래밍 오브젝트와 클래스는 객체지향 프로그래밍을 구현하기 위해 존재한다. 객체지향 프로그래밍이란 뭘까? 왜 중요할까? 객체지향 프로그래밍이란? 객체지향 프로그래밍은 프로그램을 객체들이 서로 상호작용하게 구현하는 방법이다. 원래 프로그램을 만든다고 하면, 프로그램이 뭐를 해야 하는지를 차례대로 구현해야 한다. 간단한 계산기 프로그램을 만든다면, 먼저 어떤 연산을 하는지 물어보고, 숫자를 받아오고, 계산을 해서, 결과를 보여주는 식으로 프로그램을 구현할 수 있다. 간단한 프로그램이라면 이런식으로 디자인해도 전혀 문제가 없지만, 문제는 프로그램이 복잡해지면 이러한 방식으로 하기가 쉽지 않다는 것이다. 예를 들어, 체스 프로그램을 이런 식으로 만든다고 하면, 어떻게 접근할지조차 쉽게 떠오르지 않을 것이다. 하지만, 객.. 2021. 5. 6.
자바 17 - 자바 매소드(Method), 오버로딩, Call-by-Value 매소드는 함수라고도 불리며, 데이터를 받아 특정한 작업을 수행하고 다시 데이터를 내보내는 대상이다. - 매소드를 왜 써야 할까? - 매소드 선언 - Call-by-Value - 오버로딩(Overloading) 매소드를 왜 써야 할까? 매소드는 기본적으로 프로그램을 더 간편하게 하고, 반복되는 코드를 줄여준다. 코드가 반복되는 걸 줄여주는 건 상당히 중요한데, 예를 들어 어떤 기능을 구현했다고 했을 때, 똑같거나 비슷한 코드를 반복해서 사용하면 오류가 일어났을 때나 수정을 하고 싶을 때 코드를 쓴 모든 부분을 수정해야 하지만, 매소드를 사용하면 매소드만 수정하면 매소드가 사용된 모든 부분에서 코드가 자동으로 수정되기 때문에 버그를 고치기도 편하고, 수정하기도 편하고, 테스트하기도 편하고, 개발할 때도 편하.. 2021. 5. 4.
자바 16 - 2차원 배열 컴퓨터는 기본적으로 1차원 자료 구조를 가지고 있다. 그러나, 일상생활에서도 그렇고, 프로그래밍을 할때도 2차원 이상의 자료 구조를 사용하고 싶을때가 많다. 말이 어려울 수 있지만, 쉽게 말해 체스 프로그램을 만든다고 해 보면, 체스 말을 저장할 구조는 2차원이다. 1차원 배열을 사용해서 체스 말을 저장할 수도 있겠지만, 매우 헷갈리고 비효율적이기에, 2차원 배열이 있다. 주의해야 할 것은, 2차원 배열도 컴퓨터 안에서는 1차원 배열도 저장된다는 것이다. 1. 2차원 배열 문법 2. 2차원 배열 활용 1. 2차원 배열 문법 2차원 배열은 1차원 배열과 마찬가지로 대괄호를 사용해 선언한다. 차이점은, 2차원이기 때문에 2개의 대괄호를 써야 한다는 것이다. int[][] ex = new int[3][4]; .. 2021. 5. 2.