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에서 가장 먼저 호출된다.
Author And Source
이 문제에 관하여(OOP(개념,일반화, 구체화, 관계, 상속)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@csh3064/OOP개념일반화-구체화-관계-상속저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)