본문 바로가기

전체 글

(404)
[Atomic 40] 확장 함수와 널이 될 수 있는 타입(라이브러리 함수) 보이는 것과 실체가 다를 수 있다? 오늘의 아톰은 코틀린 표준 라이브러리에서 제공하는 널과 관련된 함수에 대해서 알아볼 예정이다. isNullOrEmpty() : 수신 String이 null이거나 빈 문자열인지 검사 isNullOrBlank() : isNullOrEmpty()와 같은 검사를 수행 : 온전히 공백 문자(공백 뿐 아니라 탭(/t)과 새줄 문자(/n)도 포함)로만 구성되어 있는지 검사 import atomictest.eq fun main(){ val s1:String? = null s1.isNullOrEmpty() eq true s1.isNullOrBlank() eq vtrue val s2 = "" s2.isNullOrEmpty() eq true s2.isNullOrBlank() eq true..
[Atomic 39] 널 아님 단언 어떤 참조가 null이 될 수 없다는 사실을 특별히 알 수 있는 경우가 있다? 오늘의 아톰은 널이 될 수 있는 타입을 처리할 수 있는 두번째 접근 방법 중 하나로, 지난 아톰에서 잠시 언급했던 !!를 이야기 하는 아톰이다. [ 널 아님 단언 ] 널 아님 단언 : null이 될 수 없다고 주장하기 위해 느낌표 두 개(!!)를 사용 : x!! - x가 null이 아니라는 것을 보장하며, null이 아니라면 x를, null이라면 오류 발생 : 일반적으로는 !!를 그냥 쓰는 것이 아닌 역참조와 함께 사용 (.!!로 사용) : 널 아님 단언을 사용하지 않고 안전한 호출이나 명시적인 null 검사를 활용하는 것을 권장 : 널 아님 단언을 자주 사용하는 경우 언급하는 적절한 단언과 함께 함수를 분리하는 것이 좋음 i..
[Atomic 38] 안전한 호출과 엘비스 연산자 null 가능성을 편리하게 처리할 수 있는 다양한 연산자 오늘 학습할 아톰은 지난 아톰에서 null일 경우 역참조가 불가능하다는 부분에 대해서 처리할 수 있는 연산자에 대한 아톰으로 추정된다. 과연 어떻게 처리를 했을지 알아보도록 하자. [ 안전한 호출 ] 안전한 호출 : 일반 호출에 사용하는 점(.)을 물음표와 점(?.)으로 표현한 연산자 : null이 될 수 있는 타입의 멤버에 접근하면서 예외가 발생하지 않도록 함 : 객체가 null이 아닐 때에만 연산을 수행하며, null일 경우 null을 결과로 출력 : if를 통해 null을 처리하는 것 대신 사용하여 더 간략하게 표현 가능 : 안전한 호출을 사용해 여러 멤버에 접근을 연쇄시키는 경우 중간에 null이 나온다면 결과로 null을 출력 import..
[Atomic 37] 널이 될 수 있는 타입 결과가 없는 함수는 오류를 발생시키지 않으며, 아무 문제가 없다. 단지 값이 없을 뿐. 자바에서는 null이라는 값이 결과가 되도록 허용했으며, 이를 정상적인 값과 동일하게 다룰 경우 가끔 'NullPointException'이 발생하기도 했다. 이 때문에 많은 실패를 보았지만, null을 허용하지 않음으로서 이를 방지할 수 있다. 오늘 학습할 아톰은 코틀린에서의 널이 될 수 있는 타입이다. [ 코틀린에서 null이 될 수 있는 타입 ] null이 될 수 있는 타입 : 코틀린에서의 모든 기본 타입은 null이 될 수 없음 : 타입 이름 뒤에 물음표(?)를 통해 null 가능 타입이 될 수 있음 : null 가능 타입은 기본 타입에 대입이 불가능 : null 가능 타입과 기본 타입은 서로 다른 타입 : 역..
[Atomic 36] 구조 분해 선언 하나 이상의 아이템을 반환하고 싶다면? 기존에는 변수, 클래스 등에 대해서 반환을 했지만, 여러개의 값을 반환하고 싶다면 코틀린에서는 구조 분해 선언을 통해 반환한다고 한다. 오늘 학습할 아톰은 구조 분해 선언이고 이가 어떻게 쓰이는지 알아보자. [ 구조 분해 선언 ] 구조 분해 선언 val (식별자1, 식별자2, 식별자3, ,,,) = 여러 값이 들어있는 값 : 여러 식별자를 동시에 선언하면서 초기화 : 여러 값이 들어있는 값(객체)을 여러 컴포넌트로 분해해 각 컴포넌트를 순서대로 대입 : 식별자 이름을 괄호에 넣어야 함 : 식별자 중 일부가 필요하지 않은 경우, 이름 대신 밑줄(_)을 사용할 수 있고 맨 뒤쪽의 이름은 아예 생략 가능 : 지역 var / val에만 적용 가능하며, 클래스 프로퍼티 정의..
[Atomic 35 ] 데이터 클래스 (feat. data class 클래스명) 반복적인 코딩을 줄여주는 코틀린 class 매커니즘이 상당 부분의 일을 덜어주지만, 데이터를 저장하는 것이 주 목적인 클래스의 경우 여전히 반복적인 코드를 작성해야 하는데, 코틀린에서는 데이터 저장만 하는 클래스가 필요할 경우 data 클래스를 사용해 코드를 줄이고 공통 작업을 편하게 수행할 수 있도록 해준다. 오늘은 데이터 클래스에 대한 아톰을 학습할 예정이다. [ 데이터 클래스 ] 데이터 클래스 : 클래스 앞에 data 키워드 사용 : 모든 생성자 파라미터를 var / val로 선언 : toString() 코드를 추가 작성하지 않아도 객체를 더 읽고 보기 쉬운 형식으로 제공 : equals()가 자동 생성 : copy() 함수로 해당 데이터 클래스의 데이터를 포함하는 새로운 객체 생성 가능하며, 값을..
[Atomic 34] 이넘(feat. Enum) 이름을 모아두는 Enum 코틀린에서도 Enum이 존재하는데, 어떻게 사용되고 어떤 편리한 점이 있는지 알아보자. [ Enum ] Enum : enum class로 이름을 관리하는 편리한 방법 : enum 생성 시 이름에 해당하는 문자열을 돌려주는 toString() 생성 : 이넘 이름 사용 시 이름을 한정시켜야 함 : import를 사용해 이넘에 정의된 모든 이름을 현재의 이름 공간으로 불러오면 이넘 이름을 한정 시키지 않아도 됨 : import시 Enum.*은 이넘에 있는 모든 이름을 임폴트 하지만 Enum 자체의 이름을 임폴트하지 않음 : Enum.values()를 사용해 이넘 값 이터레이션 가능 : Enum내이름.ordinal은 Enum 내 이름 순서를 의미하며, 0부터 시작함 [ 기본 Enum ]..
[Atomic 33] When 식 패턴에 따라 동작을 수행하는 When 아톰 7에서 학습했던 if문을 대신할 수 있는 when 식에 대해 오늘 아톰에서 학습할 예정이다. if문 보다 when 식의 활용을 더 권장한다고 하는데 어떻게 쓰이고 왜 더 나은지 알아보자. [ When ] when : 어떤 값을 여러가지 가능성과 비교해 선택 when(비교대상){ 비교대상 값1 -> 결과식1 비교대상 값2 -> 결과식2 ... else -> 결과식n } : 위와 같이 when(비교대상; 임의의 식이 올 수도 있음)이 오고 그 뒤에 값과 일치할 수 있는 여러 매치가 있는 본문 오는 형태 : 매치 다음의 화살표 -> 사이에는 공백이 없어야 함 : else가 없을 경우 컴파일 오류가 발생하며, when 식을 문처럼 취급하는 경우에만 else 생략 가능 ..