JAVA

OOP 관련 개념

k9e4h 2016. 3. 16. 20:40

1. OOP ( object-oriented programming , 객체지향프로그래밍 )

- 하나의 통으로 된 소프트웨어는 유지보수 하기 위해서 전체를 고쳐야 하는 불편함이있다( 붙박이 장 같은 )

- 유지보수의 편리함을 위해 하나의 소프트웨어를 여러개의 부품(객체)로 구성하는 방법

- 프로그램들 간의 상호작용이 용이하도록 프로그램이 단순화되고 생상선과 신뢰성을 높임.

-  real world 표현하기 위한 방법론

-  java oop를 하기 위한 langguage(OOPL-c++,c#)

 

<OOP의 특징>

Class, Inheritance, Polymorphism, Encapsulation, Information Hiding


<객체지향 프로그래밍의 장점>

1. 재사용으로 인한 생산성 향상

2. 자연적인 모델링 - 생각하는 방식을 그대로 표현할 수 있음

3. 유지보수의 용이성



2. Object ( 객체 )

 

- 실생활의 모든것 / instance와 Object는 다르다!

- 시스템에 의존적으로 변화함

- 은혜라는 존재(객체)가 있는 위치(시스템)에 따라(의존적으로) 중요한 내용(속성)이 달라짐

ex)

시스템 

객체 

속성 

학원 

수강생 

전공 

병원 

환자 

혈액형 




3.  Class (instance)

 

- 객체를 표현한 것, 객체들의 공통된 것을 모아서 표현

- 동일한 형질의 객체의 타입 혹은 객체들을 만들어내는 틀

- 객체의 공통된 attribute behabior을 뽑아낸 것


ex)

커피(객체)-커피머신(class)

기본인 에스프레소에 물, 우유등 여러가지 첨가물 (필드)을 첨가하고 양을 조절하는 것 (메소드)을 통해 

라떼, 아메리카노 등( 다양한 맛을내는 클래스 )을 만들 수 있다.

 



3. Abstraction ( 추상화 )

 

- 공통의 속성이나 기능을 묶어 이름을 붙이는 것.


- 문제에 대하여 필요한 정보를 추출하는 것, 객체를 추상화과정을 거쳐 클래스로 나타냄

복잡한 현실세계를 단순화시켜서 소프트웨어적으로 만드는 것

시스템에 의존적 : 사람의 특징을 뽑아내야 할때 학원이라는 시스템에서 사람의 특징은 전공, 병원이라는 시스템에서 사람의 특징은 혈액형이 될 수 있다. 


abstract : sub에 공통된걸 상속 시킬때 사용


공통특징을 전달하는 과정에 사용

interface : 사용관계의 규칙

객체 호출자와 호출당하는 자 사이에 호출 규칙을 정의하기 위해 사용함

호출규칙에 따라 class를 작성하면 그 자리에 대체가 용이하다는 장점이 있다.


추상메소드는 둘다 가지고있는데?

interface는 subclass에게 구현된 method, feild을 상속할수없다

abstract는 어짜피 sub class 가 가져야하는 field와 method를 상속보내는 것이기 때문에 어짜피 overriding 해야한다


An abstract class is something which is incomplete and you can not create instance of abstract class. If you want to use it you need to make it complete or concrete by extending it.


Abstract- extends 사용 // 상속받을건 상속받고 나머지는 overriding해야한다.

Interface - implemet 사용 // 모든 것을 무조건 overriding해야한다

 




4. Inheritance(상속) / 계층화,Hierarchy


- 상위 개념의 특징을 하위 개념이 물려받는 것. 클래스가 가지고 있는 특징을 다른 클래스에게 물려주고자 할 때 사용.


현실세계와 비슷하게 부모클래스의 성질을 받는 것.

객체지향의 특징중 하나인 다형성을 실현, 구체적인 객체 인스턴스화 가능

일반화 되어 있는 클래스의 속성을 구체적인 클래스에 주는 것


계층 구조(hierachy)의 표현. (재사용은 덤으로 얻는 것이지 상속의 핵심 목표가 아니다)


Parent-Child relationship off class which is mainly Used for code reusablility.



상속의 방법 : specialization/ generalization

specailization 차를 보고 각차의 특징을 만들어 내는 것

generalization 각차를 보고 공통의 특징을 뽑아 내는 것



5. Polymorphism ( 다양성, 다형성 )


- 하나의 계층에 속한 객체들이 같은지시에 대해 다른 행위를 수행하는 것.

- 부모클래스에서 물려받은 가상 함수를 자식 클래스 내에서 오버라이딩 되어 사용하되는 것. 

- 1 운전면허를 땄는데 일반 자동차를 운전할 수 있다. -> 동일한 인터페이스(운전)를 사용할 수 있도록한다.

- 아래한글, MS WORD, 훈민정음 문서파일을 변환하면 깨지고 밑줄이 안맞는다 -> 다형성이 맞지않는다.  ( 다형성이 없으면 불편 )

  => 상속일반화 등등등은 모두 다형성을 지원하기 위해서!

 

6. encapsulation / 절차은닉 / 정보은닉 ( 캡슐화 ) => information hiding을 위해서!

 

* overloading

private<protected< default< public : 학교정보같은 공개적인 것과, 학생 개인정보 등으로 정보은닉의 정도를 구분하여 할 수 있다.

 

: 절차은닉 - 편리하게함. 강사님이 프린트를 어떻게 하는지 중요하지 않다 프린트물만 중요할 뿐.

로그인 아이디,패스워드하면 되는것만 알지 실제로 어떻게 동작하여 로그인 하는지 모른다.

 

: 정보은닉 - 정보를 숨기는 것 뿐만아니라 가공도 가능

친구에게 이름을 말할때 - 내이름은 은혜야 / 상사에게 말할때 - 제 이름은 김은혜입니다.






7. Spcialization구체적 )

 

일반화와 다르게 세분화 시키는 것상속받은 method를 더 구체적으로 바꾸어 사용하는 것

구체적인 클래스는 일반화된 클래스를 대신할 수 있다. ( 반대는 안됨일반화된 클래스에는 생략된 것들이 있으니까 )

 

 

8. Generalization일반화 ) -> 추상화 수준이 높다.

일반화하는 과정에서 상속이 생겨남구것적인 클래스로 정의된 객체들의 공통점속성과 행위를 공유 )

냉장고에어컨, TV -> 가전제품(클래스), 이 과정을 일반화한다고 말함.

객체들의 재사용성을 높임일관성을 가지게함하나를 고칠때 상위 클래스만 고치면 되니까 )

 

 




9. Realization (실현) ??

 

추상화된 것을 실현하는 의미.

동물원에 갔는데 동물이 무엇을 하는 것을 보았어가 아니라 동물이 뛰어가는 것을 보았어!라고 구체적으로 하는 것.



10. couping

Coupling = layer 간의 간섭

Layer간의 coupling 낮추어라 (커플링)

 

 



-----------------------------------------------


refactoring 과정에서 sub class의 generalizaion 과정에서 사용

refactoring : 개발방법인거지 


-----------------------------------------------


signed unsigned : c언어에 있는데 java에 없는 이유 


----------------------------------------------


stack 사용하는 경우 :  홈페이지 뒤로가기 같은경우

bead crumb -헨젤과그레텔ㅋㅋㅋㅋ빵부스러기남겨논거에서 이름따옴


2016.03.16 최초작성

2017.09.26 조금수정

반응형

'JAVA' 카테고리의 다른 글

Java Thread (Last Updated : 2021.07.27)  (0) 2016.03.23
[java01] Server/Network 기초  (0) 2016.03.23
[#4] Association(HasA) & Dependency 관계  (0) 2016.03.22
AOP  (0) 2016.03.18
[#2]용어정리2  (0) 2016.03.18