반응형

언어 자료구조 알고리즘/디딤돌 C++ 87

[C++] 27. 상속(일반화 관계) 개요

이제 OOP의 세 가지 주요 특징인 캡슐화, 상속, 다형성 중에 상속에 관해 알아볼게요. 상속은 다른 형식에 정의한 것을 마치 자신에서 정의한 것처럼 만드는 OOP의 특징입니다. 이러한 관계를 UML에서는 일반화 관계라 부르고 삼각형과 실선으로 관계를 표시합니다.일반화 관계는 “피아니스트는 음악가이다.”처럼 “이다.(is a)”로 나타낼 수 있는 관계입니다. 이 때 음악가처럼 일반적인 클래스를 기반 클래스라 말하며 피아니스트처럼 특수한 클래스를 파생 클래스라 부릅니다. C++에서 일반화 관계를 표현할 때 파생 문법을 이용합니다. 파생 문법은 파생 클래스를 정의할 때 기반 클래스를 다음처럼 나타냅니다. class Pianist : public Musician { }; 파생 클래스를 정의하면 기반 클래스에 ..

26. 캡슐화 최종 실습 - 구체적 구현

안녕하세요. 언제나 휴일, 언휴예요. 이번에는 캡슐화 최종 실습의 마지막 단계인 구체적 구현을 할 차례네요. 여러분께서는 먼저 구현한 후에 비교해 보세요. 이제 마지막으로 메서드를 구체적으로 구현합시다. 약속한 기능을 구현하면서 필요하면 별도의 메서드를 추가하세요. 여기에서 추가하는 메서드는 다른 형식에서 호출해서 사용하지 않는 메서드이므로 접근 지정을 private으로 지정하세요. 특히 멤버 필드의 값이 특정 범위 내에 있어서 필터링을 요구하면 설정자 메서드를 추가하여 구현하세요. 설정자 메서드에서 멤버 필드 값을 범위 내에서 조절하는 기능을 작성하면 버그를 만들 확률을 줄일 수 있습니다. 여러분께서 각자 구현해 본 후에 비교해 보세요. 여기에서는 지력, 체력, 스트레스, 연속으로 공부한 횟수는 범위가..

25. 캡슐화 최종 실습 - 테스트 코드 작성

안녕하세요. 언제나 휴일, 언휴예요. 이번에는 캡슐화 최종 실습 내용을 잘 작성했는지 확인하는 테스트 코드를 작성해 보기로 해요. 이제 시나리오를 보면서 테스트 코드를 작성하세요. 많은 곳에서 구현한 후에 테스트를 수행합니다. 그리고 테스트 코드도 테스트를 수행하기 바로 전에 작성하죠. 하지만 소프트웨어 테스트는 많은 신경을 써도 충분하지 않아 배포 후에 버그를 발견할 때도 많습니다. 소프트웨어 개발에서 잘못 작성한 것은 빨리 발견할수록 전체 비용을 줄어듭니다. 이러한 이유로 많은 연구에서 설계가 끝나면 구현 작업과 함께 시작할 것을 권하고 있습니다. 그리고 구현한 것을 빠르게 테스트를 할 수 있게 원하는 결과가 나왔는지 빠르게 판단할 수 있는 다양한 기법을 사용하고 있습니다. 여기에서는 테스트를 빠르게..

24. 캡슐화 최종 실습 - 멤버 메서드

안녕하세요. 언제나 휴일, 언휴예요. 이번에는 캡슐화 최종 실습 중에 멤버 메서드를 결정하세요. 여러분께서는 앞의 시나리오를 먼저 확인하여 멤버 필드를 결정한 후에 비교하세요. 이제 시나리오를 보면서 멤버 메서드를 결정하세요. 여기에서는 메서드 이름과 입력 매개 변수 리스트 및 반환 형식까지 결정하세요. 메서드 내부를 구체적으로 결정하는 부분은 테스트 코드 작성 후에 맨 마지막에 할 거예요. 먼저 혼자 해 본 후에 비교해 보세요. 먼저 다른 형식에서 접근 가능하게 접근 지정자 public:을 명시하세요. public: 생성할 때 이름을 입력받으므로 이를 반영하여 생성자 메서드를 결정하세요. Student(string name);//생성자 "공부하다.", "강의받다.", "잠자다.", "휴식하다.", "음..

23. 캡슐화 최종 실습 - 멤버 필드

안녕하세요. 언제나 휴일, 언휴예요. 이번에는 캡슐화 최종 실습 중에 멤버 필드를 결정해 보아요. 여러분께서는 앞의 시나리오를 먼저 확인하여 멤버 필드를 결정한 후에 비교해 보세요. 먼저 클래스 이름은 Student로 정할게요. 주민 번호는 변하지 않으므로 상수화 멤버 필드로 정의하세요. const int pn;//주민번호 주민 번호를 순차적으로 부여하기 위해 정적 멤버 필드로 가장 최근에 부여한 주민 번호가 필요하겠죠. static int last_pn;//가장 최근에 부여한 주민 번호 이름은 문자열로 정하면 되겠죠. string name;//이름 지력과 체력, 스트레스, 연속으로 공부한 횟수는 정수 형식으로 정의하면 되겠네요. int iq;//지력 int hp;//체력 int stress;//스트레스..

22. 캡슐화 최종 실습 - 시나리오

안녕하세요. 언제나 휴일, 언휴예요. 이번에는 캡슐화에서 다룬 내용을 이용하는 최종 실습을 해 보아요. 먼저 시나리오를 살펴보세요. 이번에는 단계별로 캡슐화를 실습해 보기로 해요. 여러분께서는 각 단계별로 먼저 직접 해 본 후에 비교하시기 바랍니다. 여기에서는 다음의 시나리오를 캡슐화 실습할 거예요. 다음 내용처럼 학생 데이터를 정의하시오. 1. 멤버 필드 주민번호: 순차적 부여 이름: 생성 시 전달 지력:100(최소 0, 최대 200) 체력: 100 (최소 0, 최대 200) 스트레스: 0 (최소 0, 최대 100) 연속으로 공부한 횟수: 0 (0,5), 공부를 하면 1 증가, 그 외의 행위를 하면 0으로 리셋, scnt로 부름 2. 명령할 수 있는 메서드(접근 지정이 public) 공부하다(체력 5소..

21. 캡슐화 실습2 - 학생

안녕하세요. 언제나 휴일, 언휴예요. 이번에는 시나리오를 클래스 다이어그램으로 변환한 후에 학생 클래스를 정의하는 캡슐화 실습을 해 보아요. 이번 실습은 학생 클래스를 캡슐화하는 실습입니다. 이번에는 시나리오를 보고 클래스 다이어그램을 작성한 후에 이를 구현해 보기로 해요. 1. 시나리오 학생은 생성할 때 학생 이름을 전달받습니다. 그리고 학생 번호는 순차적으로 부여합니다. 이 외에 학생의 국어, 영어, 수학 성적을 -1로 설정합니다. 학생을 생성한 후에는 학생의 국어, 영어, 수학 성적을 입력할 수 있습니다. 만약 학생 성적이 0에서 100을 벗어나면 -1로 설정합니다. 학생 이름과 번호, 각 과목의 성적과 총점 및 평균을 확인할 수 있습니다. 그리고 전체 학생 수를 확인할 수 있습니다. 그리고 학생 ..

20. 캡슐화 실습1 - 복소수

안녕하세요. 언제나 휴일, 언휴예요. 이번에는 클래스 다이어그램을 보면서 복소수 클래스를 정의하는 캡슐화 실습을 해 보아요. 캡슐화 실습을 해 보기로 해요. 이번에는 복소수 클래스 캡슐화예요. OOP 프로그래밍 할 때 구현 이전의 작업과 이후의 많은 작업을 CASE 도구로 UML로 표현할 때가 많아요. CASE 도구에는 Rose, Together, StarUML 등이 있습니다. 이 책에서는 CASE 도구를 사용하는 방법을 구체적으로 다루지는 않지만 많은 곳에서 UML로 작성한 다이어그램으로 실습할 내용 등을 소개할 거예요. UML로 클래스를 표현할 때는 세 칸으로 구성한 사각형으로 나타내요. 맨 위는 클래스 이름, 두 번째는 멤버 필드, 마지막 칸은 멤버 메서드를 표현합니다. 멤버 앞에 +(public)..

19. 특별한 멤버 this

안녕하세요. 언제나 휴일, 언휴예요. 이번에는 멤버 메서드에서 개체 자신을 의미하는 this 키워드를 알아보기로 해요. 개체의 메서드에서는 특별한 키워드 this를 사용할 수 있어요. this는 컴파일러에 의해 자동으로 캡슐화하는 정적 멤버입니다. this 키워드는 개체 자신을 나타내며 클래스 형식의 포인터입니다. this 키워드를 통해 접근할 수 있는 것은 클래스에 캡슐화한 멤버입니다. 따라서 멤버 필드와 지역 변수와 같은 이름이어도 this 키워드로 접근하면 멤버 필드를 접근합니다. 참고로 전역 변수와 지역 변수, 멤버 필드의 이름이 같을 때 전역 변수는 스코프 연산자(::)와 함께 사용할 수 있고 멤버 필드는 this 키워드와 함께 사용할 수 있습니다. 지역 변수는 변수명만 가지고 접근할 수 있죠...

18. 상수화 멤버

안녕하세요. 언제나 휴일, 언휴예요. 이번에는 const 키워드를 붙여 선언하는 상수화 멤버에 관해 알아보기로 해요. 클래스를 정의할 때 멤버 필드 앞에 const를 붙여서 선언한 것을 상수화 멤버라고 말합니다. 비 정적 상수화 멤버 필드는 생성자에서 반드시 초기화 기법으로 상수 값을 설정해야 합니다. 그리고 정적 상수화 멤버 필드는 클래스 외부 선언에서 초기값을 지정해야 합니다. class Student { const int num; //비 정적 상수화 멤버 필드 string name; int hp; static const int max_hp; //정적 상수화 멤버 필드 public: Student(int _num,string _name); }; const int Student::max_hp=200; ..

반응형