본문 바로가기
✨ 서울대생이 면접 떨어지고 6개월간 삽질하며 정리한 'CS 정리 노트', 지금 무료로 풀립니다!

Programming Language/Kotlin13

Spring MVC에서 코루틴을 쓰면 정말 성능이 좋아질까? 코틀린 코루틴을 처음 배우면 이런 생각이 든다: "코루틴은 경량 스레드니까, Spring MVC에서 suspend 함수를 쓰면 더 많은 요청을 처리할 수 있겠지?" 하지만 현실은 그렇지 않다. 이 글에서는 왜 Spring MVC에서 코루틴의 이점이 제한적인지, 그리고 언제 진짜 도움이 되는지 알아보자.TL;DRSpring MVC + 톰캣: 요청 1개당 스레드 1개 할당 (코루틴 써도 변하지 않음)톰캣은 코루틴을 모름: suspend 함수도 그냥 일반 함수로 처리코루틴의 이점: 한 요청 내에서의 병렬 처리만 가능진짜 성능 향상: Spring WebFlux 써야 함코루틴에 대한 흔한 오해오해: "코루틴 = 무제한 동시성"@RestControllerclass UserController { @GetMap.. 2025. 7. 3.
인터페이스 설계 철학: 왜 확장함수를 사용하는가? 코틀린 코루틴 코드를 보면서 궁금한 점이 생겼다. CoroutineScope 인터페이스는 단 하나의 프로퍼티만 가지고 있는데, isActive, cancel 같은 기능들은 왜 인터페이스 안에 넣지 않고 확장함수로 만들었을까?interface CoroutineScope { val coroutineContext: CoroutineContext // 이것만!}// 이런 것들은 왜 확장함수로?val CoroutineScope.isActive: Booleanfun CoroutineScope.cancel(cause: CancellationException? = null)operator fun CoroutineScope.plus(context: CoroutineContext): CoroutineScope초보 .. 2025. 6. 25.
[Kotlin] 인터페이스 깊게 이해하기 실제 자주 사용되는 패턴을 통해 여러 usecase를 익혀보자.import java.time.Instant// Task 인터페이스interface Task { val taskId: String val taskName: String val createdAt: Instant val dueAt: Instant val assignees: List fun startTask() // 서브인터페이스: Task의 가변 기능 추가 interface Mutable { fun updateTaskDetails(newName: String, newDueAt: Instant) } // 서브인터페이스: Task를 상속하며 기능을 제한 interface Read.. 2024. 9. 7.
[코틀린 Kotlin] 시계열 데이터 입력받아 다양한 형식의 시간 데이터 만들기 이글은 제가 배운 것을 정리하는 글입니다. val curTime = SimpleDateFormat("a h:mm", Locale("ko", "KR")).format(curDate) 시계열 데이터를 입력받아 원하는 형식으로 바꾸기 위해 SimpleDateFormate 클래스를 사용한다. 인자로 바꿀 형식, 지역 정보를 입력할 수 있다. 위의 코드는 "a h:mm"이라고 입력하였는데 "오후 1:25분"과 같은 형식으로 변환된다. 대문자 H를 쓸경우 "오후 13:25분"이 된다. "a HH:mm"은 "오후 04:30분"과 같이 표시된다. 뿐만아니라 "yyyy-MM-dd" 등 여러가지 포맷을 적용시킬 수 있다. 자유롭게 형식을 커스텀 할 수도 있다. 2021. 7. 16.
[코틀린 Kotlin] arrayOf, Array를 이용한 배열 선언 및 변경, 여러가지 메소드 활용 1. 배열 선언 배열 선언은 크게 arrayOf와 Array 두 가지가 존재한다. 둘의 차이점이라면 arrayOf는 선언과 동시에 개별 원소 값을 지정해줄 수 있지만 Array는 개별 원소값을 지정할 수 없다. 대신 Array는 람다식을 활용할 수 있다. 개별 원소를 각각 설정하기엔 arrayOf가 훨씬 자유로운 느낌이다. import java.util.* fun main() { val names = arrayOf("홍길동1", "홍길동2", "홍길동3", 1, 2, 3) //arrayOf를 통한 배열 선언 val names2 = arrayOf("홍길동1", "홍길동2", "홍길동3") // 특정 자료형 지정 가능 val names3 = arrayOfNulls(3) //널 배열 선언. 자료형 타입이나 사.. 2021. 7. 7.
[코틀린 Kotlin] 클래스 정의 및 생성자 호출 코틀린은 클래스를 정의할 때 동시에 생성자를 만들도록 할 수 있다. 다음 코드를 보자. class Person(var name:String){ } fun main() { var person1 = Person("Lee") println("person1의 이름은: ${person1.name}") } >> 출력 >> person1의 이름은: Lee 자바와는 다르게 코틀린은 클래스를 작성할 때 함수처럼 인자를 받을 수 있다. 위와 같이 클래스 객체 생성 시에 "Lee"라는 인자를 바로 넘겨주면 자동으로 생성자가 만들어지기 때문에 person1.name을 출력해보면 "Lee"가 할당되었음을 알 수 있다. 참고: init은 클래스 생성시 자동으로 실행되는 함수다. class Person(var name:String.. 2021. 7. 5.