ACABERRY와 함께하는 프로그래밍 공부 객체지향 OOP에 대한 정리 나무위키 https://namu.wiki/w/%EA%B0%9D%EC%B2%B4%20%EC%A7%80%ED%96%A5%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D 1) 프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라, 프로그램을 수많은 '객체'라는 기본 단위로 나누고 이 객체들의 상호작용으로 서술하는 방식이다. 2) 이 OOP가 나오게 된 배경은 절차적프로그래밍의 순서도로 나타낼수 없는 전략시뮬. 이를 절차적코드로 만들시 스파게티 코드( 함수/메소드 기능비대, if-else얽힘, 콜백 3~5단계초과, 다중루프, 포인터남용 등 )로밖에 구현 불가능한 내용을 중복코드 / 입력 / 계산 ..
ACABERRY와 함께하는 프로그래밍 공부 C++과 C#의 차이점? 누군가가 이렇게 물어본다면 여러분들은 어떻게 대답하실건가요?아래의 참고자료들을 참조하여 자신이 '특징적이다'라고 생각하는 부분을 주로 답변하게될 것 같아요, 참조해서 유추해보면 좋을 것 같아요. MSDN https://docs.microsoft.com/ko-kr/previous-versions/visualstudio/visual-studio-2008/yyaad03b(v=vs.90) 만들어진 배경과 역사 C C++ JAVA 이 두 언어의 가장 큰 차이점은 C, C++은 소스레벨의 코딩이 가능하고, Java, C#는 클래스는 동적으로 움직이며 클래스 기반의 언어(?) 역사를 알고( 프로그램 언어의 탄생은 C -> C++, Java, C# 순..
내부 메모리 단편화 - 할당될 크기에 비해 실제 할당된 단위자원의 크기가 커서 해당 단위 자원 내부에 사용하지 않는 메모리 공간이 발생 할 때를 말한다.외부 메모리 단편화 - 총 할당 가능한 자원의 합에 비해 실제 할당 할 수 있는 자원의 크기가 작은 상태를 말한다. 해결방법 메모리 압축 (Memory Compaction) - 여러 곳에 분산되어 있는 단편화된 메모리공간들을 결합하여 하나의 큰 공간으로 만드는 것이다. (디스크조각모음) - CPU가 몇 개의 바이트씩 읽어오고 다시 쓰는 방법으로 반복해서 재배치 하기 떄문에 CPU 처리시간이 증가하여 처리기 효율이 크게 감소한다. 메모리 통합 (Memory Coalescint) - 단편화가 발생된 공간에서 인접해있는 다른 단편화 공간들을 하나로 통합시켜 큰..
OOP - 포함, 상속, 오버라이딩 1. 클래스의 재활용기존의 클래스를 재활용하는 방법에는 “상속"과 ”포함“이 있다.사람이라는 클래스가 있다고 하자. 현재 우리가 필요로 하는 클래스는 학생이라는 클래스인데 학생클래스는 사람클래스가 가지는 모든 멤버를 가져야 한다고 한다면 복사를 해서 사용한다. 여기서 코드의 중복이 생겨나고 사람클래스의 변경이 생기면 학생 클래스도 수정해야 하므로 유지보수에 비용이 들어갈 수 있다. ===> 상속과 포함을 사용함으로써 이런 코드의 중복을 방지하고 코드를 변경하고 싶으면 한 군데만 변경하면 나머지 모든 클래스의 코드가 변경되니 프로그램의 생산성이나 유지보수에 도움이 됨.Person{int age;} ① 포함Student클래스는 멤버 변수로 Person데이타 변수를 가진다...
상속 오버라이딩 함수 vs 가상 함수 (Overriding vs pure virtual function) 머릿속에 상속함수는 무엇이고, 가상함수는 무엇이다라고 정의는 되어있었지만, 둘이 어떻게 다른지 확실히 알지는 못했었다. 두개가 어떻게 다른지 말해보라고 하면, 말하기도 쉽지 않았다. (실제 코딩 인터뷰에서 이 문제를 물어봐서 당황하기도 했었어서) 정리하기 위해서 이 글을 쓴다. 1. 상속 상속이라는 개념은 오버라이딩으로 설명이 되는데, 클래스 A에 선언된 함수 func()가 있다고 가정하자. 그리고 클래스 B는 A로부터 파생된 함수, 즉 상속된 함수이고, 같은 함수 func()가 정의 된다. 다시 말해서, 기본(parent)클래스에서 정의된 멤버 함수를 파생된(child)클래스에서 같은형태로 선언하는..
C++/소멸자에 virtual을 쓰는 이유 먼저 상속을 받은 클래스의 생성과 소멸 과정을 보자. 생성자는 부모 클래스의 생성자가 먼저 불려지고, 소멸자는 자식 클래스의 소멸자가 먼저 불려지고 나서 부모 클래스의 소멸자가 불려진다. 그런데 다형성 이용을 위해 부모 클래스의 포인터로부터 자식 클래스를 호출할 때, 가상 함수로 정의되지 않은 자식 클래스의 오버라이딩된 함수를 호출하면 부모 클래스의 멤버 함수가 호출된다. 소멸자도 자식 클래스에서 오버라이딩된 함수라고 볼 수 있기 때문에 만약 부모 포인터로 객체를 삭제하면 부모 클래스의 소멸자가 호출된다. 따라서 소멸자를 가상 함수로 선언하지 않으면 이 경우 자식 클래스의 소멸자는 결코 호출되지 않는다. 가상 함수 키워드 virtual이 사용되었다면 이것은 자식..