issues
search
Chromatic-Hwi
/
C_PlusPlus_MFC
1
stars
0
forks
source link
내 정리
#7
Open
Chromatic-Hwi
opened
2 years ago
Chromatic-Hwi
commented
2 years ago
C++ 기본
C에 비해 변수 선언이 함수 내 어느 위치에 있더라도 상관없는 편리성을 가짐. (단적인 예로 for문의 조건 내에서 바로 선언도 가능.)
전역변수나 함수를 사용할 때 중복된 이름이더라도 처리하는 데이터 타입이 다르거나 입력 인자수가 다르다면, 컴파일시 자동으로 선택, 처리됨. = 오버로딩.
namespace : 함수폼으로 사용하면 됨.(근데 괄호는 없음.) 선언되는 데이터 타입도 구별됨.
using namespace : 이하 특별히 명시되지 않으면 해당 영역의 조건으로 사용 설정됨. 인접 중복 사용시 에러남.
스코프 연산자 = 영역 연산자 : ::을 붙여서 사용.
C++ 존재 자체가 유지 보수나 프로그램 설계, 관리를 용이하게 하기 위한 성격이 있음.
입출력
C++에서는 별도의 포멧팅을 지정해주지 않아도 데이터 타입에 맞게 처리됨.
출력
printf
-> cout << "내용"
cout 사용을 위해서는 #include
을 포함해줘야 하며, std(스탠다드) namespace를 가지고 있기 때문에 스코프 연산자로 선언해줘야 함.
줄바꿈도 std::cout << "word" << std::endl; 로 사용 가능.
C++ 에서는 shift 연산자가 객체를 재정의할 있도록 기능을 함.
입력
scanf()
-> std::cin >> "내용";
클래스 문법1
C에서는 클래스 객체 개념이 없는데 C++에서는 '객체' 개념이 있다. why?
C에도 구조체는 존재하지만 C++에서 더 많은 기능을 제공한다.
C++에서는 구조체명을 변수 선언 앞에 쓰지 않아도 컴파일러가 인정해준다.
C++에서는 구조체 대신 클래스를 더 많이 씀.
C++ 클래스에는 '접근 권한자'(=접근 제한자) 가 존재함.
private
외부에서 내부 데이터(=멤버)에 접근을 못 하게 함.
명시하지 않으면 private으로 간주함.
public
protected
멤버의 약자로 변수 앞에 'm_' 를 붙임.
'멤버 함수'를 통해 변수의 변화에 대한 경우를 처리하지 않고 전부 public 변수로만 사용하는 것은 객체지향적인 C++의 장점을 활용하지 못하는 것.
'클래스의 인스턴스화' = 클래스의 변수를 정의하는 것.
'클래스의 변수' = 인스턴스
'멤버함수' = 클래스 내부에서 정의된 함수 = 메소드
클래스(=객체) 문법2
생성자/파괴자의 이름이 고정인 이유는 생성자와 파괴자는 사용자가 호출하는 것이 아니라 컴파일러에 의해서 자동으로 호출되기 때문.
생성자/파괴자는 반드시 public 액세스 속성을 가져야 함. 주체가 자신이 아니기 때문에 외부 호출이 가능해야 함.
클래스 생성자
생성자의 이름은 클래스와 동일함. ex) 클래스가 MyClass라면 생성자는 MyClass()
클래스 파괴자
객체 생성과 형식은 동일하지만 이름 앞에 '~'를 붙여서 사용.
동적 메모리 할당
= 사용자가 프로그램이 실행되는 도중에 원하는 크기만큼 메모리를 할당하여 사용하는 것.
malloc, calloc, realloc의 3가지 함수와 메모리를 해제하는 free가 있다.
new 연산자
메모리 할당과 클래스 생성자 호출을 동시에 함.
delete 연산자
클래스도 해제하고, 클래스 파괴자도 호출함.
Afx_msg
=Application FrameWorks Message
해당 키워드는 클래스 마법사와 다른 함수들을 구분하기 위해서 제공되는 기능이다. (=가독성을 높이기 위함.)
디자인 패턴
싱글톤 (=Singleton)
정의 : 객체의 인스턴스가 오직 1개만 생성되는 패턴.
장점
효율적인 메모리 사용
: 최초 한번의 new 연산자를 통해 고정된 메모리 영역을 사용하기 때문에 추후 해당 객체에 접근 할 때 메모리 낭비를 방지.
클래스 간 데이터 공유 용이
: 싱글톤 인스턴스가 전역으로 사용되는 인스턴스 이기 때문의 다른 클래스의 인스턴스들이 접근하여 사용 가능. 하지만 동시 접근시 '동시성 문제'가 발생할 수 있으니 유의.
단점
패턴 구현 코드 자체가 양이 많다.
테스트하기 어렵다. 싱글톤 인스턴스는 자원을 공유하고 있기 때문에 테스트가 결정적으로 격리된 환경에서 수행되려면 매번 인스턴스의 상태를 초기화시켜줘야 한다.
의존 관계상 클라이언트가 구체 클래스에 의존하게 된다.
자식클래스를 만들 수 없다.
내부 상태를 변경하기 어렵다.
Chromatic-Hwi
commented
1 year ago
MFC 기능
대화상자 개체 선택 후 Ctrl 누르고 다른 개체 선택, 즉 복수 선택된 상태에서 Shift 도 같이 누르고 방향키로 옮기면 같이 정렬됨.
혹은 ~.rc 파일에서 수치 찾아서 직접 조정도 가능.
Chromatic-Hwi
commented
1 year ago
객체지향 5원칙 SOLID
단일 책임 원칙 (SRP : Single Responsibility Principle)
하나의 객체는 반드시 하나의 동작만의 책임을 갖는다.
모듈화가 약해질수록 다른 객체와의 의존/연관성은 크게 늘어나며, 책임이 많아질수록 해당 객체의 변경에 따른 영향도의 양과 범위가 매우 커진다.
1객체 = 1책임
개방-폐쇄 원칙 (OCP : Open-Closed Principle)
= '소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다'는 프로그래밍 원칙.
객체 지향 프로그래밍의 핵심 원칙.
두가지 속성
확장에 대해 열려 있다. : 애플리케이션의 요구 사항이 변경될 때, 이 변경에 맞게 새로운 동작을 추가해 모듈을 확장할 수 있다.
수정에 대해 닫혀 있다. 모듈의 소스 코드나 바이너리 코드를 수정하지 않아도 모듈의 기능을 확장하거나 변경할 수 있다.
리스코프 치환 원칙 (LSP : Liskov Subsitution Principle)
= 부모 객체와 이를 상속한 자식 객체가 있을 때 부모 객체를 호출하는 동작에서 자식 객체가 부모 객체를 완전히 대체할 수 있다는 원칙.
객체의 상속과 확장에서 무리하게 작업이 이뤄지거나, 객체의 의의와 어긋나는 잘못된 방향으로 상속되는 경우를 방지하기 위해 부모 객체의 방향을 온전히 따르도록 권고하는 원칙이다.
ex) 대표적으로 직사각형과 정사각형의 관계가 있다. 정사각형의 클래스 작동에서 직사각형을 온전히 정상적으로 상속받는다면 문제는 발생하지 않는다.
인터페이스 분리 원칙 (ISP : Interface Segregation Principle)
= 객체는 자신이 호출하지 않는 메소드에 의존하지 않아야한다.
만약 상속할 객체의 규모가 너무 크다면, 해당 객체의 메소드를 작은 인터페이스로 나누는 것이 좋다.
객체가 반드시 필요한 기능만을 가지도록 제한하는 원칙이다. 불필요한 기능의 상속/구현을 최대한 방지한다.
의존성 역전 원칙 (DIP : Dependency Inversion Principle)
= 객체는 저수준 모듈보다 고수준 모듈에 의존해야 한다.
모듈 구분
고수준 모듈 : 인터페이스와 같은 객체의 형태나 추상적 개념.
저수준 모듈 : 구현된 객체.
타 원칙을 준수할 경우 자연스레 지켜지는 하위호환격 규칙이라 중요도가 다소 떨어짐.
C++ 기본
입출력
출력
printf-> cout << "내용"입력
scanf()-> std::cin >> "내용";클래스 문법1
클래스(=객체) 문법2
동적 메모리 할당
Afx_msg
디자인 패턴
싱글톤 (=Singleton)