목록전체 글 (67)
devseop08 님의 블로그
객체지향 설계란 올바른 객체에서 올바른 책임을 할당하면서 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 활동이다.책임을 할당하는 작업은 응집도와 결합도 같은 설계 품질과 깊이 연관돼 있다.훌륭한 설계란 합리적인 비용 안에서 변경을 수용할 수 있는 구조를 만드는 것적절한 비용 안에서 쉽게 변경할 수 있는 설계는 응집도가 높고 서로 느슨하게 결합돼 있는 요소로 구성된다.합리적인 수준의 응집도와 결합도를 유지하기 위해서는 객체의 상태가 아니라 행동에 초점을 맞춰야 한다.좋은 설계와 나쁜 설계를 살펴보면서 통찰을 얻을 수 있다.영화 예매 시스템을 책임이 아닌 상태를 표현하는 데이터 중심의 설계를 살펴보고 객체지향적으로 설계한 구조와 어떤 차이점이 있는지 살펴본다.1. 데이터 중심의 영화 예매 시스템데이터 중..
객체지향 패러다임의 관점에서 핵심은 역할, 책임, 협력이다.객체지향의 본질은 협력하는 객체들의 공동체를 창조하는 것이다.객체지향 설계의 핵심은 협력을 구성하기 위해 적절한 객체를 찾고 적절할 책임을 할당하는 과정에서 드러난다.클래스와 상속은 책임과 협력이 어느 정도 자리를 잡은 후에 사용할 수 있는 구현 메커니즘일 뿐이다.객체지향에서 가장 중요한 것은 역할, 책임, 협력이다.1. 협력객체들이 애플리케이션의 기능을 구현하기 위해 수행하는 상호작용을 협력이라고 한다.객체가 협력에 참여하기 위해 수행하는 로직은 책임이라고 부른다.객체들이 협력 안에서 수행하는 책임들이 모여 객체가 수행하는 역할을 구성한다.협력객체지향 시스템은 자율적인 객체들의 공동체다.협력은 객체지향의 세계에서 기능을 구현할 수 있는 유일한 ..
8.1 원시 타입과 기본 타입Int, Boolean, Any 등의 기본 타입을 살펴보자.자바와 달리 코틀린은 원시 타입과 래퍼 타입을 구분하지 않는다.원시 타입과 래퍼 타입을 구분하지 않는 이유와 코틀린 내부에서 어떻게 기본 타입에 대한 래핑이 이루어지는지 살펴보자.Object, Void 등의 자바 타입과 코틀린 타입 간의 대응 관계를 살펴보자8.1.1 정수, 부동소수점 수, 문자, 불리언 값을 원시 타입으로 표현코틀린은 원시 타입과 래퍼 타입을 구분하지 않는다. 항상 같은 타입을 사용한다.컬렉션에 담는 래퍼 타입이 따로 있지 않다는 것이다.val i: Int = 1val list: List = listOf(1, 2, 3)래퍼 타입을 따로 구분하지 않으면 편리한데, 숫자 타입 등 원시 타입의 값에 대해 ..
생성자와 소멸자생성자처음 객체가 만들어졌을 때에는 그 객체의 초기 상태가 적절히 지정되어 있어야 한다.객체가 만들어질 때 반드시 수행해야 하는 초기화 과정을 실수로 누락하면 프로그램은 올바르게 동작하지 않는다. => 반드시 수행해야 하는 초기화 과정을 자동화할 필요가 있다.객체의 초기화 과정을 자동화하여 수행해줄 목적으로 사용하는 것이 바로 생성자이다생성자의 특징은 다음과 같다.특수한 멤버 함수객체가 생성될 때 자동으로 호출(객체 정의 시 자동 호출)초기화 목적으로 사용클래스와 동일한 이름을 갖는 멤버 함수반환 타입이 없다.오버로딩이 가능하다.생성자 선언(구현)class ClassName {public: // public으로 선언돼야지만 외부에서 해당 타입의 객체를 생성할 수 있다. Class..
1.영화 예매 시스템온라인 영화 예매 시스템 시나리오'영화'와 '상영'을 구분영화는 영화에 대한 기본정보를 표현(제목, 상영 시간, 가격)상영은 실제로 관람객들이 관람하는 사건을 표현(상영 일자, 시간, 순번)영화는 하루 중 다양한 시간대에 걸쳐 한 번 이상 상영될 수 있다.실제로 사람들이 예매하는 대상은 영화가 아니라 상영이다.특정한 조건을 만족하는 예매자는 요금을 할인받을 수 있다.할인액을 결정하는 두 가지 규칙할인 조건순서 조건: 상영 순번을 이용해 할인 여부 결정기간 조건: 영화 상영 시작 시간을 이용해 할인 여부 결정, 영화 상영 시간이 특정 기간에 포함되면 요금을 할인할인 정책(할인 방식)금액 할인 정책비율 할인 정책영화 별로 하나의 할인 정책만 적용 가능하고 그 하나의 할인 정책에 대해서 다..
식별자 규칙식별자의 첫 글자는 비숫자 문자를 사용할 수 있다. 비숫자 문자에는 영문 대소문자, 밑줄 문자('_')가 포함되며, C++11부터 다국어 문자도 포함된다.첫 글자 이후의 문자는 비숫자 문자와 숫자를 사용할 수 있다.표준에는 식별자 길이에 제한은 없다. 그러나 구현에 따라 식별에 사용되는 문자의 수가 정해지기도 한다.특수문자는 식별자에 포함될 수 없다. 다만 MS 비주얼 C++에서는 '$'를 사용할 수 있다.키워드는 식별자로 사용이 불가하다.auto 키워드변수를 선언할 때는 그 변수가 저장할 값의 타입(자료형)을 지정해야 한다.C++11의 자료형 추론을 활용하면 변수를 초기화하는 값의 타입에 맞게 변수를 선언할 수 있다.자료형 추론은 auto 키워드를 사용한다.auto i{10}; // int ..
클래스 파일의 구조모든 클래스 파일은 각각 하나의 클래스 또는 인터페이스를 정의한다.(단, package-info.class와 module-info.class는 특정 클래스나 인터페이스를 정의하지 않는다. 대신 해당 패키지와 모듈에 대한 정보를 기술)반면 클래스나 인터페이스를 꼭 파일에 담아둘 필요는 없다. 동적으로 생성하여 클래스 로더에 직접 제공할 수도 있다.일단 클래스나 인터페이스가 따라야 하는 형식을 '클래스 파일 형식'이라고 지칭하자클래스나 인터페이스가 디스크에 파일 형태로 존재할 필요는 없다.클래스 파일은 바이트를 하나의 단위로 하는 이진 스트림 집합체다.각 데이터 항목이 정해진 순서에 맞게, 구분 기호 없이 조밀하게 나열 => 클래스 파일 전체가 낭비되는 공간 없이 프로그램을 실행하는데 꼭 ..
티켓 판매 애플리케이션 구현실무가 우선실무적으로 기능이 돌아가도록 구현시킨 후 문제점을 찾아 해결하는 과정을 거쳐보자이론이 먼저 앞서기보단 실무에서의 코드를 개선해나가면서 좋은 설계에 대해 생각하고 알아갈 수 있다.설계 이론과 개념에 앞서 간단한 티켓 판매 프로그램을 구현해보는 것으로 시작하자티켓 판매 시나리오소극장의 입장 방식은 두 가지로 나뉜다.이벤트에 당첨되어 공연 무료 관람 티켓을 가진 경우공연 무료 관람 티켓이 없는 경우이벤트애 당첨되어 무료 관람 티켓을 가진 사람은 초대장을 티켓으로 교환한 후 입장이벤트에 당첨되지 않아 초대장이 없는 사람은 티켓을 현금을 주고 구매해야 입장 가능관람객을 입장시키기 전에 이벤트 당첨 여부를 확인해야 하고이벤트 당첨자가 아닌 경우엔 티켓을 판매한 후 입장시켜야 한..