목록2025/07/21 (4)
devseop08 님의 블로그
11.1 값이 없는 상황을 어떻게 처리할까?전형적인 문제 상황public class Person { private Car car; public Car getCar(){ return car; }}public class Car { private Insurance insurance; public Insurance getInsurance() { return insurance; }}public class Insurance { private String name; public String getName() { return name; }}public String getCarInsurance(Person person) { return person.getCar().getInsuran..
11.1 타입 인자를 받는 타입 만들기: 제네릭 타입 파라미터제네릭스를 사용하면 타입 파라미터를 받는 타입을 정의할 수 있다.제네릭 타입의 인스턴스가 만들어질 때는 타입 파라미터를 구체적인 타입 인자로 치환한다.구체적인 타입을 타입 인자로 넘기면 타입을 인스턴스화할 수 있다.코틀린 컴파일러는 보통 타입과 마찬가지로 타입 인자도 추론할 수 있다.val authors = listOf("Dmitry", "Svetlana");listOf에 전달된 두 값이 문자열이기 때문에 컴파일러는 여기서 생기는 리스트가 List임을 추론한다.반면에 빈 리스트를 만들어야 한다면 타입 인자를 추론할 근거가 없기 때문에 직접 타입 인자를 명시해야 한다.리스트를 만들 때는 변수의 타입을 지정해도 되고 변수를 만드는 함수의 타입 인자..
연산자 다중정의연산자 다중 정의란?C++의 연산자들은 C++에서 제공되는 기본 자료형에 대해서만 정의되어 있기 때문에 사용자가 정의한 클래스에 대해서는 적용할 수 없다.예를 들어 + 연산자는 int나 double 등의 자료형에 대해서는 정의되어 있지만 클래스 객체에 대해선느 정의돼있지 않다.Complex1 c1(10, 20);Complex1 c2(-5, 15);Complex1 c3 = c1 + c2; // Error - Complex1을 위한 + 연산자 없음복소수라는 것은 실수를 포함하는 수의 표현으로, 이에 대해서도 double형에서와 마찬가지로 사칙연산을 포함한 여러 가지 연산이 수학적으로 정의돼 있다.그러므로 Complex1 객체에 대해서도 이러한 연산을 사용할 수 있도록 하면 보다 자연스러운 문장..
상속에서 부모 클래스와 자식 클래스 사이의 의존성은 컴파일타임에 해결되지만합성에서 두 객체 사이의 의존성은 런타임에 해결된다.상속을 제대로 활용하기 위해서는 부모 클래스의 내부 구현에 대해 상세하게 알아야 한다.자식 클래스와 부모 클래스의 결합도가 높아질 수 밖에 없다.합성은 구현에 의존하지 않는다.합성은 내부에 포함되는 객체의 구현이 아닌 퍼블릭 인터페이스에 의존한다.합성을 이용하면 변경에 더 안정적인 코드를 얻을 수 있다.합성 관계는 객체 사이의 동적인 관계다. 상속 관계는 클래스 사이의 정적인 관계다변경에 유연하게 대처할 수 있는 설계가 대부분 정답합성을 사용하면 구현에 대한 의존성을 인터페이스에 대한 의존성으로 변경할 수 있다.클래스 사이의 높은 결합도를 객체 사이의 낮은 결합도록 대체할 수 있다..