CS 지식 17

[Kotlin] 서브 클래스의 반복작업을 위한 여러 방법 : Reflection, Branch, Strategy pattern

* 이 글은 Kotlin 문법에 익숙하다는 것을 전제로 작성했다. interface, inline function, 각종 함수형 패러다임 지원을 위한 문법을 사용할 수 있다면 어렵지 않을 것이다.문제상황자식 클래스가 아주 다양하고, 이들이 다들 비슷한 처리를 요구할 때가 있다. Android의 AudioEffect 같은 경우가 그렇다.처리를 변경할 때 마다 일일이 메서드를 찾아다니기는 무리여서, 자식 클래스들을 효율적으로 관리할 수 있는 방법이 필요했다. 이런 과일 클래스가 있다고 생각해보자. 각 과일은 Fruit로부터 상속받은 여러 메서드를 구현하고 있다. 이 클래스는 더 이상 바꿀 수 없다고 가정하자.interface Fruit { fun buy() fun wash() fun dry(..

헷갈리기 쉬운 TCP/IP 4계층과 TCP, IP 통신

OSI 7계층을 대체하는 TCP/IP 4계층과 TCP, IP 각각을 혼동하는 경우가 많아서 각 용어를 제대로 정리하려고 한다. OSI 7계층 : 인터넷에서 컴퓨터들이 서로 정보를 주고받는 프로토콜을 7 layer로 나눈 것. TCP/IP : 인터넷에서 컴퓨터들이 서로 정보를 주고받는 프로토콜을 4 layer로 나눈 것. TCP : Transport layer에서 정보를 주고받는 데 사용하는 프로토콜 중 하나. IP : OSI의 Network 계층, TCP/IP의 Internet 계층에서 두 컴퓨터가 정보를 주고받는 데 사용하는 프로토콜 중 하나. 1. TCP/IP 4계층이란 우리가 인터넷상에서 정보를 주고받는 데에는 여러 프로토콜이 필요하다. 유저 인풋을 안전하게 전달하는 방식부터 전기신호를 전선으로 보..

탐색을 위한 Position Class

data class Position( var x: Int, var y: Int, ) { operator fun plus(other: Position): Position { return Position(this.x + other.x, this.y + other.y) } // 깊은 복사에는 .copy 호출(data class에서 구현해줌) } enum class Direction(position: Position) { TOP(Position(-1, 0)), BOTTOM(Position(1, 0)), LEFT(Position(0, -1)), RIGHT(Position(0, 1)) } * copy 사용시 주의할 점 : x, y에 Primitive type이 아닌 객체를 사용한다면, 직접 깊은 복사를 구현해야한다..

삽입정렬(Insertion Sort)

문은영 교수님의 데이터구조 수업 자료입니다. 문제시 삭제하겠습니다. 방식 i가 0 ~ n-1 일 때, 왼쪽 카드가 지금 카드보다 크다면 교환한다. 그렇지 않다면 다음 iteration으로 넘어간다. 이 작업을 index i부터 1까지 매 iteration에서 반복한다. 일부 항목만 정렬이 흐트러졌을 때 사용하면 유리한데, 1. 배열이 이미 정렬되었을 경우 linear time으로 동작하고 2. 구현이 쉽기 때문이다. 시간복잡도 Avg - O(n^2) iteration i에서 벌어지는 swap과 비교 횟수의 평균은 각각 i/2회이다. 시간복잡도를 big-O natation으로 표현하면 O(T(n)) = O(n(n-1)/4) = O(n^2) 이다. Best - O(n) 배열이 이미 정렬되었을 때 각 iter..

선택정렬(Selection Sort)

문은영 교수님의 데이터구조 수업 자료입니다. 문제시 삭제하겠습니다. 방식 i번째(0부터 시작) iteration에서 0 ~ i-1 까지는 정렬되어있음이 보장된다. 이때 i ~ n 까지의 entry 중에 가장 작은 값을 a[i]와 교환한다. 구현할 때 entry 범위가 헷갈릴 수 있다. arr[0]에 가장 작은 값이 들어가는 것이 보장되어야함을 기억하면 덜 헷갈린다. 시간 복잡도 Avg - O(n^2) ith iteration에서 n-i 개의 entry 중 가장 작은 값을 찾는데에는 평균 (n-i)/2 의 비용이 든다. i가 1부터 n까지 이므로 평균 시간복잡도는 T(n) = (탐색) + (교환) = ( 0+…+n-1 ) / 2 + ( 1 * n )이고 O(T(n)) = O(n^2) 이다. Best - O..