목록전체 글 (67)
devseop08 님의 블로그
연산자 다중정의연산자 다중 정의란?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 = ..
객체지향에서는 코드를 재사용하기 위해 코드 복사가 아닌 '새로운' 코드를 추가한다.객체지향에서 클래스를 재사용하는 전통적인 방법은 새로운 클래스를 추가하는 것이다.재사용 관점에서 상속이란 클래스 안에 정의된 인스턴스 변수와 메서드를 자동으로 새로운 클래스에 추가하는 구현 기법1. 상속과 중복 코드중복 코드는 개발을 주저하게 만들 뿐만 아니라 동료들을 의심하게 만든다.이것만으로도 중복 코드를 제거해야 할 충분한 이유가 되고도 남겠지만 결정적인 이유는 따로 있다.DRY 원칙중복 코드는 변경을 방해한다. 이것이 중복 코드를 제거해야 하는 가장 큰 이유다.중복 코드는 코드를 수정하는 데 필요한 노력을 몇 배로 증가시킨다.우선 어떤 코드가 중복인지를 찾아야 한다.중복 코드의 묶음을 찾았다면 찾아낸 모든 코드를 일..
변수와 타입변수는 데이터가 저장되는 메모리 공간이고, 변수의 형태, 즉 메모리 공간의 형태를 메모리 공간 타입, 변수의 타입이라 한다.자바는 정수, 실수, 문자, 논리값 데이터를 저장할 수 있는 메모리 공간의 기본 타입을 제공한다.정수 타입 : byte, char, short, int, longbyte크기 : 8비트, 1바이트값의 저장 범위: -2^7 -1 ~ 2^7 -1short크기 : 16비트, 2바이트값의 저장 범위: -2^15-1 ~ 2^15-1char => 유니코드(문자)에 해당하는 이진수 데이터들을 저장할 수 있다.크기 : 16비트, 2바이트값의 저장 범위 : 0~ 2^16-1int크기 : 4바이트값의 저장 범위: -2^31-1 ~ 2^31-1long크기: 8 바이트값의 저장 범위: -2^63..
기초 클래스와 파생 클래스객체지향 언어에서 상속은 계층관계를 사용하여 클래스 간의 속성 및 함수를 공유할 수 있도록 지원하는 매우 중요한 개념이다.객체지향 언어에서는 하나의 클래스를 다른 클래스의 속성을 상속받아 정의하는 기능을 제공한다.한 클래스가 다른 클래스의 한 가지 구체적인 예에 해당할 때 이 클래스 간에 'is-a' 관계가 있다고 말한다.상속하는 클래스들의 공통된 특징을 모두 보유하고 있는 클래스를 기초 클래스라고 한다.기초 클래스보다 더 자세한 속성을 갖는 클래스를 파생 클래스라고 한다.파생 클래스는 기초 클래스의 특성을 모두 포함하고 있으며 자신의 고유 특성을 추가로 갖고 있을 수 있다.파생 클래스를 표현할 때 기초 클래스의 특성들을 반복하여 표현할 필요가 없다.상속은 프로그램의 비슷한 특성..
1. 스코프블록복합 명령문이라고도 불리는 블록은 마치 한 명령문같이 보이는 명령문의 그룹이다.블록은 { 기호로 시작하고, } 기호로 끝나며, 기호 사이에 실행할 명령문을 배치한다.블록은 단일 명령문이 허용되는 모든 위치에서 사용할 수 있고, 블록 끝에는 세미콜론(;)이 필요하지 않다.int add(int x, int y){ // 시작 블록 (start a block) return x + y;} // 끝 블록 (end a block)int main(){ // start a block // 여러 명령문 (multiple statements) int value(0); add(3, 4); return 0;} // end a block (no semicolon)블록은 다른 블록 내부에 ..
연산자연산자의 우선 순위 및 결합 방향산술 연산자사칙 연산자나머지 연산자증감 연산자증감 연산자와 사이드 이펙트전위 증감 연산자는 값을 증가 또는 감소시킨 후에 값을 평가한다.int x = 5;int y = ++x; // x = 6, y =6후위 증감 연산자를 사용하는 경우엔 컴파일러가 변수의 임시 복사본을 만든 후에 원래 변수를 증가 또는 감소시키고 변수의 임시 복사본을 평가한다.평가가 종료되면 임시 복사본을 삭제시킨다.int x = 5;int y = x++; // x = 6, y = 5int x = 5, y = 5;std::cout 사이드 이펙트사이드 이펙트란, 함수나 표현식이 자신의 본래 목적(값 반환) 외에 프로그램의 상태나 외부 세계에 영향을 미치는 모든 행위를 말한다.즉, 사이드 이펙트란 함수 ..