Backend

kotlin으로 java springboot 프로젝트 리팩토링 하기 2

!쪼렙조햄 2020. 4. 19. 21:49
반응형

kotlin 으로 java springboot 프로젝트를 리팩토링 하며 알게된..

  • java와 kotlin의 차이
  • java와 kotlin 코드에 사용되는 몰랐던 개념
  • 좋은 코드를 위한 고민

Any

  • type을 Any라는 키워드로 지정할 수 있다
  • Any
    • Java의 Object에 해당된다

when

  • 인수에 대응하는 모든 분기를 조건이 충족될때까지 순차적으로 맞춰본다
  • 모든 가능한 경우가 존재한다고 증명할 수 없는 경우에 else는 꼭 있어야 한다

companion object

  • 코틀린에는 정적변수 혹은 메소드가 없고, 대신 패키지 내에 함수를 선언하여 사용할 수 있다
  • kotlin은 static 키워드 대신 companion object 기능을 제공
    • companion은 클래스 내부에 companion이라는 정적(static) 객체를 생성하고 그 객체안에 변수를 만들어줌
  • java의 static object
    • 실제 소스에서 static을 사용, 모든 객체가 공유한다
    • static이 붙은 메소드들은 객체들의 데이터와 관계 없는 완벽하게 공통적인 로직을 정의할 때 사용
    • 단 한번만 동작하게 하는 static
      • static이 실행되는 시점은 클래스가 메모리상에 올라갈 때
      • 프로그램을 실행하면 필요한 클래스가 메모리상에 로딩됨
      • 한번 로딩된 클래스는 메모리에 상주하다가 객체를 생성

java - super

  • super 키워드는 부모 클래스로부터 상속받은 필드나 메소드를 자식 클래스에서 참조하는 데 사용하는 참조 변수
  • 부모 클래스의 멤버와 자식클래스의 멤버 이름이 같은 경우 super 키워드를 사용하여 구별
  • super()
    • 부모클래스의 생성자를 호출할 때 사용
    • 자식 클래스의 생성자 첫줄에 명령문 추가하여 부모 클래스의 멤버를 초기화하도록 함
  • 모든 클래스는 Object라는 최상위 클래스를 상속받는다
    • 코드 상으로는 보이지 않지만 extends Object를 하고 있다
    • toString(), eqaul() 과 같은 메소드가 미리 정의되어 있다

@Resource

  • @Autowired, @Inject 와 같이 의존을 주입
  • @Resource
    • Java 에서 지원하는 어노테이션
    • 검색방식 : 이름으로 연결 안되면 타입
  • @Autowired
    • spring framework에서 지원하는 어노테이션
    • 타입으로 연결 안되면 이름
    • 스프링 프레임워크를 쓰다 다른 프레임워크로 수정할 경우에 많은 리소스가 발생

vararg

  • 가변인자
  • java의 가변인자 : … 으로 표시

kotlin null 처리

  • ?.
    • 안전호출
    • 앞의 타입이 null이 아닌 경우만 호출을 해서 값을 리턴
    • 아닌 경우 null호출
    • 엘비스 오퍼레이터와 함께 사용 가능
  • !!
    • nullpointer exception을 굳이 보고 싶으면 사용

kotlin object

  • singleton 패턴
    • 어떤 클래스가 최초 한번만 메모리를 할당하고 (static)
    • 그 메모리에 객체를 만들어 사용하는 디자인 패턴
    • 생성자의 호출이 반복적으로 이루어 져도, 실제로 생성되는 객체는 최초 생성된 객체를 반환해주는 방식
  • kotlin 에서는 object 키워드로 시작
    • class와 달리 객체 선언문이 있는 위치에서 생성자 호출 없이 즉시 만들어지므로 생성자 정의가 필요 없다
    • 클래스, 인스턴스도 상속 가능

::

  • method reference
    • 객체::변수명, 객체::함수명

Reference

반응형