지금 학교 교재랑 많이 달라서 보기 싫지?
하지만 이게OOP의 기본이라 어쩔수 없어.
우선 지난번의 답을 말하자면 오버라이딩이야.
오버라이딩은 상속받은 부모 클래스의 메소드에 올라탄다는뜻으로 기억해둬
오버라이딩도 메소드를 생성하는 방법이랑 똑같애.
근데 생각해보니까 메소드만들기를 안 알려줬네?
메소드는
int 동물::걷기(int 부위, int 각도)
{
이렇게 하면 되고, 오버라이딩도 똑같이
int 사람::걷기(int 부위, int 각도)
{
하면 된다고 나와있어,,, 아직 안써봐서,,ㄷㄷ
두서없이 클래스에 대해 이야기 하고있는데,,, 따라 올만해?
이제 생성자, 소멸자, 권한만 하면 클래스에 대해서는 잠시 쉬어도 되,
클래스도 좋지만 다른 문법을 알아야 클래스를 쓰던 말든 하지,,,
그럼 이야기 시작 할께,
접근 권한이란 전에 class 기본 틀을 보여줄때
private:
이랑
public:
이 있었지? 이게 접근 권한이야.
public:밑에 있는놈들은 외부에서 man1.뭐시기 로 접근이 가능하지만,
private:밑에 있는 놈들은 외부에서 man1.뭐시기 가 안되.
그럼 어떻게 private밑에 있는 놈들을 건드리냐? 그건 public:밑에 메소드를 만들어서
그 건들수 없는놈을 건들게 시키면 되.
전에 얘기한데로 남의 목을 잡고 돌리면 기분나빠하지만, “목을 돌려라” 라고하면 기분이 덜 나쁘잖아?(그게 그건가?)
하여간 OOP의 원칙이 캡슐화와 추상화인데, 캡슐화는 메소드는 사용하게 하되, 안에서 어떻게 돌아가는지는 개체 밖에서는 모르도록 하자는 거고, 추상화는 인간클래스를 만들때 동물->포유->이족보행->사람 식으로 만들듯이 자세한 성질(메소드)는 하위의 상속받은 클래스에서 만들고 상위에서는 대략 추상적으로만 만들어서 일반성을 갖게 하자(우려먹을수 있게)는 거야.
메소드를 통하지 않고
목의 근육1 각도=15˚;
목의 근육2 각도=15˚;
.
.
.
.
성대(“안녕하세요.”);
하면, 그건 캡슐화가 안되있는거고,
man1.숙여라(목);
man1.숙여라(허리);
man1.say(“안녕하세요”);를 한다음
숙여라(int 부위)메소드와 say(string)메소드를 만들어서 그 안에다가 저런거를 집어 넣으면 클래스를 사용하는 외부에서는 목 근육이 어떻게 움직이는지 말은 성대로 하는지 복화술을 하는지 알게뭐야? 그냥 시키면 되지. 이런거를 위해 캡슐화가 있는거야.
그리고 전에 설명한듯이 사람만들고, 개만들고, 기린만들고 하려면 동물에 관한 기본사항을 만든 동물 클래스를 만들고 상속받는다고 했지? 이때 동물에다가는 기본 메소드만 넣으면 되니까 이런걸 추상화라고 해.
잠시 삼천포로 갔지만 중요한걸 빼먹고 와서,,,
그다음 생성자와 소멸자인데,
사람이 태어나면, 나이, 성별, 키, 손의 크기, 발의 크기등을 모두 갖고있잖아?
이것을 처음에 지정해 주는게 생성자야.
생성자는 public:밑에있는 반환값이 없는(메소드 안에 return;이 없는) 클래스랑 이름이 같은 메소드라고 생각하면 되,
이 안에는 처음 변수들의 초기값을 넣는다고 생각하면 되, 또 태어나자마자 “응애”하고 울고싶으면 생성자안에 say(“응애”);를 하면 되고
사람클래스의 생성자가 불려지는 시기는 프로그램 내에서
사람 man1;
이라고 하면 man1이 생성되잖아? 이때 불려져. 근데 이것보다는
사람* man2=new 사람;
man2->say(“안녕하세요”); 를 더 자주쓰는것 같던데,,, 차이점 아는사람은 댓글로!!!
그럼 소멸자가 뭔지 감이 오지? 프로그램이 끝나서 개체가 사라질때나,
delete man2; 처럼 개체가 폐기되는경우에 호출되는건데 이름은 “~클래스이름”이야
사람클래스의 소멸자는
~사람() 이 되는거지.
클래스이름 앞에 딴글자라는게 아니라 갈매기표시가 붙는다는거야.
이건 사람으로 치면 유언을 남기고 자기 자신을 정리하는 거야. 사용중이던 자원(메모리)를 반환하고, 기타등등 딱히 생성자 소멸자를 안만들면 기본으로 생성시 초기값은 다 0으로 소멸시 메모리 처리는 알아서 해준다는데,,, 할수 있으면 하는게 컴퓨터 건강에 좋겠지?
뭐 이걸로 클래스 기초는 다 한셈이야. 책으로 몇십페이지나 되는 설명을 이렇게 간단한(실행도 안되는)소스로 설명을 했더니 내용이 이만큼 밖에 씩이나 나오네,,,
앞으로는 C++언어의 기타 문법들을 할꺼야.
변수 공부는 알아서 하고, 다음은 간단한 연산자와, 제어문에 대해 이야기 하겠어