프로그래밍 언어 110

인터페이스를 사용하기 쉽게 설계하기 (2)

필요한 기능 빼먹지 않기필요한 기능을 빼먹지 않는 원칙은두 단계로 적용한다.첫 번째는 클라이언트가 필요로 하는 동작은모두 인터페이스에 추가해야한다.간혹 포함시켜야할 지 불분명한 기능이 있다.이럴 때는 자신이 작성한 코드를 클라이언트가이용하는 모든 경우의 수를 따져봐야한다.인터페이스를 설계할 때 한 가지 관점만 고려하면다른 방식으로 바라보는 클라이언트가 필요한 기능을 놓칠 수 있다.물론 가능한 모든 경우의 인터페이스를 설계한다는 것이불가능에 가깝다.두 번째 인터페이스에 최대한 많은 기능을 구현하는 것이다.라이브러리에서 해결할 수 있거나그러나,인터페이스를 다르게 설계하면 알 수 있는 정보를클라이언트 코드에서 지정하도록 구현하면 안된다.또한 라이브러리의 결과를 합치는 데필요한 일을 클라이언트에게 떠넘기면 안된다.

인터페이스를 사용하기 쉽계 설계하기 (1)

직관적으로 구현하기인터페이스는 사용하기 쉽습니다.이 말은 쉽게 할 수 있도록 구성해야 하지 않을 것입니다.인을 간단하고 간단하게 사용하기 쉽습니다.여러분이 일하는 활동을 하는 데필요한 데이터 구축 하나를 적용하기 위해소스코드를 따라가거나,원하는 기능을 구현하는 코드가 너무 중요합니다.사용하기 쉬운 터터를 개발하기 가장 좋은 방법은사용자에게 있어서의 기준을 결정하는 것입니다.과거에 사용된 것과 유사한 인터페이스는 파악하기 쉽고 즉각적으로 활동할 수 있습니다.기분 나쁘게 행동할 가능성이 있습니다. 늘 사용자의 입장에서 인터페이스를 고려해야 한다.상식에 맞는지, 사용자가 충분히 예상할 수 있는지 따져봐야한다.물론 혁신도 중요하지만혁신은 인터페이스가 아닌 내부 구현 기술에서 추구해야 한다.예를 들어 소비자는일부..

인터페이스 목적 별 용도 고려하기

인터페이스 설계 유의사항1. 인터페이스 목적 별 용도 고려하기2. 인터페이스를 사용하기 쉽게 설계하기 - 익숙한 방식 따르기3. 인터페이스를 사용하기 쉽게 설계하기 - 필요한 기능 빼먹지 않기4. 인터페이스를 사용하기 쉽게 설계하기 - 군더더기 없는 인터페이스 제공하기5. 인터페이스를 사용하기 쉽게 설계하기 - 문서와 주석 제공하기APIAPI는 제품의 기능을 다양한 용도로 활용하거나그 제품의 기능을 확장하기 위해외부에 제공하는 인터페이스이다.내부 인터페이스가 일반 계약서라면API는 법전에 명시된 법률에 가깝다.일단 외부에서 사용자가 우리가 제작한 API를 사용하기 시작하면,특별히 도움되는 기능을 새로 추가하지 않는 한변경하지 않는 것이 좋다.따라서 API를 결정하기 전에 신중하게 설계하고고객이 원하는 바..

STL Map

map이란?맵은 딕셔너리 구조를 가진다.키를 통해서 값을 가져온다. 키와 값을 쌍으로 저장한다.C++ map은 자동 정렬되는 컨테이너이다.이진 탐색 트리 오름차순 기반이다. // 맵만들기 예시int mian(){ std::map simpleScoreMap; // 삽입 방법 1 simpleScoreMap.insert(std::pair("Mocha", 100)); simpleScoreMap.insert(std::pair("Coco", 50)); // 삽입 방법 2 || 이 방법은 접근 방법이기도 하다 simpleScoreMap["Mocha"] = 0; std::cout 맵도 복사 생성자가 있을까? 있다.맵의 복사 생성자 작성법// 복사 생성자를 ..

쓰레드 기본 사용법

멀티스레드 프로그래밍은 멀티프로세서가 장착된 컴퓨터 시스템에서 중요한 기법이다.멀티스레드 프로그래밍을 이용하면 시스템에 있는 여러 프로세서 유닛을병렬로 사용하는 프로그램을 작성할 수 있다.시스템에 프로세서 유닛이 장착되는 방식은 다양하다.독립적인 CPU 프로세서 칩이 여러 개 달려 있을 수 있고,한 프로세스 칩 안에 코어라 부르는 독립 CPU가 여러 개 있을 수 있고,또 어떤 시스템은 두 가지 방식이 혼합되기도 한다.이렇게 프로세스 유닛이 여러 개 달린 프로세서를 흔히 멀티코어 프로세서라 부른다.사실 이렇게 프로세서가 여러 개 달린 시스템이 나온지 꽤 오래되었지만이제는 서버부터 개인용 컴퓨터, 심지어 스마트폰에 이르기까지 거의 모든 시스템이멀티코어 프로세서를 사용한다.이처럼 멀티코어 프로세서가 보변화되었..

decltype과 템플릿

decltype의 개요decltype 형식 지정자는 지정된 식의 형식을 생성한다.즉 쉽게 말해 받아온 개체 타입을 그대로 개체를 생성해주는 키워드이다. decltype의 일반적 용례 템플릿decltype 형식 지정자는 auto 키워드와함께 템플릿 라이브러리를 작성하는 개발자에게 주로 유용하다. decltype 및 autoC++14에서는 후행 반환 형식 없이 decltype(auto)를 사용하여반환 형식이 템플릿 인수에 따라 달라지는함수 템플릿을 선언할 수 있다. C++11에서는 auto 키워드와 함께 후행 반환 형식에 대한decltype 형식 지정자를 사용하여 반환 형식이해당 템플릿 인수의 형식에 종속되는 함수 템플릿을 선언할 수 있다. 예를 들어, 함수 템플릿의 반환 형식이템플릿 인수의 형식에 종속되는..

STL의 vector, push_back()과 emplace_back()

push_back , emplace_back 둘의 공통점push_back , emplace_back은두 함수 모두 vector컨테이너가 주어졌을 때 한 칸을 늘리고 해당 값을 넣어주게 된다. 둘의 차이점그러나 내부적으로 동작하는 것은 조금 다른데, push_back의 경우push_back의 경우 메모리를 이동하거나 임시 객체를 이용하여임시객체가 생성되고 넣어준 뒤에 임시 객체가 삭제되는 호출이 있다.-> 복사의 개념 emplace_back의 경우대신 emplace_back은 받은 인수를 이용해 내부에서 생성자를 통한 객체 생성 후추가를 하기 때문에 임시 객체의 생성, 파괴가 없어서 push_back보다 효율적일 수 있다.-> 이동의 개념

Casting - 왜 C스타일 캐스팅은 4개로 나뉘었을까?

캐스팅(형 변환, Casting)캐스팅은 형변환 하는 것을 말한다. 암시적(Implicit)캐스팅프로그래머가 명시적으로 형 변환을 안할 경우에,알아서 컴파일러가 형변환을 해준다.단, 형변환이 허용되는 변환일 때에만 작동한다. 당연히, 프로그래머가 명시적 형변환을 할 때에는컴파일러가 개입하지 않으므로 암시적 캐스팅은 일어나지 않는다. 예시 코드int number1 = 3;long number2 = number1;  명시적(Explicit) 캐스팅 C++ 캐스팅의 종류static_castconst_castdynamic_castreinterpret_cast C 스타일 캐스팅이 C++에서 4가지로 나뉜 이유int score = (int)someVariable; 위 코드는 대체 무얼 할까? 위 코드는 C++ 스타..

인터페이스

C++ 에는 인터페이스가 없다.따라서 추상클래스로 인터페이스를 구상한다.근데 추상클래스와 인터페이스는 어떻게 구분할까?Interface와 abstract의 차이는 Interface는 함수만 있다는 것이다.또한 인터페이스는 다음과 같이 정의한다. // IFlyable.hclass IFlyable{public: virtual void Fly = 0}; 인터페이스는 클래스 명 앞에 I라는 대문자를 붙여준다.이는 인터페이스임을 명확하게 하기 위해서이다. 또한 함수는 순수가상함수로 만들어준다.인터페이스는 다중 상속을 허용한다.  인터페이스 정리 인터페이스C++은 자체적으로 인터페이스를 지원하지 않는다.순수 추상 클래스를 사용해서 Java의 인터페이스를 흉내낸다순수 가상 함수만 가진다멤버 변수는 없다. 근데 C++..

가상 소멸자와 비 가상 소멸자

비 가상 소멸자가상 소멸자를 안쓰는 경우는 어떻게 될까?가상 소멸자가 뭐길래, 가상 생성자는 없으면서가상 소멸자가 메모리 누수를 방지한다고 할까?왜 소멸자에 가상 키워드를 넣어야할까? 그에 대한 예시를 다음과 같이 추상화한 그림을 통해 알아보자. myCat이 delete될 경우(virtual 소멸자가 아닌 경우) 왜 그럴까?전에 정리한 가상 테이블을 기억해내면 금방 왜 그런지 알 수 있다. 만약 virtual 키워드를 붙였을 경우 즉 자신의 실 자료형에 맞는 소멸자를 호출하기 위함이다. 가상 소멸자는 매우 중요하다.반드시 유의할 점은,모든 클래스마다 가상 소멸자를 꼭 써줘야 한다.근데 가상함수 느리다면서가상 소멸자가 있는 클래스를 상속받지 않아도 이러라고? 싶을 수 있다. 근데 업캐스팅 해서 쓸 때,부모..