본문 바로가기

전체 글

(404)
[Atomic 32] 오버로딩 (feat. overloading) 디폴트 인자를 흉내 내기 위한 오버로딩 활용? 오늘의 아톰은 오버로딩에 대한 아톰이다. 오버로딩에 대해서는 자바에서 학습했기 때문에 알고 있지만 '디폴트 인자를 흉내내기 위한 오버로딩 활용'이라는 말이 매우 궁금해지는 아톰이기에 어떤 내용일지 궁금해지는 시작이다. [ 오버로딩 ] 오버로딩 : 파라미터 목록이 여러 다른 함수에 같은 이름을 사용하는 것 : 함수 시그니처를 비교해 함수를 구분하며, 함수 시그니처 중 반환 타입은 오버로딩 대상이 아님 : 어떤 클래스 안에 확장 함수와 시그니처가 똑같은 멤버 함수가 들어 있으면 코틀린은 멤버 함수를 우선 함 : 확장 함수를 가지고 멤버 함수를 오버로딩 할 수 있음 : '같은 주제를 다르게 변경한다'는 개념을 더 명확히 표현 가능 * 함수 시그니처 : 함수 이름,..
[Atomic 31] 이름 붙은 인자와 디폴트 인자 함수를 작성할 때 기본 값을 지정하고, 함수를 호출할 때 인자의 이름을 지정할 수 있다. 우리는 함수를 작성할 때 파라미터를 함께 넣어서 함수를 호출하는 경우가 많은데, 지금까지의 예제들은 파라미터가 많지 않았지만 많아진다면 각 파라미터가 어떤것을 의미하는지 이해하기 쉽지 않을 것이다. 이를 위해 이름 붙은 인자를 사용하면 코드의 가독성이 좋아지는데 이름 붙은 인자와 디폴트 인자가 어떻게 쓰이는지 알아보자! [ 이름 붙은 인자 ] 함수 호출 시 해당 인자가 의미하는 것이 무엇인지 이름을 붙이는 것 import atomictest.eq fun color(red:Int, green:Int, blue:Int) = "($red, $green, $blue)" fun main(){ color(1, 2, 3) eq ..
[Atomic 30] Extension function (feat. 확장 함수) 라이브러리에 멤버 함수를 추가하고 싶다면? 우리에게 거의 완벽한 라이브러리가 있다면? 이 라이브러리를 활용하는 것이 좋을 것이다. 하지만, 이 라이브러리의 주인이 아니기 때문에 소스 코드에 접근하거나 변경 및 제어가 불가능하다. 또한, 수정한 내용을 새로운 버전이 나올때마다 반복 적용하는 것도 힘들기 때문에 우리는 코틀린에서 확장 함수에 대해서 학습해야 한다. [ Extenstion funciton; 확장 함수 ] 확장 함수 : 기존 클래스에 멤버 함수를 추가하는 것과 같은 효과 : static 메서드로 오버라이드 불가능 : fun 수신객체타입.확장함수명():반환타임 {...} 으로 정의 : 클래스의 멤버 함수와 동일한 이름일 경우 우선순위에서 밀려남 : this는 멤버 함수나 다른 확장에 접근이 가능하..
[Atomic 28] 프로퍼티 접근자(feat. getter / setter) 프로퍼티 이름을 사용해 프로퍼티 읽고 쓰기 오늘은 프로퍼티 접근자를 작성해서 프로퍼티를 읽고 쓰는 연산을 커스텀화 하는 학습에 대한 아톰이다. [ 게터(getter) / 세터(setter) ] 게터(getter) : 프로퍼티 값을 얻기 위해 사용하는 접근자 : 프로퍼티 정의 다음에 get() 정의 시 게터 정의 : get() 정의 시 연결된 프로퍼티 보다 안쪽으로 들여씀 : field 이름을 사용해 저장된 값에 직접 접근 가능 세터(setter) : 가변 프로퍼티를 갱신하기 위해 사용하는 접근자 : 프로퍼티 정의 다음에 set() 정의 시 세터 정의 : set() 정의 시 연결된 프로퍼티 보다 안쪽으로 들여씀 : field 이름을 사용해 저장된 값에 직접 접근 가능 import atomictest.* c..
[Atomic 27] 맵 (feat. Map) key(키)와 value(값)을 연결하는 Map 오늘의 아톰은 컬렉션의 마지막으로 예상되는 Map에 대한 아톰이다. 해당 아톰 내용은 자바와 어떻게 다른지, 어떤 함수들이 존재하는지 알아보자! [ Map ] map : 키-값 쌍을 mapOf()를 통해 Map 생성 : 키-값을 연결시켜주기에 연관 배열이라고 불림 : DB에 비해 기능이 제한적이나 DB에 비해 효율적 : 키와 값을 분리할 때에는 to를 사용해 key to value로 사용 : [] 연산자는 키를 사용해 값을 검색할 때 사용 (검색되는 것이 없다면 null 반환) : 원소가 Map에 전달된 순서를 유지해주며 (mapOf()/mutableMapOf()) 다른 Map 타입에서는 순서가 보장되지 않을 수 있음 : 이터레이션을 수행하면 맵 항목으로 ..
[Atomic 26] 집합 (feat. Set) 각각의 값이 오직 하나만 존재하는 컬렉션, Set 집합은 수학에서 배웠던 내용을 거의 그대로 생각하면 되기 때문에 이해가 어려운 아톰은 아니다. 이전 컬렉션들과 어떻게 다르고 어떻게 쓰이는지 알아볼 예정이다. [ 집합, Set ] Set : in, contains()를 이용해 원소 검사가 가능 : 중복이 없음 (즉, 동일한 원소가 있으면 하나의 원소로 취급됨) : 원소의 순서는 중요하지 않음 : 집합간의 포함여부도 containsAll()을 통해 확인 가능 : union(합집합), intersect(교집합), 차집합(subtract, -)은 점 표기법 / 중위 표기법을 사용해 연산이 가능함 : toSet()을 통해 List에서의 중복 제거(distinct()도 가능), 문자열에 대한 문자들의 집합을 얻을..
[Atomic 25] 가변 인자 목록 길이가 변할 수 있는 가변 인자 목록, varag 가변 인자 목록인 varag 키워드는 어떤 것이고, 어떻게 사용되는지 알아볼 수 있는 아톰이다. 지난 아톰인 리스트와의 차이가 헷갈릴 수 있기 때문에 차이점이 존재한다는 것을 알고 학습해 볼 예정이다, [ 가변 인자 목록, varag ] varag : 가변 인자 목록인 variable argument list의 줄임말 : 함수나 메서드에 가변 개수의 인자(임의의 길이로 인자)를 전달할 수 있도록 하는 코틀린의 기능 : 모든 인자는 지정한 타입에 속해야 함 : varag를 통해 함수 호출 시 전달하는 인자의 개수를 동적으로 조절 가능 : 함수 정의 시 varag로 선언된 인자는 최대 하나만 존재해야 하며, 파라미터 이름을 통해 varag 인자에 접근 가능(..
[Atomic 24] 리스트 (feat. List / MutableList) 다른 객체를 담는 객체 컨테이너, List 이번 학습은 리스트에 대한 아톰이다. 자바에서는 리스트 보다는 배열은 우선으로 하여 배웠는데, 코틀린에서는 리스트를 먼저 배운다. 기본적인 컨테이너가 필요할 때 List를 사용한다고 하는데 오늘은 코틀린에서 List는 어떻게 쓰이는지 학습할 예정이다. * 컨테이너 : Spring에서 말했던 컨테이너와는 다른 개념으로 데이터를 담거나 관리하는 객체를 말함 [ List ] List : 표준 코틀린 패키지에 포함되어 있는 것으로 import하지 않아도 사용 가능 : 표준 라이브러리 함수 listOf(), mutableListOf()가 존재 : 자기 자신을 표시할 때 각괄호([])를 사용 : 각 괄호는 인덱스를 사용해 List의 원소를 읽으며, 인덱스는 0부터 시작 (..