Kotlin Day05 회고
Kotlin Day05 회고

Kotlin Day05 회고

1️⃣ 오늘의 Keyword

  1. nullable, non-null
  1. 엘비스 연산자
  1. throws
  1. checked exception
  1. constructor
  1. 주 생성자
  1. 보조 생성
  1. init

2️⃣ 학습 내용 및 예시

  • Null Safety
    • nullable type : ? 기호를 이용해 null이 될 수 있는 변수로 선언 (Int?, String?)
      • 타입 캐스팅적인 면에서보면 nullable 타입니다 non-null 타입보다 상위로 취급
        • Any? ← Any 묵시적 변환
        • Any ← Any? : as로 명시적 변환
    • operator
      • ?
      • ?:
        • 엘비스 연산자
        • null 이면 실행할 기본값 설정
      • ?. (A?.length)
        • 멤버접근 연산자
        • A가 null이면 결과값이 null, 아니면 length
        • A?.let { }
          ⇒ null이 아닌 경우 { } 구문 실행
      • !! (A !! B)
        • A가 null 이 아닌경우만 B실행, null이면 Exception 발생
 
  • 예외처리 순서
      1. 정상처리 - App 내에서 있을 수 있는 에러를 정상 상황으로 처리
      1. 예외전파 - throw
 
  • try - catch - finally
    • 예외 상하위 관계가 있는 경우, 하위 예외부터 처리해야함.
    • Java: Checked Exception이 있어서 예외를 반드시 try–catch로 처리하거나 throws로 선언해야 한다.
      • throws: 이 메서드는 특정 예외가 발생할 수 있으니 호출자가 처리하라고 선언하는 것.
      • checked exception: 컴파일 시점에 반드시 처리(try–catch)하거나 throws로 넘겨야 하는 예외.
    • Kotlin: Checked Exception이 없어서 throws 강제가 없고, 모든 예외는 unchecked다.
 
  • 예외 발생시키기
    • 아마도 예외를 error가 아니라 컨트롤 할 수 있는 대상으로 인식하는 방향성(?)
  • Exception 클래스
    • 프로그램적으로 예외상황 자체를 객체로 만든 것.
    • 사용자 예외 클래스를 생성해서 사용가능.
    • 예외 상황을 타입별로 분류해서 다룰 수 있게 함. (자의석 해석)
 
  • Java Class
    • jvm 언어에서 메모리를 할당하고, 주소를 무조건 return 함
      ⇒ return 과 관련된 어떤 예약어도 붙일 수 없음
    • Java에서 클래스의 로직과 메모리 할당 순서
        1. 클래스가 선언(인식)되는 순간 static 멤버 메모리 할당 (한번만)
        1. 다른 생성자 호출 (this, super)
        1. 메모리 할당
        1. 로직 실행
  • Kotlin Class
    • 클래스 body 가 없다면 { } 생략 가능
    • 코틀린 파일에 파일명과 같은 클래스가 없어도 된다 (권장하지않음)
    • constructor : 생성자 예약어
    •  
    • 주 생성자 (Primary Constructor)
      • 하나의 클래스에 하나의 주 생성자만 정의 가능.
      • 컴파일러가 자동으로 생성해주는 Default 생성자도 주 생성자이다.
      • 주 생성자는 실행문 { } 을 가질 수 없다
      • 필요시 inti 예약어로 따로 명시하는 기법 사용
      • 생성자 매개변수 ⇒ class의 멤버를 초기화하는데 사용됨
      • 주 생성자의 매개변수에 한해서 var val을 붙여 class의 멤버변수로 적용 가능
       
    • 보조 생성자
      • 클래스 바디 영역에 constructor 예약어로 선언
      • 보조 생성자를 선언했으면 주 생성자는 선언하지 않아도 됨
      • 주, 보조 생성자를 개발자가 추가하면 컴파일러는 주 생성자 자동생성x
      • 생성자는 클래스 선언시 최소 하나 이상 정의되어 있어야 한다
      • init로 정의한 초기화 블록은 주 생성자든 보조 생성자든 객체 생성 때 가장 먼저 실행된다. (단 보조생성자 위주로 개발할 때, init을 거의 사용하지 않음)
      • 보조 생성자의 매개변수를 선언할 때 주 생성자처럼 var, val를 추가해서 선언 불가.
 

❓ 이해 안 된 부분 / 도움 요청

  • java에서 자주 클래스의 멤버변수에 직접적인 접근을 막기 위해 private을 붙이고 getter와 setter를 만들어 클래스 밖에서 값에 접근하는걸로 배웠습니다
    • 그런데 코틀린에서 주 생성자의 매개변수에 val나 var을 붙여 클래스의 멤버변수로 적용해 사용할 때에는, 자바에서처럼 클래스 외부에서 변수에 접근을 제어하기 어려운거아닌가? 라는 의문이 생기면서
      => 아 나중에 접근제어자에 대한 이야기가 나올 때 또 추가설명 개념 설명이 나오겠구나
      이렇게 생각이 흘렀고,그러면서 좀 현재는 필요하지 않은 질문을 했던 것 같습니다.자바이든 코틀린이든 private으로 멤버변수가 캡슐화, 되어 있지 않은 상황에서는 어짜피 getter 와 setter가 똑같이 필요하지 않으니까요.이런 생각의 흐름이 맞나요??
 

‼️오늘 느낀 점