OOP(개념,일반화, 구체화, 관계, 상속)

[Object - Oriental Programming]

Real World를 System에서 표현하는 방법론이다. 현재 대체할 만한 방법론이 없고, 가장 많이 사용되는 방법론이다.

Object

: Real World에 존재하는 물리적인, 개념적인 모든 것을 의미한다.

Abstraction

: Object들의 공통적인 state, attribute, behavior을 추출해 내는 과정을 의미하고, 어떤 System을 구현할 것 인가에 따라 추출해야 하는 infomation이 달라 문제 영역에 의존적이다.

Class

: Object들을 system에 Abstraction되어 나온 공통적인 부분을 모은 Filed(변하지 않는 state와 behavior로 인해 변하는 attribute, Method(behavior)로서 표현한 것을 identify이 있는 명칭으로 만든 것이 Class이다.

Field

: Java Language로 Code를 표현할 때, Attribute와 Behavior을 통해 Attribute이 변하는 State를 Declaration 하는 과정을 통칭한다. Field를 생성하는 것을 Static Modeling이라고 한다.

Method

: Java Language로 Code를 표현할 때, Behavior를 생성하는 과정을 통칭한다. Method를 생성하는 것을 Dynamic Modeling이라고 한다.

Void

: return 값이 없는 Method를 의미한다.

Data Type Method( )

: return 값의 Data Type에 따라 다양한 Data Type을 선언해줄 수 있다.

Object Modeling

: Real World의 Object들을 시스템 상에 class로 표현하는 과정을 의미이며, Static Modeling과 Dynamic Modeling을 하는 전체 과정이다. main Method 가 없는 bean이라고 명칭한다.


일반화(Generalization)

= 클래스에서 위로 갈수록 일반적인 관계, 밑으로 갈수록 구체적인 관계 / 비슷한 클래스들 끼리 공통된 특성으로 묶은것

독수리, 고래, 코끼리 --> 동물

​

구체화(Specialization)

= 각기 다른 속성과 행위를 각 일반화된 특성에 따라 다르게 선언해야 한다. 각자가 가지고 있는 속성과 행위는 모두 다르므로


관계(Realization)

= 하위 클래스는 상위 클래스로 대체가 가능하다(아버님 이름이 써져있는 부조금 봉투로 내가 대신 전달 가능->효자)

상위 클래스는 하위 클래스로 대체가 불가능하다(내가 가야될 회사를 아버님이 대신 가는거 불가능->불효자)

ex) 사람(나)->동물(아버지)

동물 a = new 동물(); --> 사람() 가능? 나는 아버지를 대체할 수 있으므로 가능(0) 사람은 동물이다(0)

사람 b = new 사람(); --> 동물() 가능? 아버지는 나를 대체할 수 없으므로 불가능(x) 동물은 사람이다(x)

---------------> 즉, 물리적인 형변환으로 작은쪽에서 큰쪽으로만 형변환이 가능하다.

• SubClass의 공통적인 Field와 Method를 뽑아 내어 SuperClass를 생성하여 재 사용성, extends[확장성], Consistency[일관성]을 높였다.

public class 독수리 extends 동물{
String 날개크기;
}

º 동물class 의 이름, 이동방식을 확장하여 날개크기라는 attribute를 추가한다


상속(Inheritance)

• Generalization, Specialization Relationship을 의미한다
• SuperClass는 SubClass들의 공통적인 Filed와 Method를 Abstraction하여 포함하고 있는 Relationship이다.
• Generalization, Specialization의 Relationship는 SuperClass의 information을 공유를 하는데, 이러한 것을 의미한다. extends라는 Key Word를 이용하여 확장한다.

⁕ java에서는 단일 상속만 지원한다.

• Extends (~ is a ~);

다른 class를 확장하여 기능을 추가한다.

ex)

 class A{
        String name = "천석희";
        int age = 20;
        }
        
        class B extends A{
        String job = "학생";
        }
        
        class C extends A{
        String school = "비트캠프";
        }
        
        class BTest{
        	public static void main(String[] args){
        		B b = new B();
        		C c = new C();
        		System.out.println(b.name); // 천석희
        		System.out.println(b.address); //compile error
        		System.out.println(c.name); // 천석희
        }

💥compile error가 나는 이유!!!
A를 확장하여 B의 내용을 추가했지만, A에도 B에도 없는 정보를 호출했기 때문이다.

• Constructor[생성자]

new라는 keyword를 통해 생성할 때 호출되는 특별한 Method

Object는 서로 다른 상태를 가져야 하지만, 똑같은 상태를 만들어 놓고 일일이 변경해 주어야 한다는 Issue가 있다. default이기에 bean에 작성하지 않아도 생성된다.

==> OverLoading 기술 적용하여 매개변수에 인자값을 받아 초기화 하여 Issue 해결해야됨

• Super()

super(인자 값)을 통해 Overloading 기술이 적용되며, Inheritance 관계에 있는 상위 Class에서 인자 값의 Data Type과 동일한 Data Type을 가지고 있는 Constructor을 호출한다.
constructor에서 만 사용 가능하며, constructor에서 가장 먼저 호출된다

• This()

This(인자 값)을 통해 현재 Class에서 인자 값의 Data Type과 동일한 Data Type을 가지고 있는 Constructor을 호출한다. 즉, 재귀한다 .
constructor에서 만 사용 가능하며, constructor에서 가장 먼저 호출된다.


좋은 웹페이지 즐겨찾기