반응형

언제나 휴일 62

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; ..

17. 정적(static) 멤버

안녕하세요. 언제나 휴일, 언휴예요. 이번에는 static 키워드를 사용하여 선언하는 정적 멤버에 관해 알아보기로 해요. 멤버의 종류를 나누는 기준은 여러 기준이 있어요. 그 중에 하나가 해당 멤버가 개체의 멤버인지 혹은 형식의 멤버인지로 구분하는 거예요. 이러한 기준으로 구분할 때 형식의 멤버와 개체의 멤버로 구분할 수 있어요. 형식의 멤버는 static 키워드를 사용하여 선언해서 정적(static) 멤버라 부르고 개체의 멤버를 비정적 멤버라 불러요. C++에서 정적 멤버는 형식 정의 내에서 해당 멤버를 static 키워드를 붙여 선언합니다. 정적 멤버들은 개체마다 제공하는 멤버가 아니라 형식 내에 유일한 멤버예요. 학생을 생성할 때 학생의 일련번호를 차례대로 부여한다고 할 때 학생의 일련번호는 각각의..

16. 생성자, 소멸자

안녕하세요. 언제나 휴일, 언휴예요. 이번에는 개체를 생성할 때 수행하는 생성자와 소멸할 때 수행하는 소멸자를 알아보기로 해요. 이번에는 개체를 생성할 때 수행하는 생성자와 소멸할 때 수행하는 소멸자를 알아볼게요. 생성자는 개체를 생성할 때 수행할 기능을 정의하는 특별한 메서드입니다. 생성자는 반환 형식을 개발자가 정할 수 없으며 메서드 이름을 형식 이름과 같게 정의합니다. 그리고 소멸자는 개체를 소멸할 때 수행할 기능을 정의하는 특별한 메서드예요. 소멸자도 반환 형식을 개발자가 정할 수 없으며 메서드 이름은 ~형식 이름이예요. #pragma once //Student.h class Student { public: Student(void);//생성자 ~Student(void);//소멸자 }; C++ 언어..

15. 접근 지정자

안녕하세요. 언제나 휴일, 언휴예요. 이번에는 캡슐화에 관한 문법 중에 멤버의 가시성을 설정하는 접근 지정자를 살펴보아요. 이번에는 멤버의 가시성을 설정하는 접근 지정자에 관해 알아볼게요. C언어의 구조체는 모든 곳에서 모든 멤버를 접근할 수 있어요. 이러한 특징은 개발자가 멤버에 접근하기 쉬워서 구현하기 쉽게 생각할 수 있지만 시나리오에 맞게 데이터를 유지하는 것은 어려울 수 있어요. 예를 들어 설명할게요. 프로그램에서 이름, 번호, 아이큐를 멤버로 갖는 학생 형식이 있다고 가정합시다. 학생 개체는 생성할 때 이름과 번호를 부여하고 아이큐는 100으로 설정하기로 해요. 그리고 학생이 공부하면 아이큐가 공부한 시간만큼 증가하게 만들거예요. 단 아이큐는 300을 넘지 않게 하기로 해요. 그런데 학생 개체를..

14. 캡슐화 개요

안녕하세요. 언제나 휴일, 언휴예요. 이번에는 OOP의 특징 중에 첫 번째로 캡슐화에 대해 간략하게 알아보기로 해요. 이제 C++언어에서 캡슐화에 관한 사항을 알아보기로 해요. 캡슐화는 여러 개의 멤버를 하나의 형식으로 묶는 과정을 말합니다. C언어에서는 구조체를 이용하여 캡슐화를 했었죠. C++언어에서도 구조체를 이용하여 캡슐화를 할 수 있습니다. 하지만 일반적으로 클래스를 이용하여 캡슐화를 할 때가 대부분입니다. 먼저 C언어에서의 캡슐화와 C++언어에서의 캡슐화의 차이를 간단하게 알아볼게요. C언어에서 구조체에는 데이터만 멤버 필드(멤버 변수)로 캡슐화할 수 있었죠. 하지만 C++에서는 기능도 멤버 메서드로 캡슐화를 할 수 있습니다. 그리고 C언어에서는 캡슐화한 멤버를 모든 곳에서 접근할 수 있지만 ..

19. 보물섬-II

보물섬-II 보물을 캐러 가기 위한 지도를 얻고 나서 어떠한 길로 갈지에 대한 결정을 내릴 때가 왔다. 주변에 인디언 부락을 들려서 중간에 물품을 사면서 가게 되면 다이아몬드 광산으로 가는 길을 우회하게 된다. 집으로 되돌아 가는 배가 이 섬으로 오기로 된 날은 25일이 남았는데 인디언 부락에 들리게 되면 광산에 머무를 수 있는 시간이 너무 부족할 거 같다. 그렇지만 직선으로 광산을 가다보면 죽음의 계곡을 만나게 되고 전체적으로 물이 부족한 지역이라 샘을 거치고 가야 할 듯 싶다. 우리 조는 일단 출발 지역에 있는 지혜의 신에게 섬에 대한 정보를 얻고 가면 좋겠다는 의견을 내었다. 하지만 지혜의 신은 지식을 주는 대신 하루를 자신과 재밌게 놀아주지 않으면 지혜를 주지 않는다. 그래도 인디언 부락을 거쳐가..

4. 오만과 편견

이제 예비 과정도 이틀밖에 안 남았다. 학생들은 짱강이 내 준 프로젝트에 매달리고 있지만 겨우 숏 메시지 주고 받는 수준이고 이제 한 두 학생이 파일을 주고 받는 기능을 구현하고 있다. 반장과 야추장은 며칠 후에 있을 워크샾 준비하느라 프로젝트는 손도 못 되고 있다. 다들 정신없이 시간을 보내고 있는데 담배 피고 돌아온 짱강이 매직을 손에 쥐었다. " 자, 모두들 앞에 집중! 오늘은 부모 쓰레드가 어떻게 자식 쓰레드를 효과적으로 종료 시킬 것이지에 대해 얘기하도록 합시다. 전에도 얘기했지만 TerminateThread를 사용하는 것은 불가피한 상황에서나 사용하라고 했는데 그럼 부모 쓰레드가 종료되기 전에 어떻게 자식 쓰레드에게 종료하라는 명령을 줄 것인가? 특히, 무한 루프문을 내부에 갖는 자식 쓰레드는..

3. 악마와의 계약

2009년 1월 19일 오전 7시 "짱강아 너는 어떻게 5일간 소켓 통신을 강의할 것이냐?" "허락해 주신다면 한 번 모험을 하려 합니다." "어떤 모험을 하려고 하느냐?" "첫날 오전 강의에 네트워크 개론과 소켓 라이브러리 사용법에 대한 강의는 마무리 짓고 나머지 4일 반나절 동안 프로젝트를 수행하게 하면 어떨까 생각중에 있습니다." "일반적으로 네트워크 개론과 소켓 라이브러리 사용법을 익히는 데도 수 개월 걸리지 않는가?(잠시 고개를 갸웃거린다.) 그건 그렇고 제시할 프로젝트는 어느 정도 규모의 것을 계획중이냐?" "중앙에 서버를 두고 회원이 로긴을 하고 회원간에 숏 메시지를 보낼 수 있고 파일을 주고 받을 수 있게 할 것입니다. 그리고 중앙 서버에 파일을 업로드하는 기능과 서버로부터 파일을 다운로드..

반응형