Programming58 코틀린(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. C언어 - 포인터의 포인터(다중 포인터) 배열도 다차원 배열이 있듯이 포인터에도 이중 포인터(더블 포인터), 다중 포인터가 존재한다. 포인터 변수를 가리키는 이중 포인터 변수 이중 포인터는 *연산자를 두 개 이어서 선언한다. int **p; 포인터 변수도 메모리 공간에 할당이 되는 변수이다. 이를 대상으로 &연산이 가능하고, 이때 반환되는 주소 값은 "더블 포인터 변수"에 저장이 가능하다. #include int main() { double num = 3.14; double *ptr = # double **dptr = &ptr; double *ptr2; printf("%9p %9p\n", ptr, *dptr); printf("%9g %9g\n", num, **dptr); ptr2 = *dptr; *ptr2 = 10.99; printf(".. Programming/C 2021. 10. 2. C언어 - 다차원 배열 앞에서 1차원 배열에 대해 알아봤었다. 이번에는 다차원 배열을 대표하는 2차원, 3차원 배열에 대해 알아볼 것이다. 2차원 배열 선언방식은 다음과 같다. int arr[2][2]; 1차원 배열과 선언방식이 유사하다. 다만 2차원 배열은 평면 구조를 띄기 때문에 가로와 세로의 길이를 각각 명시한다. 2차원 배열요소의 접근 모든 배열요소가 0으로 초기화된 배열 int arr[3][3]이 있다고 하자. arr[0][0] = 1이 실행되면 가로 0번째 세로 0번째 위치에 1이 삽입되는 것이다. 이어서 arr[0][1] = 2를 실행하면 가로 1번째 세로 0번째 위치에 2가 삽입된다. 2차원 배열을 for문을 통해 접근하려면 2중 for문을 써야 한다. for(int i=0; i Programming/C 2021. 10. 2. C언어 - 포인터와 함수에 대한 이해 배열을 함수의 인자로 전달하는 방식 배열을 함수의 인자로 전달하려 할 때 배열을 통째로 전달하는 것은 불가능하다. 이때 배열의 주소 값을 인자로 전달하고 이를 통해 접근하도록 유도하는 방법이 있다. 배열의 주소 값을 전달하는 방법은 다음과 같다. int arr[3] = {1, 2, 3}; SimpleFunc(arr); 이때 SimpleFunc 함수의 매개변수는 어떻게 선언될까? 우리는 이미 포인터를 공부하면서 이 방법에 대해 공부했다. void SimpleFunc(int *param) {. . .} int형 배열의 주소 값을 전달받을 것이기 때문에 int형 포인터인 매개변수를 선언해주면 된다. 포인터와 배열의 이름은 같은 것이므로 포인터 대신 배열 이름을 이용해 매개변수를 선언할 수도 있다. void S.. Programming/C 2021. 9. 30. C언어 - 포인터와 배열 이전 글에서 포인터에 대해 알아보았다. 이제 포인터와 배열의 관계에 대해 알아볼 것이다. 배열의 이름도 사실 포인터이다. 하지만 그 값을 바꿀 수 없는 "상수 형태의 포인터"이다. 포인터 변수와 배열의 이름을 비교해보면 다음과 같다. 표에서 보이듯 둘 다 이름이 존재하며, 특정 메모리 공간의 주소 값을 지닌다는 공통점이 있지만 포인터 변수는 이름이 의미하듯이 변수이고, 배열의 이름은 가리키는 대상의 변경이 불가능한 상수라는 차이가 있다. 배열은 상수 형태의 포인터이며 "포인터 상수"라고도 부른다. 또한 배열의 이름도 포인터이기 때문에 배열의 이름을 피연산자로 하는 *연산이 가능하다. 배열이름의 포인터 형과 배열이름을 대상으로 하는 *연산 int arr[5]; 이와 같이 배열이 선언돼 있자 하자. 배열의 .. Programming/C 2021. 9. 29. C언어 - 포인터의 이해 포인터 포인터는 주소를 가리킨다. 이름만 포인터이지 int, char와 같이 변수이다. 이를 포인터 변수라 부른다. 변수가 어떤 값을 저장하는 것처럼, 포인터는 변수의 주소 값을 저장한다. "정수 6이 저장된 int형 변수 num을 선언하고 이 변수의 주소 값 저장을 위한 포인터 변수 pnum을 선언한 후, pnum에 변수 num의 값을 저장하자."와 같은 문장이 요구하는 바를 코드로 작성해보자. #include int main() { int num = 6; int *pnum; pnum = # printf("int형 변수 num의 주소: %d\n", &num); printf("포인터 pnum의 값: %d\n", pnum); printf("포인터 punm이 가리키는 값: %d\n", *pnum); .. Programming/C 2021. 9. 27. 코틀린(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. C언어 - 1차원 배열 배열이란? 단순하게 "둘 이상의 변수를 모아 놓은 것"이다. 배열은 다수의 데이터를 저장하고 처리하는 경우에 유용하게 사용할 수 있다. 배열은 1차원 배열뿐만 아니라 2차원, 3차원 등 다차원 배열이 있다. 우선 1차원 배열에 대해서 알아본 후, 나중에 다차원 배열에 대해 설명하겠다. 1차원 배열 선언 배열을 선언하는 데에는 3가지 요소가 필요하다. int //배열을 이루는 요소의 자료형 arr //배열의 이름 [4] //배열의 길이 즉, 위의 배열이 선언하는 바는 "int형 변수 4개로 이루어진 arr이라는 이름의 배열을 선언해라"이다. 다른 배열을 예시로 더 들어보겠다. double arr[3]; // double형 변수 3개로 이루어진 배열 arr char str[5]; // char형 변수 5개로.. Programming/C 2021. 9. 23. C언어 - 지역변수와 전역변수 변수는 선언되는 위치에 따라서 "전역변수"와 "지역변수"로 나뉜다. 둘의 차이점으로는 다음과 같은 것이 있다. 메모리상에 존재하는 기간 변수에 접근할 수 있는 범위 지역변수 지역변수에서 "지역"이란 중괄호로 인해 생성된 영역을 말한다. 따라서 지역변수란 중괄호 안에 선언된 모든 변수를 말하는 것이다. 지역변수는 "선언된 지역 내에서만 유효하다"는 특성을 가진다. #include int SimpleFuncOne() { int num = 10; num++; printf("SimpleFuncOne num: %d\n", num); return 0; } int SimpleFuncTwo() { int num1 = 20; int num2 = 30; num1++; num2--; printf("num1 & num2: %.. Programming/C 2021. 9. 22. C언어 - 함수(Function) 함수를 만드는 이유 해결해야 할 규모가 크거나 형태가 복잡한 경우 구현에 필요한 기능들을 분석하고, 그 분석 결과를 바탕으로 작은 크기의 함수들로 구현한다. 한마디로 "하나씩 천천히 해나가는 것"이다. 기능들을 나눠놓으면 문제의 발생 및 프로그램의 요구사항 변경으로 인한 소스코드의 변경이 필요할 때, 변경의 범위를 축소 및 제한할 수 있다. 함수에는 전달 인자의 유무와 반환 값의 유무에 따른 네 가지의 형태가 있다. 1. 전달인자가 있고, 반환 값이 있다. 2. 전달인자가 있고, 반환 값이 없다. 3. 전달인자가 없고, 반환 값이 있다. 4. 전달인자가 없고, 반환 값이 없다. 이러한 유형들의 함수들을 정의해 보겠다. 1. 전달인자와 반환 값이 모두 있는 경우 int Add(int n1, int n2) .. Programming/C 2021. 9. 22. 이전 1 2 3 4 5 다음 728x90