본문 바로가기

책 요약하기/Do it! 코틀린 프로그래밍

(12)
#07-3. 연산자 오버로딩 2021-05-16 07-3 연산자 오버로딩 코틀린에서 특정 연산자의 역할을 함수로 정의하고 있습니다. 이를 일종의 협약(Convension)이라고 하는데 수학에서 곱하기 연산이 더하기 연산보다 우선하듯이 연산자 역시 우선순위(Precedence)를 갖고 있습니다. 우선순위 분류 심볼 높음 낮음 접미사(Postfix) ++, --, ., ?., ? 접두사(Prefix) -, ++, --, !, 라벨선언(이름@) 오른쪽 형식(Type RHS)` :, as, as? 배수(Multiplicative) *, /, % 첨가(Additive) +, - 범위(Range) .. 중위 함수(Infix Function) SimpleName 엘비스(Elvis) ?: 이름 검사(Name Checks) in, !in, is, !is 비교(Comp..
#07-2. 애노테이션 클래스 2021-05-16 애노테이션 위치 @Fancy class MyClass { @Fancy fun myMethod(@Fancy myProperty: Int): Int { return (@Fancy 1) } } 앞에서 정의한 @Fancy라는 애노테이션을 클래스의 앞, 메서드 앞, 프로퍼티 앞에 사용할 수 있고, 반환할 때에는 값 앞에 표기하거나 소괄호로 감쌉니다. :) class Foo @Fancy constructor(dependency: MyDependency) { ... } 생성자 앞에 사용 시 constructor생력 불가!! class Foo { var x: MyDependency? = null @Fancy set } 프로퍼티의 게터/세터에도 사용 가능합니다 :) 애노테이션의 매개변수와 생성자 annotation cl..
#07-2. 데이터 클래스와 기타 클래스 2021-05-15 07-2 데이터 클래스와 기타 클래스 데이터 전달을 위한 데이터 클래스 보통 데이터 전달을 위한 객체를 DTO(Data Transfer Object)라고 부릅니다. 자바에서는 POJO(Plain Old Java Object)라고 부르기도 했습니다. DTO는 구현 로직을 가지고 있지 않고 순수한 데이터 객체를 표현하기 때문에 보통 속성과 속성을 접근하고자 하는 게터/세터를 가집니다. 추가적으로 toString(), equals() 등과 같은 데이터를 표현하거나 비교하는 메서드도 가지고 있습니다. 데이터 클래스에서 내부적으로 자동 생성되는 메서드 - 프로퍼티를 위한 게터/세터 - 비교를 위한 equals()와 키 사용을 위한 hashCode() - 프로퍼티를 문자열로 변환해 순서대로 보여주는 toString..
#07-1. 추상 클래스와 인터페이스 2021-05-08 07-1 추상 클래스와 인터페이스 추상 클래스(Abstract Class)는 선언 등의 대략적인 설계 명세와 공통의 기능을 구현한 클래스입니다. '추상(abstract)'이라는 말은 '구체적이지 않은 것'을 나타냅니다. 추상 클래스를 상속하는 하위 클래스에서 추상 클래스의 내용을 더 구체화해야 합니다. 인터페이스(interface)도 대략적인 설계 명세를 가지고 몇 가지 기본적인 부분은 구현할 수 있지만 하위에서 더 자세히 구현해야 하는 점은 추상 클래스와 동일합니다. 하지만 추상클래스와 다르게 인터페이스에서는 프로퍼티에 상태 정보를 저장할 수 없습니다. 단, 다중 상속과 같이 여러 개의 인터페이스를 하나의 클래스에서 구현하는 것이 가능합니다. package chapter_07 fun main() { }..
#06. 프로퍼티와 초기화 2021-05-02 06.1 프로퍼티의 접근 // 코틀린에서 자바 클래스의 static 메서드에 접근하기 fun main() { println(Customer.LEVEL) Customer.login() } /* 결과 : BASIC Login... // 자바의 Customer 클래스 public class Customer { public static final String LEVEL = "BASIC"; // static 필드 public static void login() { // static 메서드 System.out.println("Login..."); } } 코틀린에서는 변수 선언 부분과 기본적인 접근 메서드를 모두 가지고 있기 떄문에 프로퍼티라는 새로운 이름으로 부릅니다. Person 클래스에 변수에 해당하는 priv..
#05-2. super와 this의 참조, 정보 은닉 캡슐화, 클래스와 클래스의 관계 2021-04-27 super와 this의 참조 상위 클래스는 super 키워드로, 현재 클래스는 this 키워드로 참조가 가능합니다. super this super.프로퍼티 이름 // 상위 클래스의 프로퍼티 참조 super.메서드 이름() // 상위 클래스의 메서드 참조 super() // 상위 클래스의 생성자 참조 this.프로퍼티 이름 // 현재 클래스의 프로퍼티 참조 this.메서드 이름() // 현재 클래스의 메서드 참조 this() // 현재 클래스의 생성자 참조 fun main() { // this로 현재 객체 참조 val sean = Developer("Sean") } /* 결과 : [Person] firstName: Sean, 10 [Developer] firstNam: Sean, 10 [Developer]..
#05-1. 클래스와 객체, 생성자, 상속과 다형성 2021-04-25 05-1 클래스와 객체의 정의 객체지향 프로그래밍과 용어 객체 지향 프로그래밍(OOP : Object Oriented Programming)은 프로그램의 구조를 객체 간 상호작용으로서 표현하는 프로그래밍 방식입니다. 객체 지향 프로그래밍 특징 - 추상화(Abstraction): 특정 클래스를 만들 때 기본 형식을 규정하는 방법 - 인스턴스(Instance): 클래스로부터 생성한 객체 - 상속(Inheritance): 부모 클래스의 내용을 자식 클래스가 그대로 물려받음 - 다형성(Polymorphism): 하나의 이름으로 다양한 처리를 제공 - 캡슐화(Encapsulation): 내용을 숨기고 필요한 부분만 사용 - 메시지 전송(Message Sending): 객체 간에 주고받는 메시지 - 연관(Assoc..
#04. 함수와 함수형 프로그래밍 2021-04-25 if문과 조건문 블록의 표현식이 길어질 때 람다식처럼 블록의 마지막 표현식이 변수에 반환되어 할당됩니다. fun main() { val a = 12 val b = 7 // 블록과 함께 사용 val max = if (a > b) { println("a 선택") a // 마지막 식인 a가 반환되어 max에 할당 } else { println("b 선택") b // 마지막 식인 b가 반환되어 max에 할당 } println(max) } /* 결과 : a 선택 12 */ else if문 fun main() { print("Enter the Score: ") val score = readLine()!!.toDouble() // Input Console var grade: Char = 'F' if (score >=..