목록코틀린 (31)
hyeals study
※ 코틀린의 타입 시스템(type system)은 자바와 비교해서 코드의 가독성을 향상시키는데 도움을 주는 몇 가지 특성이 있음. 널이 될 수 있는 타입(nullable type) 읽기 전용 컬렉션 배열 지원 [널 가능성(nullability)] : NullPointerException오류를 피할 수 있게 도움을 주는 코틀린 타입 시스템을 특성 ☞ 널이 될 수 있는지의 여부를 타입 시스템에 추가함으로써 컴파일러가 컴파일 시 오류를 미리 감지해서 실행 시점에 발생할 수 있는 예외 가능성을 줄일 수 있음. [널이 될 수 있는 타입] * 코틀린과 자바의 가장 중요한 차이: 코틀린 타입 시스템이 널이 될 수 있는 타입을 명시적으로 지원하는 것. * 널이 될 수 있는 타입: 어떤 프로퍼티나 변수에 null을 허용..
[수신 객체 지정 람다] : 수신 객체를 명시하지 않고 람다의 본문 안에서 다른 객체의 메소드를 호출할 수 있게 하는 것 [with 함수] ※ with 함수의 유용성을 알아보기 위한 예시 1. with 함수를 사용하지 않고 알파벳 만들기 위의 예시에서 result를 반복사용함. 2. with 함수를 사용해서 알파벳 만들기 return with(stringBuilder) 부분: 메소드를 호출하려는 수신 객체 지정 this.append(letter) 부분: this를 명시해서 앞에서 지정한 수신 객체의 메소드 호출 append("\nNow I know the alphabet!") 부분: this를 생략하고 메소드 호출 this.toString() 부분: 람다에서 값을 반환 ☞ with 함수는 파라미터가 2개..
* 람다 식(lambda expression): 다른 함수에 넘길 수 있는 작은 코드 조각 장점: 쉽게 공통 코드 구조를 라이브러리 함수로 뽑아낼 수 있음 (실제로 코틀린의 표준 라이브러리는 람다를 많이 사용함) 사용 예시: 컬렉션 처리 * 수신 객체 지정 람다(lambda with receiver): 특별한 람다임. 람다 선언을 둘러싸고 있는 환경과는 다른 상황에서 람다 본문을 실행할 수 있음. [람다 소개] * 람다식을 사용하면 함수를 선언할 필요가 없고, 코드 블록을 직접 함수의 인자로 전달할 수 있음. ☞ 코드가 간결해짐 -예를 들어, 버튼 클릭에 따른 동작을 정의할 때 이벤트 처리를 하는 리스너를 추가해야 함. 이 때 버튼 클릭 리스너는 onClick이라는 메소드가 들어있는 onClickList..
객체 선언은 싱글턴을 사용하는 방법 중 하나 동반 객체(companion object)는 인스턴스 메소드는 아님. 하지만 어떤 클래스와 관련있는 메소드와 팩토리 메소드를 담을 때 쓰임. 동반 객체 메소드에 접근할 때 동반 객체가 포함된 클래스의 이름을 사용할 수 있음. 객체 식은 자바의 익명 내부 클래스(anonymous inner class) 대신 쓰임. ☞ 공통점: 클래스를 정의하면서 동시에 인스턴스(객체)를 생성함. [객체 선언(object declaration)] * 싱글턴 패턴(singleton pattern): 자바에서 보통 클래스의 생성자를 private으로 제한하고, 정적인 필드에 그 클래스의 유일한 객체를 저장하는 패턴 ☞ 코틀린은 객체 선언 기능을 통해서 싱글턴을 언어에서 기본으로 지원..
* 코틀린은 toString, equals, hashCode 등의 메소드 구현을 자동으로 생성해줄 수 있음. [toString 메소드: 문자열 표현] - 코틀린의 모든 클래스는 인스턴스의 문자열 표현을 얻을 방법을 제공함. - 이는 toString 메소드를 오버라이드함으로써 구현할 수 있음 위의 코드는 어떤 고객의 정보를 얻어올 수 있는 문자열 표현임. toString 메소드를 오버라이드 했음. [equals 메소드: 객체의 동등성] * == 연산자: 참조의 동일성을 검사하지 않고 객체의 동등성을 검사함. 따라서 == 연산은 equals를 호출하는 식으로 컴파일됨. ☞ == 연산자는 객체의 동등성을 검사하기 때문에 false를 반환함. * equals : 참조의 동일성을 검사함 Any: 코틀린에서 모든 ..
코틀린은 primary 생성자와 secondary 생성자를 구분함. 또한 코틀린에서는 초기화 블록을 통해 초기화 로직을 추가할 수 있음. [주(primary)생성자 초기화] 보통 클래스의 모든 선언은 중괄호({})에 들어가 있음 하지만 위의 클래스 선언 예시를 보면 중괄호가 없음. 대신에 val 선언만 존재함. → 이처럼 클래스 이름 뒤에 오는 괄호로 둘러싸인 코드를 주 생성자 라고 함. 생성자 파라미터를 지정 지정한 생성자 파라미터에 의해 초기화 되는 프로퍼티를 정의 따라서 위의 코드를 풀어쓰면 아래와 작은 코드로 이해할 수 있음 constructor 키워드: 주 생성자나 부 생성자 정의를 시작할 때 사용 init 키워드: 초기화 블록을 시작함. _nickname: 생성자 파라미터임. 밑줄(_)은 프로..
[코틀린 인터페이스] : 자바의 인터페이스와 비슷함. ☞ 코틀린 인터페이스 안에 추상메소드와 구현이 되어있는 메소드(자바에서 default메소드와 비슷)를 정의할 수 있음. 다만, 인터페이스안에 어떠한 필드도 들어갈 수 없음. * 클래스는 class로 정의, 인터페이스는 interface로 정의 위의 코드는 click이라는 추상메소드가 있는 인터페이스를 정의한 예시임. * 이 인터페이스를 구현하는 모든 클래스는 click에 대한 구현을 제공해야 함. 아래와 같은 방법으로 이 인터페이스를 구현하면 됨. 자바에서는 extends나 implements 키워드를 사용하지만, 코틀린에서는 클래스명 뒤에 콜론(:)을 붙여서 상속과 인터페이스를 처리함. 자바와 마찬가지로 코틀린에서도 상속은 하나만 할 수 있고, 인터..
* 로컬(local) 함수를 사용하면 코드의 중복을 없앨 수 있으며 구조를 깔끔하게 유지할 수 있음. 이를 확인하기 위해 아래에 사용자를 데이터베이스에 저장하는 함수 예시가 있음 위의 코드에서 user.name.isEmpty() 부분과 user.address.isEmpty() 부분이 중복됨 (필드를 검사하는 부분) 위의 코드는 중복되는 부분이 그리 많지 않지만 중복이 많이 생기는 코드는 구조가 복잡해짐. ☞ 이러한 검증 코드를 로컬 함수로 분리하면 중복을 없앨 수 있으며 구조가 깔끔해짐 validate(user, user.name, "Name"), validate(user, user.address, "Address") 부분에서 필드를 검증 결과적으로 검증 로직 중복이 사라지고, 필요에 따라 다른 User..