널이 될 수 있는 타입 자바와 마찬가지로 코틀린의 참조 값에는 아무것도 참조하지 않을 경우를 나타내는 null이라는 값이 존재합니다. 코틀린 타입 시스템에는 널 값이 될 수 있는 참조 타입과 널 값이 될 수 없는 참조 타입을 구분할 수 있어 컴파일 시점에 NullPointerException(NPE) 가능성을 상당 부분 줄여줍니다. 코틀린에서는 기본적으로 모든 참조 타입은 널이 될 수 없는 타입입니다. 따라서, String 같은 타입에 null을 대입할 수 없습니다. 코틀린에서는 널이 될 수 있는 값을 받는 함수를 작성하려면 아래와 같이 파라미터 타입 뒤에 물음표(?)를 붙여 널이 될 수 있음을 명시해주어야 합니다. fun isBooleanString(s: String?) = s == "false" ||..
PROGRAMMING LANGUAGE
클래스 정의하기 JAVA와 마찬가지로 Kotlin에서는 클래스 정의를 통해 커스텀으로 정의된 연산들이 포함된 새로운 타입을 만들어줍니다. 기본적으로 클래스 선언은 참조 타입(referential type)을 정의합니다. Kotlin 1.3에 도입된 인라인 클래스(inline class)를 통해 참조 타입이 아닌 타입 역시 정의가 가능합니다. 클래스 내부 구조 자바와 마찬가지로, 코틀린 클래스도 class 키워드 다음에 클래스 이름이 오고 그 다음에 클래스 본문이 오는 형태입니다. 코틀린 클래스는 기본적으로 공개(public) 가시성입니다. 최상위 함수와 마찬가지로 최상위 클래스를 internal이나 private으로 설정할 수 있습니다. 코틀린 클래스 명은 자바와 달리, 소스 파일명과 동일하게 작성하지 ..
코틀린 함수 자바 메소드처럼 코틀린 함수도 어떤 입력(parameter)을 받아 자신을 호출한 코드쪽에 출력값을 반환(return)할 수 있는 재사용 가능한 코드 블록입니다. 자바와 달리 코틀린에서 도달할 수 없는 코드(unreachable code)는 오류가 아닙니다. 따라서, return문 다음에 코드가 위치하고 있으면 실질적으로 죽어있는 코드지만 에러가 발생하진 않습니다. → 컴파일러가 경고를 표시하고 IDE는 해당 부분을 강조해줍니다. fun increment(n: Int): Int { return n++ // Error: can't change immutable variable } 함수 반환 타입: 함수 본문 앞에 :을 붙여 작성합니다. 함수 파라미터: 파라미터 앞에는 val이나 var을 표시할..
코틀린 기본 문법 주석 자바와 마찬가지로 코틀린은 세 가지 주석을 지원하며, 코드를 문서화할 때 사용합니다. 한 줄 짜리 주석: //로 시작하고 줄이 끝나면 주석도 끝난다. 여러 줄 주석: /*로 시작하고 */로 끝난다. KDoc 여러 줄 주석: /**로 시작하고 */로 끝난다. Javadoc과 비슷한 리치 텍스트 문서를 생성하기 위해 사용 자바와 달리 코틀린에서는 여러 줄 주석으로 여러번 내포시킬 수 있다. 불변(Immutable) 변수 코틀린에서 변수를 정의하는 가장 간단한 형태는 다음과 같습니다. val num = 15 val 키워드: 값을 뜻하는 value에서 유래 변수 식별자: 새 변수에 이름을 부여 변수의 초깃값: = 기호 뒤에 옴 val 변수는 불변 변수로 한 번 초기화하면 다시는 값을 대입..
코틀린 코틀린은 안전성, 간결성, 상호 운용성을 강조하는 다중 패러다임, 다중 플랫폼 프로그래밍 언어입니다. 안전성 프로그래밍 언어가 안전하려면 프로그래머의 오류를 방지할 수 있어야 합니다. 실전에서 오류를 방지하려면 대가가 필요하기 때문에 안전성을 고려해 언어를 설계하는 것은 트레이드오프의 문제입니다. 코틀린의 설계 목표 중 하나는 자바보다 더 안전성을 보장하는 언어를 설계하되, (자바보다는) 개발자의 생산성을 덜 해치는 언어를 만드는 것입니다. 타입 추론(type inference): 개발자가 명시적으로 타입을 지정하지 않아도 됨(자바10에서도 지역변수에 대한 타입 추론 도입) 널이 될 수 있는 타입(nullable type): null 사용 제한하여 NPE 예외를 좀 더 쉽게 방지 스마트 캐스트(s..
삼항 연산자(ternary operator) JAVA에서는 조건문의 결과가 참인지 거짓인지에 따라 다른 로직을 수행할 때 삼항 연산자를 통해 코드를 간단하게 작성이 가능합니다. JAVA의 조건문 예시 // 일반적인 if문 public int maxNum(int a, int b) { if(a > b) return a; else return b; } // 삼항연산자를 사용한 if문 public int maxNum(int a, int b) { return a > b ? a : b; } JAVA와 달린 Kotlin은 삼항 연산자를 제공하지 않습니다. 그 이유는 Kotlin에서의 if문은 표현식(expression)으로, if문과 else문이 직접 값을 반환하기 때문입니다. 따라서, 삼항 연산자 없이 아래와 같이..
들어가기 전에 이번 포스팅은 스프링 입문을 위한 자바 객체 지향의 원리(김종민 저)를 읽으면서 자바가 제공하는 객체 지향 키워드 및 연산자에 대해 정리한 글입니다. 이해한 내용을 토대로 정리한 글이기 때문에, 책으로 읽어보는 것을 권장합니다. abstract 키워드 - 추상 메소드와 추상 클래스 추상 메소드(Abstract Method)란, 선언부는 있는데 구현부가 없는 메소드를 의미합니다. 추상 메소드를 하나라도 가지고 있다면 해당 클래스는 추상 클래스(Abstract Class)로 선언되어야 합니다. 구현 내용 없이 선언만 되어 있는 메소드가 필요한 이유에 대해 알아보도록 하겠습니다. 만약 아래와 같이 Animal 클래스 배열이 존재하고 각 배열의 원소는 Animal 클래스를 상속 받은 클래스의 객체..
들어가기 전에 이번 포스팅은 스프링 입문을 위한 자바 객체 지향의 원리(김종민 저)를 읽으면서 객체 지향 4대 특성에 대해 정리한 글입니다. 이해한 내용을 토대로 정리한 글이기 때문에, 책으로 읽어보는 것을 권장합니다. 기본 개념 잡기 객체(object)와 분류(class) 먼저, 실생활로 객체지향의 객체(object)와 분류(class)에 대해 간단히 살펴보겠습니다. 세상에 존재하는 모든 것은 사물(개체, 객체, object)입니다. 각각의 사물은 고유하며, 속성 및 행위를 가집니다. 사물을 하나하나 인지하기 보다는 사물을 분류(class)하여 이해를 합니다. 예) 밤하늘에 반짝이는 사물들을 별이라고 분류합니다. 객체란, 세상에 존재하는 유일무이한 사물(개체) 클래스란, 같은 속성과 기능을 가진 객체를..