본문 바로가기
개발

TIL : 코틀린 기초

by kks950115 2023. 12. 11.
728x90

생성자

생성자는 객체를 만들 때 값을 넣어주는 것이다. 주생성자는 클래스 이름 옆에 쓴다. 예)class 이름 ( -->  name:String , age: Int   <--  )
부생성자는 constructor라는 키워드로 쓴다. 
둘의 차이점은 주생성자는 명시된 모든 값을 한번에 넣어야만 하지만 부생성자는 일부만 넣어도 되게 할 수 있다.

 

 

오버로딩/오버라이딩


오버라이딩 - 덮어쓰기와 비슷하다. 해당 클래스에서만 내용이 다르게 나오게 한다.
오버로딩 - 이름은 같지만 인수가 다른 경우에만 다르게 처리할 수 있는 구현방법이다.

 

인터페이스


인터페이스 - 한 클래스에 상속할 수 있는  부모 클래스는 1개 뿐이다. 하지만 인터페이스는 개수 상관없이 상속할 수 있다.
추상과 비슷해보이지만 속성을 가질 수 없고 메소드만 가질 수 있다. 추상클래스는 반드시 구현해야하지만  인터페이스는 상속받은 내용을 다르게 해도 되고  똑같이 써도 된다. 지금은 똑같이 쓰든 바꿔 쓰든 마음대로이지만 보통 상속받은 내용을 다르게 해서 써왔다는 걸 명심하자.

 

접근제한자


public 어디서든 불러올 수 있음. 그냥 안넣은 기본값
PRIVATE 해당 클래스 안에서만 씀
internal 해당 모듈 안에서만 씀
protected : 해당 클래스를 상속한 객체에서만 쓸 수 있음.

 

try-catch문


try catch - 오류를 만나면 어떻게 처리할지 정할 수 있다.
throw - 오류를 만나면 예외를 던지고 끝
try catch finally-finally문은 트라이 캐치 성공과 관계없이 항상 실행된다.

 

지연초기화


지연초기화를 하는 이유는 저사양에서 메모리를 더욱 효율적으로 사용하기 위하거나 초기값을 정하기가 난처할 때이다.
lateinit으로 지연초기화를 해도 초기화를 안하고 바로 속성을 호출하면 예외가 떠버린다.
이런 경우에 그냥 true/false를 반환하는 this::속성이름.isInitialized로 if조건을 걸어주면 try catch를 사용하는 것보다  간결하게 예외를 뜨지 않게 할 수 있다. 

by lazy {코드} 로 변수가 사용되기 전에 초기화시킬 수도 있다.

 

null-safe


코틀린은 null예외로부터 안전한 설계를 위해 자료형에 널 여부를 명시할 수 있다.
!!는 null 이 아니라고 선언하는거고 최대한 사용을 지양한다.

String?은 스트링이나 널일 수 있다는 타입이다.
변수?.length 에서 ?.은 안전 호출연산자라고 하며 변수가 null일 때는 lenghth를 실행하지 않고 변수가 값이 있을 때만 length를 실행한다. 

?:는 엘비스 연산자라고 불리며 null일 때 다른 문자열을 출력할 수 있게 해준다.

콜렉션

 

콜렉션에는 list, map , set 이 있다.

list 는 읽기 전용과 수정가능한 종류로 구분되고 수정가능한 종류는 넣는만큼 크기가 달라진다.(가변적)
map은 키와 밸류 쌍으로 구성되어 있다. "key" to "value" <--식으로 쓴다 . 

set은 순서가 없고 요소가 존재하는지에 집중한다. 집합이라고 이해하면 된다. 집합 관련 메소드들도 있다.예)interest(),subtract() 등등

 

싱글톤


싱글톤- 객체를 하나만 생성한다. 생성된 하나의 객체를 모든 클래스에서 사용할 수 있다. 

 

@Volatile


@Volatile 이 선언된 변수는 메인 메모리에 적재가 된다. 
보통 var age = 28 같은 작은 변수들은 캐시에 저장된다. 스택에 넣어서 꺼내쓰는 것보다 캐시에 넣었다가 빼서 쓰는게 훨씬 빠르기 때문이다. 
메인 메모리에 적재할 경우 동기화가 더 쉽다는 장점이 있다. 
하지만 메인 메모리를 참조하는 데에는 비용이 많이 들기 때문에 성능 저하의 요인이 된다.

728x90
반응형

댓글