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에서 가장 먼저 호출된다.


좋은 웹페이지 즐겨찾기