안녕하세요

프로그램 과정에서 막혔던 문제들에 대한 해결책 정리


페이지 목록

2011년 4월 22일 금요일

객체 지향 프로그램(abstract, override)

 이 때까진 막 코딩 ( 인터넷 검색을 통해 필요한 정보를 얻는) 을 통해 생존해 왔다. 이번 학기에 객체 지향 프로그램을 배우면서 이 때 동안 그냥 막 썼던 implement 와 override의 개념에 대해 배우게 되었다. 간단하게 설명할 테니 잘 듣기 바란다. (거만한데..)

 override의 개념은 상속에 근거한다.

 그럼 상속이란 무엇인가? 자바 프로그램 자체가 OOP(Object Oriented Programming) 기법을 따르다 보니 객체 지향적으로 만들어졌다. 여기서 상속이라는 개념은 우리가 흔히 생각 할 수 있는

   사람

남     여

와 같이 상위 개념 아래 하위 개념이 존재하는 관계에서 남, 여는 사람을 상속 받는 다고 정의하게 된다.

 이를 쉽게 알아 보기 위해 IS-A 룰이라는 것이 있다.

" 남자 IS A 사람" (영어 "is"를 생각해라)

 한글로 쓰면 "는 - 이다" 룰 이 되겠다.

 "남자 는 사람이다" 가 성립 하면 남자는 사람을 상속하게 된다.

 마찬가지로 "여자는 사람이다" 가 성립 하므로 여자는 사람을 상속하게 된다.

 자- 이제 상속이 무엇인지 알았을 것이다. 그러면 abstract는 무엇인가?

 이것은 개인적으로 프로그래밍 기법 상 나온 말이라 생각한다.

 컴퓨터 프로그램을 만드는 데 (예를 들어 게임) 남자와 여자 케릭터를 생성하고자 한다.

 근데 이 남, 여 케릭터는 사람을 상속 받는 데 프로그래머가 잘못해서 사람 class 를 생성 할려고 하면 이는 안될 말이다.

 남자, 여자 두 가지 캐릭터가 있어야 하는 데 사람 케릭터라니 중성이란 말인가 머란 말인가!? 이처럼 상속의 개념에서 필요한 class 이지만 절대로 instance 화 되어서는 안되는 class들이 존재하기 마련이다.

 이러한 클래스를 abstact 를 이용해 선언하면 해당 클래스는 "절대" instance화 시킬 수 없다.

 이것이 abstract의 개념이다. 여기서 abstract의 또 한가지 좋은 점은

 abstract로 만들어진 method(즉 함수) 들은 상속 시 반드시 쓰여져야 한다.

 즉, 사람 클래스에 "이름, HP, MP" 세 가지 instance 와 "공격" method 가 있다고 가정하고

이들을 abstract 화 시킨 다면

남자, 여자 클래스는 반드시 위 세 가지 instance 와 한 가지 method를 반드시 포함해서 class 를 만들어야 한다. 그렇기에 반드시 필요한 인스턴스와 메소드를 상위 클래스에 지정해 놓는 다면 프로그래밍 시의 실수를 줄이는 데 많은 도움을 줄 것이다.

 override 란 상위 클래스의 메소드 (예 - 공격) 을 하위 클래스에서 사용하는 것을 말한다.

override를 통해 공격 method를 남자 , 여자는 그 메소드를 부르는 것 만으로 사용할 수 있다.

즉, 코드의 중복을 막을 수 있다.

예)
   사람 - 공격 : 몬스터를 때려잡는다. (라고 프로그램을 만들었다고 치자)

남자 - 공격 ; 여자 - 공격

이처럼 공격 메소드를 넣어 놓기만 하면 "몬스터를 때려잡는다" 라는 명령어는 다시 호출 하지 않아도 알아서 상위 클래스에서 불러 와서 사용할 수 있게 된다.

 남자 와 여자 클래스에서 몬스터를 때려잡는다 외에 다른 어떤 것을 넣고자 할 때

super를 이용하면 가능해진다.

즉-  공격 super(몬스터를 때려잡는다) 를 적은 후 사람을 때려잡는다 라고 적으면

super 가 알아서 상위 메소드를 한 번 부르고 사용자가 지정한 사람을 때려잡는다를 호출하게 된다.

 ----- 이해가 되셨나 모르겠다 ---- 하도 주저리 주저리 떠들어 대서... ㅎㅎ;;

댓글 없음:

댓글 쓰기