C++/C++ CS 개념 11

OSI 참조 모델

OSI 참조 모델 - 다른 시스템 간의 원활한 통신을 위해 ISO(국제표준화기구)에서 제안한 통신 규약 하위 계층 : 물리 계층 -> 데이터 링크 계층 -> 네트워크 계층 상위 계층 : 전송 계층 -> 세션 계층 -> 표현 계층 -> 응용 계층 1. 물리 계층 (Physical Layer) - 전송에 필요한 두 장치 간의 실제 접속과 절단 등 기계적, 전기적, 기능적, 절차적 특성에 대한 규칙을 정의함 2. 데이터 링크 계층 (Data Link Layer) - 두 개의 인접한 개방 시스템들 간에 신뢰성 있고 효율적인 정보 전송을 할 수 있도록 시스템 간 연결 설정과 유지 및 종료를 담당 - 송신 측과 수신 측의 속도 차이를 해결하기 위한 흐름 제어 기능 - 프레임의 시작과 끝을 구분하기 위한 프레임의 동..

C++/C++ CS 개념 2023.11.13

IP

IP 주소 - 인터넷에 연결된 모든 컴퓨터 자원을 구분하기 위한 고유한 주소 - 숫자로 8비트씩 4부분, 총 32비트로 구성 1. A Class - 국가나 대형 통신망에 사용 (0~127) - 2^24 = 16,777,216개의 호스트 사용 가능 2. B Class - 중대형 통신망에 사용 (128~191) - 2^16 = 65,536개의 호스트 사용 가능 3. C Class - 소규모 통신망에 사용 (192~223) - 2^8 = 256개의 호스트 사용 가능 4. D Class - 멀티캐스트용으로 사용 (224~239) 5. E Class - 실험적 주소이며 공용되지 않음 서브네팅 (Subnetting) - 할당된 네트워크 주소를 다시 여러 개의 작은 네트워크로 나누어 사용하는 것 - 4바이트의 IP ..

C++/C++ CS 개념 2023.11.11

형상관리, 빅오 표기법

형상 관리 (SCM : Software Configuration Management) - 소프트웨어의 개발 과정에서 소프트웨어의 변경 사항을 관리하기 위해 개발된 일련의 활동 1. 기능 (1) 형상 식별 - 형상 관리 대상에 이름과 관리 번호를 부여하고, 계층 구조로 구분하여 수정 및 추적이 용이하도록 하는 작업 (2) 버전 제어 - 소프트웨어 업그레이드나 유지 보수 과정에서 생성된 다른 버전의 형상 항목을 관리하고, 이를 위해 특정 절차와 도구를 결합시키는 작업 (3) 형상 통제 - 식별된 형상 항목에 대한 변경 요구를 검토하여 현재의 기준선이 잘 반영될 수 있도록 조정하는 작업 (4) 형상 감사 - 기준선의 무결성을 평가하기 위해 확인, 검증, 검열 과정을 통해 공식적으로 승인하는 작업 (5) 형상 ..

C++/C++ CS 개념 2023.11.11

모듈

모듈 - 모듈화를 통해 분리된 시스템의 각 기능으로, 서브루틴, 서브시스템, 소프트웨어 내의 프로그램, 작업 단위 등을 의미한다. - 모듈의 기능적 독립성은 소프트웨어를 구성하는 각 모듈의 기능이 서로 독립됨을 의미 - 모듈의 독립성은 결합도와 응집도에 의해 측정 모듈화 - 소프트웨어의 성능을 향상시키거나 시스템의 수정 및 재사용, 유지 관리 등을 위해 시스템의 기능들을 모듈 단위로 분해하는 것을 의미 모듈의 독립성 - 모듈이 다른 모듈과의 과도한 상호작용을 배제하고 하나의 기능만을 수행함으로써 이루어지며, 독립성을 높이려면 모듈의 결합도는 약하게, 응집도는 강하게, 모듈의 크기는 작게 만들어야 한다. 결합도 - 모듈 간에 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계 - 결합도가 약할수록 품질이 ..

C++/C++ CS 개념 2023.11.11

디자인 패턴

장점 - 범용적인 코딩 스타일로 인해 구조 파악이 용이 - 객체지향 설계 및 구현의 생산성을 높이는 적합 - 검증된 구조의 재사용을 통한 개발 시간과 비용이 절약 - 개발자 간의 원활한 의사소통이 가능 - 설계 변경 요청에 대한 유연한 대처가 가능 단점 - 초기 투자 비용이 부담 - 객체지향을 기반으로 한 설계와 구현을 다루므로 다른 기반의 애플리케이션 개발에는 적합하지 않다. 1. 생성 패턴 - 객체의 생성과 참조 과정을 캡슐화 하여 객체가 생성되거나 변경되어도 프로그램의 구조에 영향을 크게 받지 않도록 하여 프로그램에 유연성을 더해준다. (1) 추상 팩토리 (Abstract Factory) - 구체적인 클래스에 의존하지 않고, 인터페이스를 통해 서로 연관, 의존하는 객체들의 그룹으로 생성하여 추상적으..

C++/C++ CS 개념 2023.11.09

생성자, 소멸자, 대입 연산자

생성자 : 새로운 객체를 메모리에 만드는 데 필요한 과정을 제어하고 객체의 초기화를 맡는 함수 소멸자 : 객체를 없앰과 동시에 그 객체가 메모리에서 적절히 사라질 수 있도록 하는 과정을 제어하는 함수 대입 연산자 : 기존의 객체에 다른 개체의 값을 줄 때 사용하는 함수입니다. C++의 어떤 멤버 함수는 클래스 안에 직접 선언해 넣지 않으면 컴파일러가 저절로 선언해 주도록 되어 있다. - 복사 생성자 - 복사 대입 연산자 - 소멸자 이때 컴파일러가 만드는 함수의 형태는 모두 기본형 생성자조차도 선언되어 있지 않으면 역시 컴파일러가 대신 기본 생성자 선언 이들은 모두 public 멤버이며 inline 함수이다. 컴파일러가 만드는 함수가 하는 일 ? - 기본 생성자와 소멸자가 하는 일은 일차적으로 컴파일러에게..

C++/C++ CS 개념 2023.11.08

객체지향 (Object-Oriented)

객체지향 : 소프트웨어의 각 요소들을 객체로 만든 후, 객체들을 조립해서 소프트웨어를 개발하는 기법 - 소프트웨어의 재사용 및 확장이 용이하여 고품질의 소프트웨어를 빠르게 개발할 수 있고 유지보수가 쉽다 1. 객체지향의 구성 요소 (1) 객체 (Object) - 데이터와 이를 처리하기 위한 함수를 묶어 놓은 소프트웨어 모듈 - 데이터 : 객체가 가지고 있는 정보로, 속성이나 상태, 분류 등 (2) 클래스 (Class) - 공통된 속성과 연산을 갖는 객체의 집합 - 각각의 객체들이 갖는 속성과 연산을 정의하고 있는 틀 - 클래스에 속한 각각의 객체를 인스턴스라고 한다. (3) 메시지 (Message) - 객체들 간의 상호작용을 하는데 사용되는 수단으로, 객체에게 어떤 행위를 하도록 지시하는 명령 또는 요구..

C++/C++ CS 개념 2023.11.08

아키텍처 패턴

아키텍처 패턴 : 아키텍처를 설계할 때 참조할 수 있는 전형적인 해결 방식 - 소프트웨어 시스템의 구조를 구성하기 위한 기본적인 윤곽을 제시 아키텍처 : 서비스의 동작 원리를 나타내는 것 1. 레이어 패턴 (Layers pattern) (1) 시스템을 계층으로 구분하여 구성하는 고전적인 방법의 패턴 (2) 하위 계층은 상위 계층에 대한 서비스 제공자가 되고, 상위 계층은 하위 계층의 클라이언트가 된다. (3) 서로 마주보는 두 개의 계층 사이에서만 상호작용이 이루어진다. 2. 클라이언트-서버 패턴 (Client-Server pattern) (1) 하나의 서버 컴포넌트와 다수의 클라이언트 컴포넌트로 구성되는 패턴이다. (2) 사용자가 클라이언트를 통해 서버에 요청하면 클라이언트가 응답을 받아 사용자에게 제..

C++/C++ CS 개념 2023.11.08

소프트웨어 생명 주기 (Software Life Cycle)

소프트웨어 생명 주기 : 소프트웨어를 개발하기 위한 설계, 운용, 유지보수 등의 과정을 각 단계별로 나눈 것 1. 폭포수 모형 (Waterfall Model) (1) 이전 단계로 돌아갈 수 없다는 전제하에 각 단계를 확실히 매듭짓고 그 결과를 철저하게 검토하여 승인 과정을 거친 후에 다음 단계를 진행하는 개발 방법론 (2) 고전적 생명 주기 모형 2. 프로토타입 모형 (Prototype Model) (1) 사용자의 요구사항을 파악하기 위해 실제 개발될 소프트웨어에 대한 견본품을 만들어 최종 결과물을 예측하는 모형 (2) 견본품은 사용자와 시스템 사이의 인터페이스에 중점을 두어 개발 (3) 원형 모형 3. 나선형 모형(Spiral Model) (1) 점진적 모형 (2) 나선을 따라 돌듯이 여러 번의 소프트..

C++/C++ CS 개념 2023.11.07

const

1. const (1) 의미적인 제약 -> const 키워드가 붙은 객체는 외부 변경을 불가능하게 한다. (2) 소스 코드 수준에서 붙인다는 점과 컴파일러가 이 제약을 단단히 지켜준다는 점 (3) 클래스 바깥에서는 전역 혹은 네임스페이스 유효범위의 상수를 선언(정의)하는 데 쓸 수 있다. (4) 파일, 함수, 블록 유효범위에서 static으로 선언한 객체에도 const를 붙일 수 있다. (5) 클래스 내부 -> 정적 멤버 및 비정적 데이터 멤버 모두를 상수로 선언할 수 있다. (6) 포인터인 경우 -> 기본적으로 포인터 자체를 상수로, 혹은 포인터가 가리키는 데이터를 상수로 지정할 수 있는데, 둘 다 지정할 수도 있고 아무것도 지정하지 않을 수도 있다. - const 키워드가 *표의 왼쪽에 있으면 포인터..

C++/C++ CS 개념 2023.10.30