Kotlin-v4

Shaun·2022년 4월 4일
1

Kotlin

목록 보기
4/10
post-thumbnail

enum

  • 자바 enum 클래스와 매우 흡사하다. 몇가지 특징마 알아보자

  • when (자바의 switch-case) 를 사용해 간단한 메서드를 만들어봤다.
  • enum 클래스는 호출시 클래스명.상수이름
  • 매개변수는 당연히 enumClass타입

  • enum 클래스 상수안에(?) 값을 넣을수 있다.
  • 상수안에 있는 값으로 when 명령어를 사용할수도 있다.

sealed class

  • enum 클래스가 상수를 관리하는 개념이라면 sealedClass객체 를 관리 하는 개념이다(enum 처럼 클래스.값)

  • Enum의 경우 상수에 지정된 값을 변경 불가하지만 sealedClass에서의 객체들에 지정된값은 변경이 가능하다.

  • 열거형 사용시 상수가 의미하는 값을 수시로 바꿔야하거나 다양한 형태로 사용해야할때 사용한다.

sealed Class 실습

  • sealed class 명령어를 사용하며 객체를 관리하는 개념이라 내부의 값들은 다 class로 생성

  • 내부 객체들은 sealed class 를 상속 받는다

  • when 명령어를 활용한 메서드

  • sealedClass는 객체를 관리하므로 객체 타입체크시는 Is 를 사용한다

  • enum클래스와 마찬가지로 객체안에 있는 값들도 사용가능하다.(코틀린에서는 기본생성자 매개변수에

reflecetion

  • 프로그램 실핼 중에 프로그램의 구조(객체,함수,프로퍼티)를 분석하는 기법
  • 객체의 클래스 타입, 클래스 정보, 생성자 정보, 프로퍼티 정보 등을 실행 중에 파악할수 있다.


리플렉션기본

  • 코틀린= KClass<타입> = 참조변수::class
  • 자바 = Class<타입> =참조변수::class.java

리플렉션 클래스 분석

  • 리플렉션을 통해 해당 클래스의 타입뿐만 아니라 클래스가 무슨 타입클래스 인지도 알수 있다.

리플렉션 생성자 분석

  • 참조변수::class.constructors 명령어를 통해 생성자도 분석할수 있다.

  • 생성자는 주생성자 보조생성자 등 여러개 있으니 for문을 돌려 확인을 해준다.

  • parameters 명령어를 통해 생성자의 파라미터까지도 분석 가능하다.

  • 주생성자만 따로 분석할수있는 명령어도 있다. 역시나 매개변수도 추출 가능하다. 매개변수의 이름,index...etc 다양하게 분석이 가능하다.

리플렉션 -맴버변수/메서드

  • 클래스의 맴버변수도 분석할수 있는 명령어가 있다. 멤버변수 또한 하나이상 일수 있으니 for문을 통해 분석해준다.

  • 메서드를 분석하기 위한 명령어이다. 이것또한 하나이상이니 for문을 통해 분석 해준다.

연산자 오버로딩

  • 코틀린에서는 연산자가 수행되면 그 연산자에 해당하는 메서드를 호출한다.

  • 코트린에서는 모든값을 객체로 관리하기때문에 코드에 정수를 작성하면 정수 값을 관리하는 객체를 생상하여 객체로 관리하게 된다.

  • 객체와 객체를 연사자를 통해 연산을 하면 객체내의 메서드를 호출한다. 따라서 객체를 위한 연산자들을 따로 오버로딩 해줘야 한다.

  • 왼쪽에 있는 객체가 가지고 있는 메서드를 호출하고 오른쪽에 있는 객체를 매개변수로 보내는 원리로 동작한다.

함수형 프로그래밍

  • 자바 언어는 객체지향 프로그래밍 언어이다. 모든 코드는 클래스를 설계하고 메서드를 만들어주고 클래스를 통해 객체를 생성해서 사용해야한다

  • 코틀린은 함수만 만들어 사용하는것을 지원한다.

  • 코틀린에서의 함수중 함수 내용이 단순 매개변수를 더하는 간단한 방식이면 한줄로도 정의가 가능하다.

람다식

  • 자바에도 존재하는 람다식 기능이다. 자바와 사용법은 약간은 다르지만 거의 흡사하다.

  • 코틀린에서 타입추론이 가능해 lamda1 ->lamda2 처럼 사용 가능하다.

  • 코틀린에서는 함수 파라미터가 마지막에 위치할 경우 소괄호 밖에 중괄호를 사용한 람다 사용 가능

  • 람다를 작성할때, 람다의 파라미터를 it으로 직접 참조할 수 있다.

  • 코틀린은 람다가 시작하는 시점에 참조하고 있는 변수들을 모두 포획하여 그 정보를 가지고 있다. 이 데이터 구조를 closure라고 한다

익명함수

  • 코틀린에서 함수를 변수에 담는것은 불가능하지만 익명함수 로는 변수에 담아서 사용이 가능하다.

  • 이름이 없는 함수라 변수(함수의 주소값을 가지고 있는)를 통해 접근해야 한다.

인라인 함수

  • 코틀린 코드가 자바 코드로 변경될 때 함수를 호출하는 코드를 함수내에 구현한 코드로 변경하는 함수 이다. 즉 함수를 호출해서 불러오는것이 아닌 함수의 구현내용을 그대로 복사해서 붙여넣어 하나의 함수로 만든다는 말.

  • 함수 호출 방식은 전체 코드양이 줄어들어 메모리를 적게 쓴다는 장점이 있지만 호출시 코드 흐름이 이동하고 다시 돌아와야 하기 때문에 작업량이 늘어난다.

  • 인라인 함수는 전체 코드양이 늘어 메모리를 더 사용하지만 코드 흐름의 이동 없이 수행되기 때문에 작업량이 늘어나지 않는다.

=> 함수호출 vs 인라인 함수는 누가 더 좋다라고 말할수 없다. 각자의 목적에 맞게 알맞게 사용하자.

확장 함수

- 기존 클래스에 함수를 추가하는 개념

  • 코틀리 코드에서는 기존 클래스에 메서드를 추가해 사용하는 것처럼 보이지만 사실 객체의 주소값을 받은 함수가 만들어지고 그 함수를 호출하는 방식으로 동작함

  • 실제로 디컴파일된 자바코드를 보면 일반메서드가 생성된후 호출되는 방식이다.

Infix함수

  • 함수를 연산자처럼 사용할 수 있는 함수이다.

  • 재밌는점은 infix 함수도 Int클래스에 메서드를 추가한것 처럼 보이지만 그게아니라 확장 함수와 같다.(객체의 주소값을 받은 함수가 만들어지고 그 함수를 호출하는 방식)

고차함수-매개변수 함수

  • 함수를 매개변수로 받거나 반환 타입이 함수인 함수를 고차 함수라고 부른다.
  • 매개변수로 전달하는 함수나 반환하는 함수는 람다식을 사용할 수도 있다.

1.함수를 매개변수로 받는 함수

  • 익명함수를 만들어서 매개변수로 익명함수라 변수에 넣어서 던져도되고 아니면 바로 작성해도 괜찮다.

2.람다식을 매개변수로 받는 함수

  • 매개변수에 익명함수 대신에 람다식을 보내는 방식이다.
  • 매개변수 마지막을 함수로 받을경우에만 -> 람다식을 괄호() 밖으로 뺴내서 사용가능하다.(복잡한 람다식 사용시)

3.매개변수가 하나인 함수를 매개변수로 받는 함수

  • 매개변수가 하나인 함수를 매개변수로 받는 함수 호출시 it라는 명령어를 사용해 호출 가능하다.

고차함수-반환값 함수

1. 반환값을 함수(익명함수)로 받는 고차함수

2. 람다식으로 변형이 가능하다.(익명함수 ->람다식)

profile
호주쉐프에서 개발자까지..

0개의 댓글