전체 글 122

KAIST 경영대학원 졸업

'23년 8월에 입학하여 2년간의 KAIST 경영대학원 석사과정이 모두 끝났다. 1학년 1학기때 중간/기말고사때 밤을 새우며 시험 공부를 했던 기억이 난다.. 그이후로는.....ㅎㅎㅎ 하여튼. 세상은 넓고 정말 대단한 동기들이 많다는 걸 느꼈다.공통점은 다들 열정을 갖고, 사신다는 것 아래 축사에서 말씀하셨듯, 인생과 성공에 정해진 playbook은 없다. 나만의 playbook 을 잘 개척해 나가면 되는 것 같다.오랜만에 AI의 도움없이 오로지 나의 힘으로 글을 작성하려니 약간 부담이 된다. 제대로 쓴 글인지, 맞춤법은 괜찮은지... (AI없이 무언가를 하려니 얼마나 바보가 된 기분인가...) 요즘은 AI가 글을 다 써주니, 머나먼 미래에는 인간이 직접 작성한 글들이 정말 가치가 있어질지도 모르겠..

Message Queue

상품주문 전, 주문생성-> 결제처리 -> 재고 차감 -> 주문 정보 저장 이메일알림이나 이메일 발송 작업은 메세지 큐에 넣고 비동기적으로 순차적 처리=> 사용자에게는 빠르게 응답 줄 수 있고.부가적인 작업은 백그라운드에서 안정적으로 처리할 수 있는 장점이 있음 MSA라고 했을때, 서버 간 메시지를 주고받는 방식으로 비동기 통신을 구성하는 것이 더 안정적 모든 통신을 메시지 큐로 처리할 필요는 없어.단순한 요청 응답구조이거나, 결과를 바로 확인해야되는 경우는 API를 동기적으로 호출하는 것이 훨씬 간단하고 직관적임.

IT/System Design 2025.12.15

08장 제네릭

코틀린에서 제네릭(Generic)은 타입을 미리 정하지 않고, 나중에 사용할 때 지정할 수 있게 해주는 기능임Java의 제네릭 개념과 비슷하지만, 코틀린에서는 조금 더 간결하게 작성 가능 목적: 코드 재사용성과 타입 안전성(type safety) 확보장점하나의 클래스/함수로 여러 타입을 처리 가능잘못된 타입 사용 시 컴파일 단계에서 오류 발견 가능형태: 와 같이 꺾쇠 괄호 사용(T는 Type의 약자, 꼭 T일 필요 없고 원하는 이름 가능)제네릭 클래스 예제 제네릭 타입 간 상속 관계가 어떻게 유지되느냐를 뜻하는, 무변성, 공변성, 반공변성 으로 나뉨 Java의 extends / super와 대응되지만, 코틀린은 out / in 키워드로 더 직관적으로 씀.1. 무변성 (Invariance)기본 상태 (..

07장-2 데이터 클래스 (data class) 및 기타 클래스 등

data class는 데이터를 저장하기 위한 용도로 쓰이는 클래스임.자동으로 여러 기능(메서드)을 만들어줌 data class User(val name: String, val age: Int) 위 소스코드 한줄만 아래 Method들이 자동 생성됨equals()객체의 값이 같은지 비교hashCode()해시 기반 컬렉션에서 사용toString()User(name=홍길동, age=30) 형식 출력copy()객체를 복사해서 새로운 객체 생성componentN()구조 분해 선언을 위해 생성됨 (예: val (a, b) = user) 아래는 data class 예시 소스코드 결과값:User(name=홍길동, age=30)trueUser(name=홍길동, age=31)이름: 홍길동, 나이: 30 코틀린에서 dat..

07장-1 <추상 클래스와 인터페이스>

추상 클래스와 인터페이스에 대해 알아보자아래는 추상클래스 예시 소스코드 소스코드 실행시:Buddy is breathing.Buddy says: Woof!Kitty is breathing.Kitty says: Meow! Animal은 추상 클래스이며 공통 동작(breathe)과 필수 구현 메서드(makeSound)를 정의함.Dog와 Cat은 각각 makeSound()를 자신의 방식대로 오버라이딩breathe()는 공통 동작이라 모든 하위 클래스가 그대로 사용할 수 있음. 추상클래스와 인터페이스의 가장 큰 차이점은 인터페이스 사용시, 다중 상속이 가능하다는 점이다. interface → 역할 정의 중심 (다중 상속 가능)abstract class → 공통 동작 + 상태 보관 중심 (단일 상속만 가능) 아래..

06-3 정적 변수와 메소드

보통 클래스는 동적으로 객체를 생성하는데 정적으로 고정하는 방법:- 동적인 초기화 없이 사용할 수 있는 개념으로 Java에서는 static 변수 또는 객체- 코틀린에서는 Companion Object로 사용- 프로그램 실행 시, 고정적으로 가지는 메모리로 객체 생성 없이 사용- 단, 자주 사용되지 않는 변수나 객체를 만들면 메모리 낭비 특징 클래스가 여러 번 인스턴스화되어도 companion object는 딱 한 개만 생성됨클래스 로딩 시점에 함께 생성됨 결과값KoreanEnglishworking... 결과값: Init!Hello World!name = DoolyBasketball Object 선언방식은 접근시점에 객체가 생성.그렇기 때문에 생성자 호출을 하지 않으므로, object 선언에는 주/부 ..

(참고) LazyThreadSafetyMode 란?

LazyThreadSafetyMode는 Kotlin에서 by lazy { ... } 지연 초기화가 여러 스레드에서 호출될 때 어떻게 안전성을 보장할지 정하는 열거형(enum) 입니다.1. SYNCHRONIZED (기본값)설명:락(lock)을 사용해서 단일 스레드만이 Lazy 인스턴스를 초기화하도록 보장합니다.초기화된 값은 모든 스레드에서 볼 수 있게 됩니다.사용하는 락은 플랫폼과 구현에 따라 세부사항이 다를 수 있습니다.특징:안전하게 초기화여러 스레드가 동시에 접근해도 단 한 번만 초기화가장 안전하지만 속도는 조금 느릴 수 있음val v by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { create() }2. PUBLICATION설명:초기화 함수가 여러 스레드에서 동시에 호..

06장-2 지연초기화와 위임

- 변수나, 객체의 값은 생성시 초기화 필요- 클래스에서는 기본적으로 선언하는 Property 자료형들은 Null 을 가질 수 없음- 객체의 정보가 나중에 나타나는 경우 나중에 초기화 할 수 있는 방법 필요- 지연 초기화를 위해 lateinit 과 lazy 키워드 사용 의존성이 있는 초기화나 unit 테스트를 위한 코드를 작성 시,예) Car 클래스의 초기화 부분에 Engine 클래스와 의존성을 가지는 경우,Engine 객체가 생성되지 않으면 완전하게 초기화 할 수 없는 경우.예) 단위 (Unit) 테스트를 위해 임시적으로 객체를 생성 시켜야 하는 경우 프로퍼티 지연 초기화- 클래스를 선언할 때 Property 선언은 null 허용하지 않음- 하지만, 지연 초기화를 위한 lateinit 키워드 사용시 ..