▶ 뭉충닷컴
 
mungchung.com login
Site Search
My Space
주절주절...
공부방
쥔장소개
Board
자유게시판
유용한 정보
자료실
Programming
강좌 & Articles
Spring 3.0
프로그래밍 Tip
   -ASP
   -PHP
   -JavaScript
   -HTML
   -Java/JSP
   -Database
   -Crystal Report
   -Visual Basic
   -이클립스
   -리눅스
   -기타
Windows API (VB)
Spread Sheet 7.0
컴퓨터활용 Tip
Other things
StarCraft 전략
StarCraft 문서
김용(金庸)
Son Q & Dieda

5. Overloading, Overriding, Runtime Type and 객체지향

기타 조회 수 6502 추천 수 0 2003.12.02 11:14:34
뭉충닷컴 *.154.199.102
Overloading, Overriding, Runtime Type and 객체지향

### 객체지향(Object Orientation)
객체란 실세계에서 볼수 있는 것을 말하며 객체지향은 이러한 객체를 프로그램에서 이용할수 있도록 표현하는것

객체지향방법을 사용한 프로그래밍의 특징
1. 모든것을 객체(Object)로 표현
   객체 = 변수 + 메서드
   변수 : 해당 객체가 가지는 특성이나 속성을 가지는 기억 공간
   메서드 : 변수에 접근하여 객체의 행동을 표현하고자 할때 사용
2. 모든 객체들은 캡슐화(Encapsulation)해야한다.
   객체의 상태를 가지고 있는 변수들을 메서드를 통해서만 접근할수 있도록 하는것이 캡슐화
   모듈성(Modularity), 정보은닉(Information hiding)장점
3. 상속(Inheritance)
   클래스를 이용하여 또 다른 클래스를 생성하거나 정의하는것
4. 메시지(Message)를 통해 다른 객체와 통신
   객체는 서로 독립적이기 때문에 서로 통신하기 위한 메시지 사용해야함
5. 다형성(Polymorphism)
   각각의 객체가 같은 메시지에 대해 다양한 반응을 하는것
  
  
### Encapsulation
캡슐화란 개체가 가지고 있는 변수와 이와 관련된 메서드를 하나로 묶는것을 말한다
Full Encapsulation = private 로 선언된 변수 + public으로 선언된 변수

### Inheritance
이미 존재하는 클래스로 부터 변수와 메서드를 물려받아 새로운 클래스를 만드는것
물려주는 쪽 - Super class, Base class, Parent class
물려받는 쪽 - Sub class, Derived class, Child class

클래스 상속 키워드는 extends
자바에서 사용되는 모든 클래스들은 최상위 클래스인 java.lang패키지의 Object클래스를 상속받고 있다.
1. A a = new A(); : S
2. A a = new B(); : S
3. B b = new B(); : S
4. B b = new A(); : compile error
5. A a = new A();
   B b = new B();
   a = (B)a;
   : runtime error
6. A a = new A();
   B b = new B();
   a = (A)b;
   : S
7. A a = new A();
   B b = new B();
   b = (B)a;
   : runtime error
8. A a = new A();
   B b = new B();
   b = (A)b;
   : compile error
  
### has a/ is a 관계(Relationship)
"has a" 관계는 클래스가가지고 있는 멤버(member)를 말하며 "is a"관계는 어떠한 객체간의 관게를말한다.
1. has a
   - is part of,is composed of
   class Patient {
      String name;
      int age;
      Diagnosis d;
     }
   Patient 클래스는 변수 name, age, d를 가지고 있으며 이 관게를 "has a"라 할수 있다.
2. is a
   - is kind of
   class SpecialPatient extends Patient {
      String Special;
   }
   Patient 클래스를 상속받아 정의된 SpecialPatient 클래스는 "특별환자도 환자이다"라고 표현할수 있는 "is a"관계라 할수 있따.
  

### 생성자(Constructor)
클래스의 초기화를 위해 제공되는 특별한 메서드. 생성자는 주로 클래스의 변수를 초기화할때 사용된다.

특징
1. new 키와드와 함께 호출된다.
2. 객체 생성 시 한번만 수행된다.
3. 생성자의 이름은 클래스의 이름과 동일해야한다.
4. 리턴값을 지정하지 않는다.
5. 접근 제한자는선언될 수 없다.
6. 다른 메서드처럼 호출할수 없다.
7. 메서드에 들어가는 매개변수만 다르면 여러 개 선언 가능하다.
8. 생성자를 정의하지 않으면 디플트 생성자가 자동으로 추가된다.
9. 상위 클래스의 객체 생성자를 호출할때는 super 키워드를 사용한다.
10. 자기 자신의 클래스의 다른 생성자를 호출할 때는 this 키워드를 사용한다.

디폴트 생성자 : 매개변수를 가지고 있지 않은 생성자

The default constructor invokes the no parameter constructor of the superclass
The default constructor initializes the instance variable declared in the class
디폴트 생성자는 생성자를 하나도 작성하지 않았을 경우 컴파일러에 의해 자동으로 생성된다.
디플토 생성자는 상위클래스의 인자가 없는 생성자를 호출한다.
클래스에 선언된 인스턴스 변수를 초기화할수 있다.


### Overloading
한 클래스 내에서 같은 이름의 메서드를 여러 개 정의하는것
규칙
1. 메서드들은같은 클래스에 존재해야하며 같은 이름을 가져야한다.
2. 메서드들은 매개변수형이 서로 다르거나 개수가 달라야한다.


### Overriding
상속관계에 있는 두 클래스 중 하위 클래스에서 상위 클래스에 있는 클래스의 메서드를 재 정의하는것
규칙
1. 상위클래스의 메서드 이름과 일치해야한다.
2. 상위클래스의 메서드 매개변수의 개수와 데이터형이 일치해야한다.
3. 접근 제한자는 범위가 같거나 더 넓은 접근 제한자로 선언해야한다.
4. 상위클래스의 메서드 리턴형과 일치해야한다.
5. 상위클래스에서 final제한자로 선언된 메서드는 재정의 할 수 없다.
6. 상위크랠스에서 static 제한자로 선언된 메서드는 재정의 할 수 없다.
7. 상위클래스에서 private 접근 제한자로 선언된 메서드는 재정의 할 수 없다.

접근 제한자의 범위 표현
private < default(friendly) < protected < public


### this/super 키워드
this - 자기 자신의 객체를 참조할때 사용
super - 상위 클래스객체에 대한 참조
this와 super 키워드로 생성자를 호출할때에는 생성자 내의 첫번째 문장에 와야한다.


### 내부 클래스(Inner class)
내부클래스란 클래스 내부에 다른클래스를 정의하는것을 말한다. 서로 깊이 관련된 클래스를 클래스 내부에 사용함으로써 프로그램을 좀 더 읽기 쉽게 만들수 있으며 주로 이벤트 처리나 데이터 구조 클래스등을 위해 사용된다.
내부 클래스는 중첩(Nested class)라 부르기도 한다.

종류
1. Static Inner class
   다른 클래스 내에 static 제한자로 선언된 클래스를 말한다. 클래스 내부에 선언되기는 하지만 top-level클래스의 속성을 갖는다.
   # 정적 클래스(Static Inner class, Nested Top Level class) 특징
   - 외부 클래스의 이름과 달라야 한다.
   - static 제한자로선언된 클래스며 자동적으로 top-level 클래스가 된다.
   - static 제한자로 선언된 멤버들만 접근할수있다.
   - 외부 클래스의 객체 없이 접근할수 있다.
   - interface 로 implement(구현)시 묵시적으로 static으로 선언된다.
2. Member Inner class
   다른 클래스 내에 static 제한자로 선언되지 않은 클래스를 말한다.
   - 외부 클래스의 이름과 달라야한다.
   - 클래스의 멤버로 선언해야한다.
   - static 제한자로 선언된 멤버들을 가질수 없다.
   - 외부클래스에서 독립적으로 생성될수있다.
   - 외부 클래스의 모든 멤버를 사용할수 있다.
3. Local Inner class
   블록이나 메서드 내에 선언된 클래스
   - 외부 클래스의 이름과 달라야한다.
   - 블록이나 메서드 내에 선언
   - 클래스가 선언된 외부에서는 참조할수 없다.
   - 비정적인(nonstatic)메서드에 포함되었을 경우에는 메서드내에 선언된 상수와 외부클래스의 모든 멤버를 참조할수있다.
   - 정적(static)메서드에 포함되었을 경우에는 메소드 내에 선언된 상수와 외부 클래스의 정적 멤버만을 참주할 수 있다.
4. Anonymous Inner class
   몸체만 정의된 클래스
   - 객체를한번만 생성하기 때문에 클래스 선언부를 가지지 않는다.
   - 생성자를 가질수 없다.
   - static 멤버를가질수 없다.
   - interface는 한개만 implement할수 있다.
   - abstract 클래스를 상속받을수있따.
   - 멤버로서 선언되었을 경우에는 멤버 클래스의 특징을갖는다.
   - 블록이나 메서드 내에 선언되었을 경우에는 지역클래스의 특징을 갖는다.

class Outer {
   class Inner {
      int a;
      public Inner() {
         a = 1;
      }
      public void print() {
         System.out.println(a);
      }
   }
   public Outer() {
      Inner i = new Inner();
      i.print();
   }
}

Outer클래스 내에서 객체를 생성하는 방법
Outer o = new Outer();
Inner i = o.new Inner();
= Inner i = new Outer().new Inner();

Outer o = new Outer();
Outer.Inner i = o.new Inner();
= Outer.Inner i = new Outer().new Inner();

다른 클래스에서 Outer클래스 내의 내부클래스의 객체를 생성하는 방법
Outer o = new Outer();
Outer.Inner i = o.new Inner();
= Outer.Inner i = new Outer().new Inner();
문서 첨부 제한 : 0Byte/ 2.00MB
파일 크기 제한 : 2.00MB (허용 확장자 : *.*)
List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 기타 공부하는 곳 -_-; [2] 뭉충닷컴 2002-09-22 10662
31 토비의 스프링 뭉충닷컴 2011-03-28 3937
30 웹사이트 최적화 기법 file [1] 뭉충닷컴 2009-08-10 7997
29 기타 아파치 튜닝 [1] 뭉충닷컴 2009-08-03 8329
28 기타 아파치 설정 httpd.conf 뭉충닷컴 2009-08-03 5386
27 Intercepting Filter 패턴 뭉충닷컴 2009-06-17 7082
26 Core J2EE Pattern file 뭉충닷컴 2009-06-16 6557
25 기타 [C++ Study] Timer 사용 [3] 뭉충닷컴 2004-06-29 8655
24 기타 [C++ Study] Click Count, Toggle, Move String 뭉충닷컴 2004-06-29 7383
23 기타 [C++ Study] WinMain와 WinProc 뭉충닷컴 2004-06-28 8754
22 기타 C# Pattern - Simple Pattern 뭉충닷컴 2004-03-17 6246
21 기타 1. abex3 크랙 설명서 뭉충닷컴 2004-03-12 7047
20 기타 어셈 강좌 1, 2장 정리 뭉충닷컴 2004-03-12 7726
19 기타 SoftICE 4.05 설치 & 간단한 사용법 뭉충닷컴 2004-03-12 9141
» 기타 5. Overloading, Overriding, Runtime Type and 객체지향 뭉충닷컴 2003-12-02 6502
17 기타 4. Flow 통제와 예외 처리(Exception Handling) 뭉충닷컴 2003-11-05 6023
16 기타 3. 연산자와 지정 뭉충닷컴 2003-11-03 6640
15 기타 2. 선언과 엑서스 제어 뭉충닷컴 2003-11-03 5929
14 기타 1. 자바언어의 기본 뭉충닷컴 2003-11-03 5818
13 기타 Parameter 을 asp 처럼 사용하게 만든 class 뭉충닷컴 2003-11-03 6691