코틀린14 [자료구조] 리스트(1).순차리스트(ArrayList) 리스트란? 일상 생활 속 "위시 리스트", "버킷 리스트" 등 리스트가 담긴 단어를 종종 사용한다. 위시리스트는 자신이 원하는 것을 목록으로 작성해둔 것이고, 버킷 리스트는 자신이 해보고자 하는 것들을 목록으로 작성해둔 것이다. 자료구조의 리스트 또한 데이트의 목록을 의미한다. 리스트는 순차리스트(ArrayList)와 연결리스트(LinkedList) 2가지로 나뉘게 된다. 순차리스트(ArrayList) 순차리스트는 데이터들이 순서대로 메모리에 저장되는 자료구조이다. 즉, 논리적인 순서와 물리적인 순서가 동일한 구현 방식을 갖는다. 배열을 이용해 리스트를 구현한 것으로, 접근이 빠르다는 장점이 있다. 하지만 값을 추가하고 삭제하는데 있어서는 느리다는 단점 또한 존재한다. 삽입(add) ArrayList의 .. 자료구조 2023. 9. 25. 코틀린(kotlin) - 우선순위큐(PriorityQueue) 정렬 기준 백준 또는 CodeForce 등을 풀다보면 우선순위 큐를 사용할 일이 많다. 이 때 우선 순위 큐에 들어가는 자료형이 Int, Double, String 등 한개로만 이루어져 있다면, 아무 조건없이 넣었을 때 오름차순으로 정렬될테고, reverseOrder() 명령어를 통해 역순으로 정렬할 수도 있다. val pq = PriorityQueue() pq.add(1) pq.add(2) pq.add(3) val rpq = PriorityQueue(reverseOrder()) rpq.add(1) rpq.add(2) rpq.add(3) /* pq -> 1, 2, 3 rpq -> 3, 2, 1 */ 하지만 자료형이 하나가 아닌, Pair 또는 Triple 혹은 데이터 클래스와 같은 것을 PriorityQueue의 .. Programming/Kotlin 2022. 8. 7. 코틀린(kotlin) - 리플렉션: 실행 시점에 코틀린 객체 내부 관찰 리플렉션을 간단하게 말하면 실행 시점에 동적으로 객체의 프로퍼티와 메소드에 접근할 수 있게 해주는 방법이다. 보통 객체의 메소드나 프로퍼티에 접근할 때, 컴파일러는 메소드나 프로퍼티의 이름이 실제로 가리키는 선언을 컴파일 시점에 찾아내 해당하는 선언이 실제 존재함을 보장한다. 하지만 타입과 관계없이 객체를 다뤄야 하거나 객체가 제공하는 메소드나 프로퍼티 이름을 오직 실행 시점에만 알 수 있는 경우라면 리플렉션을 사용해야 한다. 코틀린에서 리플렉션을 사용하기 위해선 두 가지의 다른 리플렉션 API를 다뤄야 한다. 첫 번째는 자바가 java.lang.reflect 패키지를 통해 제공하는 표준 리플렉션이다. 코틀린 클래스는 일반 자바 바이트코드로 컴파일되므로 자바 리플렉션 API도 코틀린 클래스를 컴파일한 바.. Programming/Kotlin 2021. 12. 26. 코틀린(kotlin) - 애노테이션 선언과 적용 애노테이션 적용 코틀린에선 자바와 같은 방법으로 애노테이션을 사용할 수 있다. 적용하려는 대상 앞에 애노테이션을 붙이는 것이다. 애노테이션은 @와 애노테이션 이름으로 이뤄지며 함수나 클래스 등 여러 다른 코드 구성 요소에 붙일 수 있다. import org.junit.* class MyTest { @Test fun testTrue() { Assert.assertTrue(true) } } 애노테이션에 인자를 넘길 때는 일반 함수와 마찬가지로 괄호 안에 인자를 넣는다. @Deprecated("Use removeAt(index) instead.", ReplaceWith("removeAt(index)")) fun remove(index: Int) { ... } 이런 remove 함수 선언이 있다면 remove를.. Programming/Kotlin 2021. 12. 19. 코틀린(kotlin) - 애노테이션 선언과 적용 에노테이션 적용 코틀린에선 자바와 같은 방법으로 애노테이션을 사용할 수 있다. 적용하려는 대상 앞에 애노테이션을 붙이는 것이다. 애노테이션은 @와 애노테이션 이름으로 이뤄지며 함수나 클래스 등 여러 다른 코드 구성 요소에 붙일 수 있다. import org.junit.* class MyTest { @Test fun testTrue() { Assert.assertTrue(true) } } 애노테이션에 인자를 넘길 때는 일반 함수와 마찬가지로 괄호 안에 인자를 넣는다. @Deprecated("Use removeAt(index) instead.", ReplaceWith("removeAt(index)")) fun remove(index: Int) { ... } 이런 remove 함수 선언이 있다면 remove를.. Programming/Kotlin 2021. 12. 19. 코틀린(kotlin) - 실행 시 제네릭스의 동작 소거된 타입 파라미터와 실체화된 타입 파라미터 JVM의 제네릭스는 보통 타입 소거(type erasure)를 사용해 구현된다. 이는 실행 시점에 제네릭 클래스의 인스턴스에 타입 인자 정보가 들어있지 않다는 뜻이다. 함수를 inline으로 만들면 타입 인자가 지워지지 않게 할 수 있다. 이를 코틀린에선 "실체화"라고 한다. 실행 시점의 제네릭: 타입 검사와 캐스트 자바와 마찬가지로 코틀린 제네릭 타입 인자 정보는 런타임에 지워진다. -> 제네릭 클래스 인스턴스가 그 인스턴스를 생성할 때 쓰인 타입 인자에 대한 정보를 유지하지 않는다. 예를 들어 List 객체를 만들고 그 안에 문자열을 여럿 넣더라도 실행 시점에는 그 객체를 오직 List로만 볼 수 있고, 어떤 타입의 원소를 저장하는지 알 수 없다.' va.. Programming/Kotlin 2021. 11. 27. 코틀린(Kotlin) - 오브젝트(object): 객체 선언, 동반 객체, 객체 식 객체 선언: 싱글톤 객체 선언은 클래스 선언과, 클래스에 속한 단일 인스턴스의 생성, 변수에 인스턴스 저장을 동시에 처리해주기 때문에 싱글톤에 사용하기 적합하다. object Payroll { val allEmployees = arraylistOf() fun calculateSalary() { for(person in allEmployees) { . . . . } } } payroll.allEmployees.add(Person(. . . .)) payroll.calculateSalary() 싱글톤은 객체 선언 키워드인 object로 시작하면 된다. 객체 선언 객체 선언의 특징은 다음과 같다. 프로퍼티, 메서드, 초기화 블록이 가능하다. 생성자는 객체 선언에 사용할 수 없다.(주 생성자, 부 생성자 모두 .. Programming/Kotlin 2021. 10. 10. 코틀린(Kotlin) - 데이터 클래스와 위임 데이터 클래스(data class) 데이터 클래스는 data라는 수식어를 사용하며 다음과 같은 조건이 충적되어야 한다. 주요 생성자에는 적어도 하나의 파라미터가 필요하다. 주요 생성자의 파라미터는 val, var로 지정해야 한다. 데이터 클래스는 abstract, open, sealed, inner와 같은 수식어를 사용할 수 없다. data Class Client(val name: String, val nation: String) 다음 메서드는 컴파일러가 자동으로 생성한다. 인스턴스 간 비교를 위한 equals 해시 기반 컨테이너에서 키로 사용할 수 있는 hashCode 각 필드를 선언 순서대로 표시하는 문자열 표현을 만들어주는 toString 객체 복사를 편하게 해주는 copy 프로퍼티 선언 순서에 따.. Programming/Kotlin 2021. 10. 10. 코틀린(Kotlin) - 클래스 계층(인터페이스, open, final, abstract, 중첩 클래스, sealed 클래스) 인터페이스 코틀린의 인터페이스는 자바에서의 인터페이스와 유사하다. interface로 시작을 하며, 메서드를 구현할 때 override 변경자를 사용한다.(자바의 @override를 대체) interface Clickable { fun click() } class Button: Clickable { override fun click() = println("I was clicked!") } 인터페이스와 클래스 확장은 클래스: 인터페이스 클래스명 형식으로 구현한다. 여러 인터페이스를 구현 가능하지만, 클래스는 한 개만 상속 가능하다. 또한 override된 함수 이름과 다른 함수의 이름이 중복되서는 안 된다. 디폴트 구현 자바에서는 디폴트를 구현할 때 앞에 default 키워드를 붙여야 하지만, 코틀린에서는.. Programming/Kotlin 2021. 10. 3. 코틀린(Kotlin) - 생성자와 프로퍼티를 갖는 클래스 선언 클래스 생성자 클래스 생성자는 객체를 생성할 때 초기화 블록 다음으로 실행이 된다. 생성자는 주 생성자(Prime Constructor)와 부 생성자(Secondary Constructor) 이 두 가지로 나뉘게 된다. 주 생성자(Prime Constructor) 주 생성자는 클래스 이름 뒤에 constructor 키워드를 사용하여 지정한다. class User construntor(_nickname: String) { val nickname: String init { nickname = _nickname } } 생성자에 private, internal와 같은 가시성 수식어가 없다면 constructor 키워드는 생략이 가능하다. init 블록이나 프로퍼티 초기화 식에서만 주 생성자의 파라미터 참조가 가.. Programming/Kotlin 2021. 10. 3. 코틀린(Kotlin) - 문자열과 정규식 문자열 분리 자바에서의 split과는 달리 코틀린에서는 여러 개의 다른 조합의 파라미터를 받는 split 확장 함수를 제공한다. 정규식을 파라미터로 받는 함수는 String이 아닌 Regex 타입이다. //문자열 구분자 "12.345-6.A".split(".") "12.345-6.A".split(".", "-") "12.345-6.A".split('.', '-') //구분자를 정규표현식으로 지정 "12.345-6.A".split("\\.|-".toRegex()) 3중 따옴표 문자열 3중 따옴표 문자열에서는 역슬래쉬("\")를 포함하여 따로 이스케이프 할 필요가 없다. 예를 들어 온점(.)기호를 이스케이프 하려면 \\.이라고 해야 하지만 3중 따옴표 문자열에서는 \.이라고 사용한다. """(.+)/(.|).. Programming/Kotlin 2021. 9. 25. 코틀린(Kotlin) - 함수 정의와 호출 컬렉션(Collection) 생성 Kotlin에서는 자체 Collection이 아닌 Java Collection을 사용하여 Java 코드와 상호 작용이 용이하다. val array = arrayOf("ONE", "TWO", "THREE") val set = hashSetOf(1, 2, 3) val list = arrayListOf(1, 2, 3) val map = hashMapOf(1 to "one", 2 to "two") 이와 같이 배열을 생성하기 위해서는 arrayOf() 함수를, 집합을 생성하기 위해서는 hashSetOf() 함수, 배열 리스트를 생성하기 위해서는 ArrayListOf() 함수, 맵을 생성하기 위해서는 hashMapOf() 함수를 사용한다. 이름 붙인 인자 이름붙인 인자를 사용하면 .. Programming/Kotlin 2021. 9. 25. 이전 1 2 다음 728x90