반응형

객체지향 10

Inheritance(상속) 그리고 Composition(구성)

다음은 언랭의 창시자 Joe Armstrong의 유명한 "고릴라 바나나 문제"의 인용입니다. I think the lack of reusability comes in object-oriented languages, not functional languages. Because the problem with object-oriented languages is they’ve got all this implicit environment that they carry around with them. You wanted a banana but what you got was a gorilla holding the banana and the entire jungle. https://www.johndcook.com/blo..

C++ Core Guidlines 함수

함수 정의 규칙: F.1: 의미있는 동작들을 "묶어서" 함수로 만들고 신중하게 이름을 지어라 F.2: 함수는 하나의 논리적 동작만 수행해야 한다 F.3: 함수는 간결하고 단순하게 유지하라 F.4: 함수가 컴파일 시간에 평가되어야 한다면 constexpr로 선언하라 F.5: 함수가 매우 짧고 수행시간이 중요하다면 inline으로 선언하라 F.6: 함수가 예외를 던지지 않는다면 noexcept로 선언하라 F.7: 보편성을 고려한다면, 스마트 포인터 대신에 T*나 T& 타입의 인자를 사용하라 F.8: 순수 함수를 선호하라 F.9: 사용되지 않는 인자는 이름이 없어야 한다 매개변수 전달 표현(parameter passing expression) 규칙: F.15: 정보를 전달 할 때 단순하고 관습적인 방법을 선호..

C++ Core Guidlines 인터페이스

Interface I.1: 인터페이스는 명확하게(explicit) 작성하라 I.2: const가 아닌 전역변수를 지양하라 I.3: 싱글톤 패턴을 지양하라 I.4: 인터페이스가 타입 시스템을 정확하고 엄격하게 준수하도록 만들어라 I.5: (하나라도 있다면) 사전 조건을 기술하라 I.6: 사전 조건을 표현하고 싶다면 Expects()를 사용하라 I.7: 사후 조건을 기술하라 I.8: 사후 조건을 표현하고 싶다면 Ensures()를 사용하라 I.9: 인터페이스가 템플릿이라면 컨셉(Concept)을 사용해서 매개 변수를 문서화하라 I.10: 요구된 작업의 수행 실패를 알리기 위해 예외를 사용하라 I.11: 원시 포인터(T*) 혹은 참조(T&)를 사용해 소유권을 전달하지 마라 I.12: null이 되어선 안되는 ..

C++ Core Guidlines 철학

P.1: 아이디어를 직접 코드로 표현하라 P.2: ISO 표준 C++로 작성하라 P.3: 의도를 표현하라 P.4: 이상적으로 프로그램은 정적으로 타입 안전해야 한다 P.5: 런타임 검사보다는 컴파일 타임 검사를 선호하라 P.6: 컴파일 타임에 검사할 수 없다면 런타임에 검사할 수 있어야 한다 P.7: 런타임 오류는 초기에 잡아라 P.8: 리소스가 새도록 하지 마라 P.9: 시간이나 공간을 낭비하지 마라 P.10: 변경 가능한 데이터보다 변경 불가능한 데이터를 더 자주 사용하라 P.11: 복잡한 생성과정은 캡슐하라 P.12: 지원 도구를 적절히 활용하라 P.13: 지원 라이브러리를 적절히 활용하라 아이디어를 직접 코드로 표현해라 첫번째 month 함수는 명확히 Month를 반환하도록 선언되어 있으며, Da..

C++ Core Guidlines 소개

C++ 표준 위원회에서 작성한 C++ 핵심 가이드 라인입니다. C++ Core Guidelines는 비야네 스트롭스트룹이 주축이 되어 작성되었으며 작성되고 있습니다. 이 가이드 라인의 목적은 사람들이 모던 C++을 효과적으로 사용하도록 돕는 것입니다. 원문 : https://github.com/isocpp/CppCoreGuidelines isocpp/CppCoreGuidelines The C++ Core Guidelines are a set of tried-and-true guidelines, rules, and best practices about coding in C++ - isocpp/CppCoreGuidelines github.com 한글화 : https://github.com/CppKorea/C..

SOLID 디자인 원칙

객체지향 프로그래밍에서, SOLID는 5가지 디자인 원칙들의 첫 글자들을 결합입니다. 이 원칙들은 소프트웨어 디자인을 더욱 이해하기 쉽고 유연하고 유지보수 하기 쉽게하는 원칙들입니다. Robert C. Martin에의해 제안된 여러 원리들중의 일부입니다. SOLID 원칙은 많은 객체 지향 디자인에 적용 되지만 agile development 또는 adaptive software development 와 같은 개발 방법론의 핵심 철학이 됩니다. SOLID - Wikipedia From Wikipedia, the free encyclopedia Jump to navigation Jump to search Object-oriented programming design principles This article..

Mixin 이란?

자신을 템플릿 인자로 하여 원하는 클래스들을 재조립하여 새로운 클래스 타입을 만들어요. 즉, 각각의 기능을 컴포넌트 처럼 구현하고 원하는 기능들을 조합하여 새로운 타입을 만들 수 있어요. 상속을 이용하면 원하지 않는 기능도 함께 포함되지만 Mixin을 이용하면 재활용성 높고 깔끔한 구조로 구현할 수 있어요. 아래의 예제 코드를 살표 보면 무슨 말인지 이해가 될거예요. Mixin으로 재조립하여 새로운 AnimatedWindow, ScrollableWindow, PerfectWindow라는 새로운 타입을 만들어서 사용하고 있어요. struct Window { ... }; template struct Animated : public Base { void Play() {}; }; template struct S..

이상한 재귀 템플릿 패턴(Curiously Recurring Template Pattern, CRTP)

이 패턴의 아이디어는 자기 자신을 부모 클래스의 템플릿 인자로 상속 받는 것이예요. 자기 자신을 템플릿 인자로 상속을 받는다고요? 헉~ 참 이상하면서도 자기 자신을 부모 클래스의 템플릿 인자로 하였으니 재귀 템플릿을 붙였나 봐요. 그래서 이상한 재귀 템플릿이라 부르죠. 작명참 잘 한 듯~ 줄여서 CRTP로 흔히 불러요. 저 또한 그냥 CRTP로 불러요. 이제 예제를 보면서 CRTP를 자세히 살펴 볼게요. vtable이 있어서 런타임에 부모 클래스 타입으로 메서드를 호출해도 실제로 인스턴싱된 자식의 메서드가 실행되지요. 이 기능이 바로 다형성이죠. 같은 클래스 내에서 메서드 오버로드, 상속 관계에서 오버라이 이 모두를 객체 지향의 다형성이라 합니다. 객체 지향 설계에서는 주로 상속 관계에서의 오버라이 구현..

구상(Concrete) 클래스, 추상(Abstract) 클래스

객체 지향 프로그래밍에서 클래스는 크게 두 분류로 구분하지요. 그것은 바로 구상(concrete) 클래스와 추상(abstract) 클래스이고요. 객체 지향 설계에서 이 두 클래스 구분은 가장 기본적이고 중요한 개념입니다. C++, Java, C# 등의 객체 지향 언어 문법책에서는 추상 클래스, 인터페이스, 상속, 다형성 그리고 virtual table 등을 문법적으로 설명합니다. 문법적 설명과 동작을 이해하는 것이 우선시되고요. 불행히도 이러한 책들을 독파 했음에도 클래스는 크게 두 가지로 분류할 수 있는데 어떤 것이 있냐고 물어 보면 잘모르는 사람들이 많아요. 객체를 정의하는 것이 클래스이며 이 클래스를 스택 또는 힙 메모리에 생성을 하여 사용 하는데 이것을 인스턴싱이라 부릅니다. 인스턴싱 할 수 있는..

디자인 패턴 개요

프로그래밍을 공부하면서 "디자인 패턴"이라는 것을 한번쯤은 들어 봤을 거에요. 한번도 들어 보지 못했다면... 그리고 내가 전문 프로그래머가 될 것이라면 꼭 찾아봤으면 해요. 왜냐고요? 이것이 무엇인지 모르고 활용할 수도 없으면 결코 뛰어난 프로그래머의 반열에 들어 슬 수 없어요. 어떤 천재는 객체 지향 언어 문법책만을 보고 객체 지향 설계를 배울 필요도 없는 사람도 있을 수도 있겠지만... 난 22년을 프로그래머로 일했지만 단 한번도 이런 사람을 보지도 듣지도 못했거든요. 디자인 패턴은 무엇인가? "디자인 패턴"은 객체 지향 패러다음 관점으로 전문가들의 경험을 카탈로그 형식으로 기록한 객체 지향 설계 기법들이예요. 디자인 패턴의 중심에는 객체 지향 설계가 있어요. 객체 지향 언어는 프로그래밍 언어에서 ..

반응형