목록2025/07 (27)
devseop08 님의 블로그
표준 템플릿 라이브러리, STL은 C++ 언어가 제공하는 템플릿을 바탕으로 만든 컨테이너 클래스를 제공하는 라이브러리이다. 템플릿을 사용해 구현된 컨테이너들의 집합이다.벡터, 리스트, 큐 그리고 스택 등의 클래스 템플릿과 그 안에 저장된 데이터를 검색하고 정렬하는 등의 처리를 위한 함수들이 제공된다.STL의 목적은 프로그래머들이 많이 사용하는 공통적인 컨테이너 클래스를 제공하는 것이다.STL의 구성요소컨테이너: 객체 또는 기본 데이터 타입의 집합으로 각 컨테이너는 관련된 헤더 파일 포함 필요반복자: 컨테이너 요소들에 대한 순회 및 접근알고리즘: 컨테이너의 요소들을 다루기 위한 알고리즘(find, max, count, accumulate, sort, ...)컨테이너컨테이너는 데이터를 저장하는 것으로, 저장..
Generic Programming(일반화 프로그래밍)과 템플릿제네릭 프로그래밍이란 ? : 타입에 관계없이 동작하는 일반적인 코드를 작성하는 방법예를 들어, 여러 가지 덧셈을 수행하는 함수를 정의할 때, 기존에는 덧셈에 사용되는 인자들의 타입에 따라 개별적으로 함수들을 구현해야 했다.add(int i1, int i2), add(double d1, double d2), add(Point p1, Point p2)이를 하나의 함수로 구현할 수 있게 하는 기법이 제네릭 프로그래밍 기법이다.제네릭 프로그래밍의 구현 방법매크로 사용함수/ 클래스 템플릿 사용매크로를 사용한 제네릭 프로그래밍매크로(#define) : 코드의 단순 대체#include #define MAX(a, b) ((a>b)?a:b)int main(..
자바 1.0에서는 java.util.Date 클래스 하나로 날짜와 시간 관련 기능을 제공Date 클래스의 문제1.'Date'라는 클래스 이름과 달리 Date 클래스는 특정 시점을 날짜가 아닌 밀리초 단위로 표현2.1900년을 기준으로 하는 오프셋, 0에서 시작하는 달 인덱스 등 모호한 설계로 인한 유용성하락3.Date 클래스의 toString으로는 반환되는 문자열을 추가로 활용하기 어렵다.(Date는 JVM 기본 시간대인 CET, 즉 중앙 유럽 시간대를 사용했는데 이것이 문자열로 반환된다.)Date 클래스는 자체적으로 시간대 정보를 알고 있지도 못한다.자바 1.1에서는 Date 클래스의 여러 메서드를 deprecated시키고 java.util.Calendar 클래스를 대안으로 제공Calendar 클래스의..
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 객체에 대해서도 이러한 연산을 사용할 수 있도록 하면 보다 자연스러운 문장..
상속에서 부모 클래스와 자식 클래스 사이의 의존성은 컴파일타임에 해결되지만합성에서 두 객체 사이의 의존성은 런타임에 해결된다.상속을 제대로 활용하기 위해서는 부모 클래스의 내부 구현에 대해 상세하게 알아야 한다.자식 클래스와 부모 클래스의 결합도가 높아질 수 밖에 없다.합성은 구현에 의존하지 않는다.합성은 내부에 포함되는 객체의 구현이 아닌 퍼블릭 인터페이스에 의존한다.합성을 이용하면 변경에 더 안정적인 코드를 얻을 수 있다.합성 관계는 객체 사이의 동적인 관계다. 상속 관계는 클래스 사이의 정적인 관계다변경에 유연하게 대처할 수 있는 설계가 대부분 정답합성을 사용하면 구현에 대한 의존성을 인터페이스에 대한 의존성으로 변경할 수 있다.클래스 사이의 높은 결합도를 객체 사이의 낮은 결합도록 대체할 수 있다..
얕은 복사(Shallow Copy)얕은 복사: 참조의 대상은 복사해서 늘리지 않고 참조자만 늘리는 형태사이드 이펙트 발생의 원인이 된다.대상 인스턴스는 그대로 두고 참조만 늘어나는 경우참조자에 참조자를 대입하여 두 개의 참조자가 동일한 하나의 인스턴스를 참조하게 하는 방식참조자가 참조하는 인스턴스 안의 값(내용)을 복사해오는 것이 아니다.여러 참조자가 하나의 인스턴스를 공유하게 된다. => 공유하는 하나의 인스턴스 상태를 변경 시 변경으로 인한 영향이 전파된다.얕은 복사 예시class Address { public String addr; public String phone; public Address(String addr, String phone) { this.addr = ..