enum 클래스가 상수를 관리하는 개념이라면 sealedClass 는 객체 를 관리 하는 개념이다(enum 처럼 클래스.값)
Enum의 경우 상수에 지정된 값을 변경 불가하지만 sealedClass에서의 객체들에 지정된값은 변경이 가능하다.
열거형 사용시 상수가 의미하는 값을 수시로 바꿔야하거나 다양한 형태로 사용해야할때 사용한다.
sealed class 명령어를 사용하며 객체를 관리하는 개념이라 내부의 값들은 다 class로 생성
내부 객체들은 sealed class 를 상속 받는다
when 명령어를 활용한 메서드
sealedClass는 객체를 관리하므로 객체 타입체크시는 Is 를 사용한다
enum클래스와 마찬가지로 객체안에 있는 값들도 사용가능하다.(코틀린에서는 기본생성자 매개변수에
리플렉션기본
- 코틀린= KClass<타입> = 참조변수::class
- 자바 = Class<타입> =참조변수::class.java
참조변수::class.constructors 명령어를 통해 생성자도 분석할수 있다.
생성자는 주생성자 보조생성자 등 여러개 있으니 for문을 돌려 확인을 해준다.
parameters 명령어를 통해 생성자의 파라미터까지도 분석 가능하다.
코틀린에서는 연산자가 수행되면 그 연산자에 해당하는 메서드를 호출한다.
코트린에서는 모든값을 객체로 관리하기때문에 코드에 정수를 작성하면 정수 값을 관리하는 객체를 생상하여 객체로 관리하게 된다.
객체와 객체를 연사자를 통해 연산을 하면 객체내의 메서드를 호출한다. 따라서 객체를 위한 연산자들을 따로 오버로딩 해줘야 한다.
왼쪽에 있는 객체가 가지고 있는 메서드를 호출하고 오른쪽에 있는 객체를 매개변수로 보내는 원리로 동작한다.
자바 언어는 객체지향 프로그래밍 언어이다. 모든 코드는 클래스를 설계하고 메서드를 만들어주고 클래스를 통해 객체를 생성해서 사용해야한다
코틀린은 함수만 만들어 사용하는것을 지원한다.
코틀린에서의 함수중 함수 내용이 단순 매개변수를 더하는 간단한 방식이면 한줄로도 정의가 가능하다.
자바에도 존재하는 람다식 기능이다. 자바와 사용법은 약간은 다르지만 거의 흡사하다.
코틀린에서 타입추론이 가능해 lamda1 ->lamda2 처럼 사용 가능하다.
코틀린에서 함수를 변수에 담는것은 불가능하지만 익명함수 로는 변수에 담아서 사용이 가능하다.
이름이 없는 함수라 변수(함수의 주소값을 가지고 있는)를 통해 접근해야 한다.
코틀린 코드가 자바 코드로 변경될 때 함수를 호출하는 코드를 함수내에 구현한 코드로 변경하는 함수 이다. 즉 함수를 호출해서 불러오는것이 아닌 함수의 구현내용을 그대로 복사해서 붙여넣어 하나의 함수로 만든다는 말.
함수 호출 방식은 전체 코드양이 줄어들어 메모리를 적게 쓴다는 장점이 있지만 호출시 코드 흐름이 이동하고 다시 돌아와야 하기 때문에 작업량이 늘어난다.
인라인 함수는 전체 코드양이 늘어 메모리를 더 사용하지만 코드 흐름의 이동 없이 수행되기 때문에 작업량이 늘어나지 않는다.
=> 함수호출 vs 인라인 함수는 누가 더 좋다라고 말할수 없다. 각자의 목적에 맞게 알맞게 사용하자.
- 기존 클래스에 함수를 추가하는 개념