코틀린 11

[Spring] Bean ( Spring Bean ) Bean Spring에서는 Container를 이용해 객체들을 관리합니다. 이때 Container가 관리하는 자바 객체를 Bean이라고 부릅니다. 흔히 알고 있는 new를 통해 생성된 객체는 Bean이라고 할 수 없습니다. Bean은 getBean()을 통해 얻어질 수 있는 것을 Bean이라고 합니다. Spring에서의 빈은 ApplicationContext가 알고있는 객체, 즉 ApplicationContext가 만들어서 그 안에 담고있는 객체를 의미합니다. Spring에서 Bean을 등록하는 방법은 ComponentScan 방법과, Configuration에서 직접 등록하는 방법이 존재합니다. 스프링은 기본적으로 모든 Bean을 Singleton으로 생성하여 관리합니다. Bean은 다양한 Scope를.. Domain/Spring 2021. 7. 23.
[Spring] 스프링이란? (Spring / Spring Boot / Spring Framework ) 스프링에 대해 가장 잘 알려진 정의는 '자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크'입니다. 애플리케이션 프레임워크는 특정 계층이나, 기술, 업무 분야에 국한되지 않고 애플리케이션의 전 영역을 포괄하는 범용적인 프레임워크를 말합니다. 애플리케이션 프레임워크는 애플리케이션 개발의 전 과정을 빠르고 편리하며 효율적으로 진행하는 데 일차적인 목표를 두는 프레임워크입니다. 엔터프라이즈 개발을 편하게 하려는 이유는 원래 엔터프라이즈 개발이란 편하지 않기 때문입니다. 자바 엔터프라이즈 시스템 개발이 어려운(편하지 않은) 가장 큰 이유는 근본적인 비즈니스 로직과 엔터프라이즈 기술이라는 두 가지 복잡함이 얽혀 있기 때문입니다. 침투적 vs 비침투적 침투적인(invasive) 기술 : .. Domain/Spring 2021. 7. 13.
[Kotlin In Action] 인터페이스 코틀린의 인터페이스는 자바8 인터페이스와 비슷합니다. 코틀린 인터페이스 안에는 추상 메소드뿐 아니라 구현이 있는 메소드도 정의할 수 있습니다. 자바 8의 디폴트 메소드와 비슷합니다. 다만 인터페이스에는 아무런 상태도 들어갈 수 없습니다. 자바에서는 extends와 implements 키워드를 사용하지만, 코틀린에서는 클래스 이름 뒤에 콜론(:)을 붙이고 인터페이스와 클래스 이름을 적는 것으로 클래스 확장과 인터페이스 구현을 모두 처리합니다. 자바와 마찬가지로 클래스는 인터페이스를 원하는 만큼 개수 제한 없이 마음대로 구현할 수 있지만,클래스는 오직 하나만 확장할 수 있습니다. class 클래스이름 : 클래스A, 인터페이스A, 인터페이스B { ... } 자바의 @Override 애노테이션과 비슷한 over.. Language/Kotlin In Action 2021. 4. 22.
[Kotlin In Action] 가변 인자 가변 길이 인자는 메소드를 호출할 때 원하는 개수만큼 값을 인자로 넘기면 자바 컴파일러가 배열에 그 값들을 넣어주는 기능입니다. 코틀린의 가변 길이 인자도 자바와 비슷합니다. 다만 문법이 조금 다릅다. 타입 뒤에 . . .를 붙이는 대신 코틀린에서는 파라미터 앞에 vararg 변경자를 붙입니다. //mutableListof() //val list = mutableListOf() public inline fun mutableListOf(): MutableList = ArrayList() //mutableListOf(1,2,3,4,5,6,7,8,9,10) //val list = mutableListOf(1,2,3,4,5,6,7,8,9,10) public fun mutableListOf(vararg eleme.. Language/Kotlin In Action 2021. 4. 22.
[Kotlin In Action] 확장함수 확장 함수는 어떤 클래스의 멤버 메소드인 것처 럼 호출할 수 있지만 그 클래스의 밖에 선언된 함수입니다. 확장 함수를 만들려면 추가하려는 함수 이름 앞에 그 함수가 확장할 클래스의 이름을 덧붙이기만 하면 됩니다. 이때 클래스의 이름을 수신 객체 타입이라고 부르며, 확장함수가 호출되는 대상이 되는 값을 수신 객체라고 합니다. 수신 객체 타입은 확장이 정의될 클래스의 타입이며. 수신 객체는 그 클래스에 속한 인스턴스 객체입니다. //CommonResponse : 수신 객체 타입 //this : 수신 객체 fun CommonResponse.isSuccess(): Boolean { return this.data == "success" } 심지어 자바나 코틀린 등의 언어 중 어떤 것으로 작성됐는가는 중요하지 않습.. Language/Kotlin In Action 2021. 4. 21.
[Kotlin In Action] 문자열 템플릿 문자열 템플릿은 자바의 문자열 접합 연산("Hello, ”+name+"!”)과 동일한 기능 을 하지만 좀 더 간결하며,자바 문자열 접합 연산을 사용한 식과 마찬가지로 효율적입니다. 컴파일러는 각 식을 정적으로 컴파일 시점에 검사하기 때문에 존재하지 않는 변수를 문자열 템플릿 안에서 사용하면 컴파일 오류가 발생합니다. 문자열 템플릿 안에 사용할 수 있는 대상은 간단한 변수 이름만으로 한정되지 않습니다. 복잡한 식도 { }로 둘러싸서 문자열 템플릿 안에 넣을 수 있습니다. 문자열 템플릿 안에 $로 변수를 지정할 때 변수명 바로 뒤에 한글을 붙여서 사용하면 코틀린 컴파일러는 영문자와 한글을 한꺼번에 식별자로 인식해서 unresolved reference 오류를 발생시킵니다. 이 문제를 해결하는 방법은 변수 이.. Language/Kotlin In Action 2021. 4. 13.
[Kotlin In Action] 변수 코틀린에서 변수를 선언할 때, 자바와 달리 자료형 대신 키워드로 변수 선언을 시작합니다. 또 상황에 따라 뒤에 오는 타입을 명시하거나 생략하게 허용합니다. 변수를 선언하는 키워드는 두가지가 있습니다. var variable라는 의미를 가집니다. mutable(가변) 참조를 저장하는 변수로 활용됩니다. 값이 바뀔 수 있습니다. 자바의 일반변수에 해당합니다. 한번 초기화하면 타입이 고정됩니다. Int 타입으로 처음 초기화 되면 Int형 변수가 됩니다. val value라는 의미를 가집니다. immutable(불변) 참조를 저장하는 변수로 활용됩니다. val로 선언된 변수는 일단 초기화하고 나면 재대입이 불가능합니다. 자바의 final에 해당됩니다. 초기화 조건(분기)에 따라 다른 여러 값으로 초기화 할 수 .. Language/Kotlin In Action 2021. 4. 13.
[Kotlin In Action] 함수 코틀린 함수의 특징 fun를 키워드를 사용하여 함수를 정의합니다. 파라미터 이름 뒤에 파라미터의 타입을 작성합니다. 함수를 최상위 수준에 정의 할 수 있습니다. 자바처럼 꼭 클래스 안에 함수를 넣을 필요가 없습니다. 배열도 일반적인 클래스와 마찬가지입니다. 자바와 달리 배열 처리를 위한 문법이 따로 존재하지 않습니다. println과 같은 래퍼 함수를 제공합니다. 줄 끝에 세미콜론을 붙이지 않아도 됩니다. 식이 본문인 함수, 블록이 본문인 함수 두가지가 될 수 있습니다. 식이 본문인 함수의 반환 타입만 생략이 가능합니다. 블록이 본문인 함수는 반환타입을 지정해야 합니다. 블록이 본문인 함수의 경우 Unit 타입의 경우 반환타입이 생략 가능합니다. 식이 본문인 함수의 경우 굳이 반환 타입을 지정해 주지 않.. Language/Kotlin In Action 2021. 4. 13.
[Kotlin] 일급함수(First-class citizen) 코틀린의 함수는 일급함수입니다. 일급함수는 아래와 같은 조건을 만족하는 것을 말합니다. 변수나 데이터를 할당 할 수 있어야 한다. (variable) 객체의 인자로 넘길 수 있어야 한다. (parameter) 객체의 리턴값으로 리턴 할 수 있어야 한다. (return value) 변수나 데이터를 할당 할 수 있어야 한다. val test: () -> String = { "function" } 객체의 인자로 넘길 수 있어야 한다. val test: () -> String = { "function" } fun func(f: () -> String): Unit { println("$f") } 객체의 리턴값으로 리턴 할 수 있어야 한다. fun func(): () -> Unit { return { println.. Language/Kotlin 2020. 9. 16.
[Kotlin] 스코프함수 (Scope Function) 코틀린 표준 라이브러리는 객체의 컨텍스트 내에서 코드 블럭을 실행하기 위한 목적만을 가진 함수를 제공합니다. 이런 함수들은 람다식으로 호출할 때, 임시로 범위를 형성합니다. 이 범위 내에서는 객체의 이름이 없어도 객체에 접근할 수 있습니다. 이러한 함수를 스코프 함수라고 하고 스코프 함수는 새로는 기능을 제공하는 것이 아니라 코드의 가독성을 향상 시키는 역할을 합니다. 스코프 함수는 apply, run, with, also, let이 있고 이 함수들은 임시로 생성된 객체의 코드블럭을 실행합니다. 함수는 객체의 컨텍스트를 참조하는 방식, 리턴값으로 사용여부를 판단합니다. 컨텍스트 객체(Context Object) 스코프 함수의 람다식 내에서 컴텍스트 객체는 참조 이름으로 사용할 수 있습니다. 람다 수신자(.. Language/Kotlin 2020. 9. 8.