코틀린의 클래스와 인터페이스는 자바 클래스, 인터페이스와는 약간 다름 예를 들면, 인터페이스에 프로퍼티 선언이 들어갈 수 있음 자바와 달리 코틀린 선언은 기본적으로 final이며 public 중첩 클래스는 기본적으로 내부 클래스가 아님(코틀린 중첩 클래스에는 외부 클래스에 대한 참조가 없음) 코틀린은 짧은 주 생성자 구문으로도 거의 모든 경우를 잘 처리할 수 있을 뿐더러 복잡한 초기화 로직을 수행하는 경우를 대비한 완전한 문법도 존재 프로퍼티도 마찬가지이며, 필요한 경우 접근자를 직접 정의하여 사용할 수 있음 코틀린 컴파일러는 번잡스러움을 피하기 위해 유용한 메서드를 자동으로 만들어줌 클래스를 data로 선언하면 컴파일러가 일부 표준 메소드를 생성 또한, 코틀린 언어가 제공하는 위임(delegation)..
많은 개발자들이 좋은 코드의 중요한 특징 중 하나가 중복이 없는 것이라 믿음 그래서 그 원칙에는 반복하지 말라라는 이름도 붙어있음(DRY : Dont' Repeat Yourself) 하지만 자바 코드를 작성할 때 DRY 원칙을 피하기는 쉽지 않음 많은 경우 메서드 추출 리팩토링을 적용해서 긴 메서드를 부분부분 나눠 각 부분을 재활용할 수 있음 하지만 그렇게 코드를 리팩토링하게 되면 클래스 안에 작은 메서드가 많아지고, 각 메서드 사이의 관계를 파악하기 힘들어 코드를 이해하기 더 어려워질 수 있음 리팩토링을 진행하여 추출한 메서드를 별도의 내부 클래스(Inner Class) 안에 넣으면 코드를 깔끔하게 조직할 수는 있지만, 그에 따른 불필요한 준비 코드가 늘어나게 됨 코틀린에는 더 깔끔한 해법이 있다? 코..
✅ 문자열과 정규식 다루기 코틀린은 다양한 확장 함수를 제공함으로써 표준 자바 문자열을 더 즐겁게 다루게 해줌 또한 혼동이 야기될 수 있는 일부 메서드에 대해 더 명확한 코틀린 확장 함수를 제공함으로써 프로그래머의 실수를 줄여줌 📌 문자열 나누기 많은 개발자가 "12.345-6.A".split(".")의 호출 결과가 [12, 345-6, A] 배열이라고 생각할 것 하지만 위의 코드를 실행할 경우 자바에서는 빈 배열을 반환함 split의 구분 문자열은 실제로는 정규식이기 때문 따라서 마침표(.)는 모든 문자를 나타내는 정규식으로 해석됨 하지만 코틀린에서는 자바의 split 대신에 여러 가지 다른 조합의 파라미터를 받는 split 확장 함수를 제공함으로써 혼동을 야기하는 메서드를 감춤 정규식을 파라미터로 받..
✅ 컬렉션 처리 : 가변 길이 인자, 중위 함수 호출, 라이브러리 지원 📌 자바 컬렉션 API 확장 코틀린 컬렉션은 자바와 같은 클래스를 사용하지만 더 확장된 API를 제공 last와 max등이 모두 확장 함수로 정의 되어있음 코틀린 표준 라이브러리는 수많은 확장 함수를 포함하기 때문에 모두 다 알 필요는 없을 뿐더러, 사용을 원하는 경우 IDE의 코드 완성 기능을 통해 메소드나 함수를 찾아 살펴보며 사용할 수 있음 IDE가 표시해주는 목록에서 원하는 함수만 선택하면 됨 📌 가변 인자 함수 : 인자의 개수가 달라질 수 있는 함수 정의 가변 길이 인자(Varargs)는 메서드를 호출할 때 원하는 개수만큼 값을 인자로 넘기면 자바 컴파일러가 배열에 그 값들을 넣어주는 기능 코틀린의 가변 길이 인자도 자바와 ..
✅ 메서드를 다른 클래스에 추가 : 확장 함수와 확장 프로퍼티 기존 코드와 코틀린 코드를 자연스럽게 통합하는 것은 코틀린의 핵심 목표 중 하나 기존 자바 API를 재작성하지 않고도 코틀린이 제공하는 여러 편리한 기능을 사용할 수 있는 방법은?? 확장 함수의 활용 개념적으로 확장 함수는 단순함 확장 함수는 어떤 클래스의 멤버 메서드인 것처럼 호출할 수 있지만 그 클래스의 밖에 선언된 함수 확장 함수를 보여주기 위한 어떤 문자열의 마지막 문자를 돌려주는 메서드 package strings fun String.lastChar() : Char = this.get(this.length - 1) 확장 함수를 만들기 위해선 추가하려는 함수 이름 앞에 그 함수가 확장할 클래스의 이름을 덧붙이기만 하면 됨 클래스 이름을..
✅ 코틀린에서 컬렉션 만들기 코틀린의 컬렉션은 자바 컬렉션 구조를 확장해 구현되었음 그렇기 때문에 자바에서 코틀린 함수를 호출하거나 코틀린에서 자바 함수를 호출할 때 자바와 코틀린 컬렉션을 서로 변환할 필요가 없음 코틀린 컬렉션은 자바 컬렉션과 똑같은 클래스 하지만 코틀린에서는 자바보다 더 많은 기능을 사용할 수 있음 ex) 리스트의 마지막 원소를 가져오거나 수로 이뤄진 컬렉션에서 최댓값을 찾을 수 있음 val strings = listOf("first", "second", "third") println(strings.last()) // third val numbers = setOf(1, 14, 2) println(numbers.max()) // 14 코틀린의 컬렉션의 종류는 List, Set, Map ..
✅ 코틀린의 예외 처리 코틀린의 예외 처리는 자바나 다른 언어의 예외 처리와 비슷함 함수는 정상적으로 종료할 수 있지만 오류가 발생하면 예외를 던질 수 있음 함수를 호출하는 쪽에서는 그 예외를 잡아 처리할 수 있음 // 코틀린의 기본 예외 처리 구문은 자바와 비슷함 if (percentage !in 0..100) { throw IllegalArgumentException ( "A percentage value must be between 0 and 100: $percentage") } 다른 클래스와 마찬가지로 예외 인스턴스를 만들 때도 new를 붙일 필요가 없음 자바와 달리 코틀린의 throw는 식이므로 다른 식에 포함될 수 있음 val percentage = if (number in 0..100) nu..
✅ 대상을 이터레이션 : while과 for 루프 코틀린 특성 중 자바와 가장 비슷한 것은 이터레이션 코틀린의 while문은 자바와 동일함 for는 자바의 for-each 루프에 해당하는 형태만 존재 코틀린의 for는 C#과 마찬가지로 for in 형태를 취함 이런 for 루프는 컬렉션에 대한 이터레이션에 가장 많이 쓰임 📌 while 루프 코틀린에는 while과 do-while 루프가 있으며 자바와 큰 차이가 없음 // while while (조건) { // 조건이 참인 동안 본문을 반복 실행 /* ... */ } // do-while do { /* ... */ } while (조건) // 맨 처음 무조건 본문을 한번 실행한 다음 조건이 참인 경우 반복 실행 📌 수에 대한 이터레이션 : 범위와 수열 자..
✅ 선택 표현과 처리 : enum과 when when은 자바의 switch를 대치하되 훨씬 더 강력하며, 자주 사용하는 프로그래밍 요소 when과 더불어 enum을 선언하는 방법과 스마트 캐스트에 대해 살펴봄 📌 enum 클래스 정의 // 간단한 enum 클래스 정의 enum class Color { RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET } enum은 특정한 특징이나 속성으로 분류해서 사용하는 값들을 나열할 때 사용 코틀린에서는 enum class를 사용하지만 자바에서는 enum을 사용 코틀린에서 enum은 소프트 키워드라 부름 enum 클래스 안에 프로퍼티나 메서드를 정의할 수 있으며, 상수를 정의할 때는 그 상수에 해당하는 프로퍼티 값을 지정해야 함 ..
서버의 성능을 높이는 방식에는 “SCALE-UP” 방식과 “SCALE-OUT” 방식이 있음 자세한 내용은 아래 링크 참고 https://dahoonkk.tistory.com/entry/SCALE-UP-SCALE-OUT ✅ 로드밸런싱이 필요한 이유 SCALE-OUT 방식으로 3개의 서버를 운영중이고, 사용자가 3000명이라고 가정했을 때 A 서버에 2500명, B 서버에 250명, C 서버에 250명이 접속한다면 비용을 들여 서버를 증설한 것이 유의미하지 않을 수 있음 또한, A 서버에 부하가 집중되어 해당 서버에 장애가 발생할 수 있어 A 서버를 사용하는 사용자들은 다운타임을 겪을 수 있음 이러한 상황을 방지하기 위해 서버에 트래픽을 분산하는 작업인 로드밸런싱이 필요하며 이를 수행하는 것이 바로 로드밸런..
✅ SCALE-UP과 SCALE-OUT 서버가 단 하나만 존재할 때 수많은 사람들이 동시 접속을 하게 된다면? 서버가 부하를 감당하지 못할 수도 있음 이때, 서버의 성능을 높이는 방법으로 “SCALE-UP”방식과 “SCALE-OUT” 방식이 있음 SCALE-UP : 해당 서버 자체를 업그레이드하는 방식 장점 추가적인 네트워크 연결 없이 성능을 높일 수 있음 스케일 아웃보다 관리 비용이나 운영 문제가 적음 사양만 올리면 되는 것이기 때문에 비교적 쉽게 성능 향상을 시킬 수 있음 단점 성능 증가에 따른 비용 증가폭이 큼 성능 향상의 한계가 있으며, 서버 한 대가 부담하는 양이 많아 장애 영향도가 큼 기존 서버를 교체하여 성능을 올릴 때 서비스 이용이 불가능한 다운타임이 불가피 SCALE-OUT : 서버의 대..
✅ 기본 요소 : 함수와 변수 📌 코틀린의 함수 코틀린에서는 함수 하나로 프로그램을 만들 수 있음 fun main(args: Array) { println("Hello, World!") } 코틀린 프로그래밍에서는 함수를 선얼할 때 fun 키워드를 사용 파라미터 이름 뒤에 해당 파라미터의 타입을 작성 함수를 최상위 수준에 정의할 수 있음(자바와 다르게 클래스 안에 함수를 넣어야 할 필요가 없음) 배열도 일반적인 클래스와 마찬가지(배열 처리를 위한 문법이 따로 존재하지 않음) Sysem.out.println 대신 prinln으로 해결(함수를 간결하게 사용할 수 있는 래퍼를 제공하기 때문) 세미콜론을 붙이지 않아도 됨🥹 // 함수 선언 기본(블록이 본문인 함수) fun max(a: Int, b: Int) : ..