728x90
- 1968년 독일 Garmisch에서 열린 첫 번째 NATO Software Engineering Conference에서 처음 사용
- 소프트웨어 규모의 대규모화, 복잡화에 따른 개발비용 증가
- 소프트웨어 가격 상승폭 증가
- 유지보수의 어려움과 개발 적체 현상 발생

- 대응방안
- 다양한 소프트웨어 공학 기법을 적극적으로 활용하는 것이 해결책이 될 수 있다.
- 객체 지향 프로그래밍
- 구조적 프로그래밍
- 통합 개발 환경
- 소프트웨어 콤포넌트화
- 소프트웨어 프로토타이핑
- 애자일(Agile) 개발 프로세스
- 버그 / 이슈 관리 시스템, 버전 관리 시스템
- 디자인 패턴
- 가비지 콜렉션
- 멀티스레드 프로그래밍
- 다양한 소프트웨어 공학 기법을 적극적으로 활용하는 것이 해결책이 될 수 있다.
- 구조적 프로그래밍 (structured programming)

* 구조적 프로그래밍의 단점
처리동작에 중점을 프로그램을 작성하였고
자료와 처리하는 동작이 나누어져 있어서 프로그램이 복잡해지면 디버깅 및 유지보수가 어려워진다.
객체지향언어 - Object oriented programming (OOP)
- 객체 지향 언어의 3가지 특징
- Encapsulation 캡슐화
- Inheritance 상속성
- Polymorphism 다형성
구조적 vs 객제지향

- 객체 지향 프로그래밍에선 자료와 처리동작을 하나로 묶어 다루는 객체(Objecr) 개념을 도입
클래스 (class)
- 각 객체의 속성을 정의하는 수단
- 클래스는 객체의 타입(Object Type)이다.
- 클래스는 유사한 객체들이 갖는 공통된 데이터와 함수들을 정의한 객체의 기본 규격(specification)이다.
- 클래스
- 객체들의 공통적인 특성을 모아 놓은 것
- 데이터와 데이터를 다루는 함수들을 모아 놓은 단위로서 자료 추상화를 지원
- 설계도
- 객체
- 객체는 자신이 상태와 행동, 이름을 가지고 있는 것
- 집
- 클래스 vs 객체 vs 인스턴스

* 객체는 구체적이고 실제 존재는 하나 (ex. 사람이면 누구인지 명확하게 나타나야함. 아주 구체적이어야 함. )
객체지향의 3가지 특징
ADT ( Abstraction Data Type) - 추상 자료형
- int, double 등이 아닌 사용자 정의 자료형
- C++에서는 클래스로 추상 자료형을 지원
- 자료에 대한 연산을 외부와 단절하는 개념
- 모든 자료와 연산이 한 묶음(class)으로 결합된다는 의미에서 자료의 캡슐화(encapsulation)라고도 한다.
- 캡슐화된 정보는 외부에 은닉(hidden)되어 있으며 외부에서 직접 접근할 수 없다.
- 자료 은폐(data hiding)
- 자료에 대한 수정/참조는 객체 내에서만 이루어진다.
- 자료구조 변경이나 연산 변경이 한정된 객체를 대상으로 하므로 프로그램의 유지보수가 쉽다.
- 객체는 자신의 자료와 연산만을 다룸으로써 외부의 간섭 및 에러로부터 보호된다.
상속 ( inheritance )
- 파생 클래스가 기본 클래스의 정의된 속성(자료 및 연산)을 상속받는 것
- 기본 클래스(base class), 부모 클래스(parent class, superclass) : 상위 클래스
- 파생 클래스(derived class), 자식 클래스(child class, subclass) : 상위 클래스의 속성을 상속받은 하위 클래스
다형성(polymorphism)
- 하나의 함수 이름(함수 중첩)이나 연산자(연산자 중첩)를 여러 목적으로 사용 하나의 함수 이름(함수 중첩)이나 연산자(연산자 중첩)를 여러 목적으로 사용한다.
약식 클래스 다이어그램(Class Diagram) 그리기

class 멤버의 접근 권한
- 전용(private)
- 해당 클래스 내부에서만 접근할 수 있다.
- 디폴트 속성으로 생략 가능
- 범용(public)
- 어디에서나 접근할 수 있다.
- 보호(protected)
- private이지만 자식에게는 접근할 수 있도록 한다.
#include <iostream>
class Man { //class명
private: //private속성, 클래스 안에서만 접근 가능
int age;
double weight;
public: //이 줄 이하로는 public속성, 밑에 있는 변수들은 어디에서든 접근 가능
int getAge() { //출력, 리턴
return age;
}
void setAge(int a) { //입력, 대입 //int a라는 매개변수를 받아서 a에 넣는 방식
age = a;
}
void run() {
std::cout << "달린다~~~\n";
}
};
int main()
{
Man kang;
kang.setAge(21); //kang.age는 private속성이기 때문에 사용 불가능. 대신 만들어둔 입력함수 setAge 사용
kang.run();
std::cout << kang.getAge() << std::endl; //괄호() 넣어주어야 함.
kang.run();
}
728x90
'C++' 카테고리의 다른 글
9-1 함수중첩 (0) | 2023.11.15 |
---|---|
6-1 클래스 (0) | 2023.10.18 |
5-1 구조체 (2) | 2023.10.11 |
4-2 함수(funtion)2 (0) | 2023.09.28 |
4-1 함수(funtion) (0) | 2023.09.27 |
728x90
- 1968년 독일 Garmisch에서 열린 첫 번째 NATO Software Engineering Conference에서 처음 사용
- 소프트웨어 규모의 대규모화, 복잡화에 따른 개발비용 증가
- 소프트웨어 가격 상승폭 증가
- 유지보수의 어려움과 개발 적체 현상 발생

- 대응방안
- 다양한 소프트웨어 공학 기법을 적극적으로 활용하는 것이 해결책이 될 수 있다.
- 객체 지향 프로그래밍
- 구조적 프로그래밍
- 통합 개발 환경
- 소프트웨어 콤포넌트화
- 소프트웨어 프로토타이핑
- 애자일(Agile) 개발 프로세스
- 버그 / 이슈 관리 시스템, 버전 관리 시스템
- 디자인 패턴
- 가비지 콜렉션
- 멀티스레드 프로그래밍
- 다양한 소프트웨어 공학 기법을 적극적으로 활용하는 것이 해결책이 될 수 있다.
- 구조적 프로그래밍 (structured programming)

* 구조적 프로그래밍의 단점
처리동작에 중점을 프로그램을 작성하였고
자료와 처리하는 동작이 나누어져 있어서 프로그램이 복잡해지면 디버깅 및 유지보수가 어려워진다.
객체지향언어 - Object oriented programming (OOP)
- 객체 지향 언어의 3가지 특징
- Encapsulation 캡슐화
- Inheritance 상속성
- Polymorphism 다형성
구조적 vs 객제지향

- 객체 지향 프로그래밍에선 자료와 처리동작을 하나로 묶어 다루는 객체(Objecr) 개념을 도입
클래스 (class)
- 각 객체의 속성을 정의하는 수단
- 클래스는 객체의 타입(Object Type)이다.
- 클래스는 유사한 객체들이 갖는 공통된 데이터와 함수들을 정의한 객체의 기본 규격(specification)이다.
- 클래스
- 객체들의 공통적인 특성을 모아 놓은 것
- 데이터와 데이터를 다루는 함수들을 모아 놓은 단위로서 자료 추상화를 지원
- 설계도
- 객체
- 객체는 자신이 상태와 행동, 이름을 가지고 있는 것
- 집
- 클래스 vs 객체 vs 인스턴스

* 객체는 구체적이고 실제 존재는 하나 (ex. 사람이면 누구인지 명확하게 나타나야함. 아주 구체적이어야 함. )
객체지향의 3가지 특징
ADT ( Abstraction Data Type) - 추상 자료형
- int, double 등이 아닌 사용자 정의 자료형
- C++에서는 클래스로 추상 자료형을 지원
- 자료에 대한 연산을 외부와 단절하는 개념
- 모든 자료와 연산이 한 묶음(class)으로 결합된다는 의미에서 자료의 캡슐화(encapsulation)라고도 한다.
- 캡슐화된 정보는 외부에 은닉(hidden)되어 있으며 외부에서 직접 접근할 수 없다.
- 자료 은폐(data hiding)
- 자료에 대한 수정/참조는 객체 내에서만 이루어진다.
- 자료구조 변경이나 연산 변경이 한정된 객체를 대상으로 하므로 프로그램의 유지보수가 쉽다.
- 객체는 자신의 자료와 연산만을 다룸으로써 외부의 간섭 및 에러로부터 보호된다.
상속 ( inheritance )
- 파생 클래스가 기본 클래스의 정의된 속성(자료 및 연산)을 상속받는 것
- 기본 클래스(base class), 부모 클래스(parent class, superclass) : 상위 클래스
- 파생 클래스(derived class), 자식 클래스(child class, subclass) : 상위 클래스의 속성을 상속받은 하위 클래스
다형성(polymorphism)
- 하나의 함수 이름(함수 중첩)이나 연산자(연산자 중첩)를 여러 목적으로 사용 하나의 함수 이름(함수 중첩)이나 연산자(연산자 중첩)를 여러 목적으로 사용한다.
약식 클래스 다이어그램(Class Diagram) 그리기

class 멤버의 접근 권한
- 전용(private)
- 해당 클래스 내부에서만 접근할 수 있다.
- 디폴트 속성으로 생략 가능
- 범용(public)
- 어디에서나 접근할 수 있다.
- 보호(protected)
- private이지만 자식에게는 접근할 수 있도록 한다.
#include <iostream>
class Man { //class명
private: //private속성, 클래스 안에서만 접근 가능
int age;
double weight;
public: //이 줄 이하로는 public속성, 밑에 있는 변수들은 어디에서든 접근 가능
int getAge() { //출력, 리턴
return age;
}
void setAge(int a) { //입력, 대입 //int a라는 매개변수를 받아서 a에 넣는 방식
age = a;
}
void run() {
std::cout << "달린다~~~\n";
}
};
int main()
{
Man kang;
kang.setAge(21); //kang.age는 private속성이기 때문에 사용 불가능. 대신 만들어둔 입력함수 setAge 사용
kang.run();
std::cout << kang.getAge() << std::endl; //괄호() 넣어주어야 함.
kang.run();
}
728x90
'C++' 카테고리의 다른 글
9-1 함수중첩 (0) | 2023.11.15 |
---|---|
6-1 클래스 (0) | 2023.10.18 |
5-1 구조체 (2) | 2023.10.11 |
4-2 함수(funtion)2 (0) | 2023.09.28 |
4-1 함수(funtion) (0) | 2023.09.27 |