본문 바로가기

Language

(35)
[Kotlin] 7장. 다양한 클래스와 인터페이스 1 - 추상 클래스와 인터페이스 추상클래스 abstract 키워드를 사용하며, 일반적인 객체를 생성하는 방법으로 인스턴스화 시킬 수 없다. 추상 클래스를 설계할 때 멤버인 프로퍼티나 메서드도 abstract로 선언될 수 있으며, abstract로 선언되지 않은 메서드나 프로퍼티는 특정 초기화나 구현이 필요하다. abstract 키워드로 선언되면 미완성이라는 것이기 때문에 해당 클래스를 사용하는 하위 클래스에서 반드시 재정의 및 초기화를 진행해야 한다. 추상 클래스로부터 하위 클래스를 생성하지 않고 단일 인스턴스로 객체를 생성하려면 object 키워드를 사용해서 지정할 수 있다. 인터페이스 인터페이스에는 abstract로 정의된 추상 메서드나 일반 메서드가 포함된다. 추상 클래스는 상속을 통해 하위 클래스로 확장해 나갈 수 있다. 하지만..
[Kotlin] 6장. 프로퍼티와 초기화 Getter, Setter JAVA는 각 필더를 읽고, 값을 할당하기 위해 Getter, Setter를 설정해야 한다. 하지만 Kotlin에서는 각 프로퍼티에서 Getter, Setter가 자동으로 만들어진다. 이처럼 .변수명 을 사용하여 값을 할당하거나 읽어오면 된다. 이 때, val로 선언한 id 의 경우 값을 변경할 수 없으므로 Getter만 사용이 가능하게 된다. 기본으로 생성해주는 게터, 세터 말고 사용자가 직접 지정할 수 있다. var 프로퍼티 이름[: 프로퍼티 자료형] [= 프로퍼티 초기화] [get() {게터 본문}] [set(value) {세터 본문}] val 프로퍼티 이름[: 프로퍼티 자료형] [= 프로퍼티 초기화] [get() {게터 본문}] val은 위에서 설명한 것과 마찬가지로 변..
[Kotlin] 5장. 클래스와 객체 생성자 생성자는 클래스를 통해 객체가 만들어질 때 기본적으로 호출되는 함수를 말한다. 외부에서 인자를 받아 초기화할 수 있도록 constructor를 통해 부 생성자를 선언하여 사용할 수 있다. class 클래스 이름 constructor(매개 변수...) { // 주 생성자 ... constructor(매개 변수...) { // 부 생성자 ... // 프로퍼티 초기화 } } 이처럼 사용이 가능하며, 부 생성자는 여러개 선언하여 사용할 수 있다. 이 때, 주 생성자를 초기화 하지 않게 되면, 따로 값을 초기화한 상태의 객체 생성을 할 수 없으며 부 생성자로 선언된 매개 변수 타입으로만 객체를 생성할 수 있다. 주 생성자는 다음과 같이 사용할 수 있다. Bird1 클래스의 경우 아무것도 생략하지 않은 기본..
[Kotlin] 4장. 프로그램의 흐름 제어 조건문 블록의 표현식이 길어질 때 조건문 블록의 표현식이 길어지면 중괄호로 감싸야한다. 또한, 람다식처럼 블록의 마지막 표현식이 변수에 반환되어 할당이 된다. 위의 예제에서 readLine()은 콘솔로부터 문자열을 입력받는 함수로, non-null 단정 기호를 통해 null 값을 받지 않으며 toInt를 통해 Int 타입의 값만 입력받도록 제한하였다. 입력받은 값에 따라 a>b이면 max는 String 타입, 123 문자열을 출력하게 되고, a= && = 0 && a 수행할 문장 인자에 일치하는 값 혹은 표현식2 -> { 수행할 문장 } ... else -> 수행할 문장 } 위와 같이 사용할 수 있으며, 수행할 문장이 한 줄일 경우 중 괄호를 생략할 수 있다. 인자가 없는 경우에는, 인자에 일치하는 값 ..
[Kotlin] 3장. 함수와 함수형 프로그래밍 3 - 다양한 함수 익명 함수 일반 함수이지만 이름이 없는 함수. 익명 함수의 경우, 함수로 따로 선언하여 사용하는 것이 아닌 변수 선언시에 그대로 넣어서 사용 가능한 함수이다. add1의 경우 익명 함수를 생략하지 않고 그대로 사용한 것이다. 매개 변수에 자료형을 써주면 add2 처럼 선언부의 자료형이 생략 가능하고, add3와 같이 람다식 함수와 비슷하게 선언 또한 가능하다. 인라인 함수(Inline Function) 인라인 함수는 이 함수가 호출되는 곳에 함수 본문의 내용을 모두 복사해 넣어 함수의 분기 없이 처리되기 때문에 코드의 성능을 높일 수 있다. 하지만, 인라인 함수는 코드가 복사되어 들어가기 때문에 내용은 대게 짧게 작성해야 한다. 람다식 매개변수를 가지고 있는 함수에서 동작한다. 인라인 함수로 선언되는 경..
[Kotlin] 3장. 함수와 함수형 프로그래밍 2 - 고차 함수와 람다식 람다식 일급 객체의 특징을 가진 이름 없는 함수. 일급 객체의 특징은 다음과 같다. 함수의 인자로 전달 가능한 객체 함수의 반환값에 사용할 수 있는 객체 변수에 담을 수 있는 객체 고차함수 일급 객체 혹은 일급 함수를 서로 주고받을 수 있는 함수. highFunc의 매개변수에 람다식이 들어가고, highFunc 함수에서 sum을 통해 람다식을 매개변수로 받아들여서 사용하는 형태의 고차함수이다. 위의 예제를 순서대로 해설하면 다음과 같다. highFunc 함수에 3개의 매개변수가 들어간다. x,y 의 2가지 변수를 받아서 x + y 의 결과 값으로 반환해주는 람다식과, Int 타입의 변수 100, 10 highFunc 함수에서 람다식을 sum 이라는 변수를 통해 받는다. sum은 Int 타입 변수 2개를 ..
[Kotlin] 3장. 함수와 함수형 프로그래밍 1 - 함수형 프로그래밍 Kotlin 함수의 구조 fun 키워드 : 모든 함수는 fun 키워드로 시작 func : 함수 이름 (a: Int, out: (Int) -> Unit) : 매개변수 정의. a는 Int 타입, out은 Int타입을 매개변수로 받고 아무것도 반환하지 않는 람다형 함수를 매개변수로 가진다. : String : 반환 값의 자료형. func 함수는 String 타입의 변수를 반환한다. 아무것도 입력하지 않으면 반환 값이 없는 것이다. println(~) .. : 함수 본문 return ~ : 반환 값. 반환 타입에 맞는 값을 반환. 함수의 간략화 중괄호(함수의 본문)이 한줄로 return 값만 있는 경우 sum2, sum3과 같이 중괄호와 return을 생략하고 사용할 수 있다. 반환 값이 없는 함수 반환 값이 ..
[Kotlin] 2장. 변수와 자료형, 연산자 2 - 변수와 자료형 변수 선언 Kotlin에서 변수 선언은 val , var 라는 키워드를 사용하여 선언할 수 있다. val : 최초로 지정한 변수의 값으로 초기화 하고 더이상 바꿀 수 없음. 초기화 후 읽기 전용 변수가 된다. var : 최초로 지정한 변수의 초깃값이 있더라도 바꿀 수 있음. var로 선언한 value3의 경우 value4로 다시 변수 값을 초기화 하여 사용할 수 있지만, val로 선언한 value1,2의 경우 변수 값을 바꾸려고 하면 위와 같이 바꿀 수 없음을 알 수 있다. 변수를 선언할 때, val value: String = "value1" val value2: Int 와 같이 자료형을 명시하여 선언할 수 있지만, val value3 = 3 과 같이 코틀린이 자료형을 추론하여 설정해주기 때문에 자료형..