상속 - 기존에 있는 객체(부품)를 가져다 사용하기 위한 작업
* 재사용 - 컴파일된 바이너리를 다시 사용 // 소스 코드가 없는 상황에서 jar 파일을 import 시켜 사용
is a -
has a - 'a' 실존하는 객체를 부품(멤버)로써 가진다.
상속되는 시점에 따라
- composition has a - 내가 생성될 때 부품이 같이 생성된다.
- association has a - 주입(인젝션)이 이뤄질때 생성된다.
- setter, constructor
- aggregation has a - 1대 다로 has a 관계를 갖는다.
Is a 상속
<재사용을 극대화 하는 방법>
기존 재사용의 문제
-그대로 가져다가 사용
-만약 조금이라도 다르면 사용하지 못함
Is a 상속은 기존의 부품을 수정 또는 확장해서 사용 할 수 있는 방법이다.
- 클래스를 만들때 다음에 다시 사용 하기 좋도록(Is a 상속이 가능하도록) 만드는 것이 중요하다
frame work - 틀을 가져다가 고쳐 쓰는것
추상화 .
- 여러가지 사물이나 개념에서 “공통”되는 특성이나 속성 따위를 추출하여 파악하는 작용.- 네이버 사전
-공통분모를 만드는 과정
추상화한 클래스는 재사용을 위한 클래스.
단. has a 재사용이 불가능하다.(완전한 클래스가 아니기 때문에)
is a 재사용만 가능하다.
동일한 타입의 부품을 만들어야 할 경우에 추상화를 생각해 볼 수 있다.
-------------------------------------------------------┐
[비행기] <- |
△ |
|
[적기] [아군기] [유람기]
동일한 행동을 한다.
--------------------------------------------------------
추상화된 클래스 또는 부모 클래스가 있을 경우 참조 방법에 모호함.
A a = new A();
A a = new B();
B b = new A(); <- 이건 안됨
B b = new B();
*재사용 되는 모든 부모*는 추상호된 클래스 *특징*을 갖는다.
왜냐하면 큰 범주에서 보면 공통분모가 되니깐
그렇다고 추상 클래스로 만들어진 것(집중화를 위해 만들어진 것)을 의미하지는 않는다.
단. 추상 클래스는 미완성 추상 클래스(집중화를 위해 만들어진 클래스)
와 완전 추상 클래스(기존의 재사용되는 클래스)로 나눌 수 있다.
기존의 클래스와 내가 부모자식 관계가 된다면 참조방법이 다양해 진다.
<- 구체화 클래스 추 상 클래스 ->
6강의장 학생 클래스, 학생 클래스, 사람 클래스 , 동물 클래스, 포유류 클래스, 생물 클래스
<필요한 클래스를 지목 = 만족하는 객체를 지목>
사람 기선 = new 사람()
6강의장학생 기선 = new 6강의장학생()
사람 아무나 = new 6강의장핵생()
사람 아무나 = new 7강의장학생()
문제
?? 기선 = new 6강의장학생()
위에서 6강의장학생 객체를 참조 할 수 있는 클래스의 개수는? (다 가능)
문제
동물 솔이 = new ??();
위의 식에서 솔이라는 이름으로 참조 할수 있는 개체의 종류는 총 몇개? (4개 동물,사람,학생,6강의장)
프로그래밍, 구조적 프로그래밍, 객체지향 프로그래밍.
재사용은 이미 만들어진것을 다시 사용 하는 것(소스 코드 재사용X)
객체지향 - 캡슐화 -> 상속 -> 다형성
다형성->추상화
오버 라이드! 한것 우선으로 호출된다
정적 바인딩, 동적 바인딩
자바는 동적 바인딩을 사용한다.
객체가 전달 되면서 함수목록을 제출???
객체들은 자기 주소를 가지고 간다.
다형성 - 다양한 용도로 써먹을 수 있는 성질
어떤 클래스를 다양하게 써먹을 수 있도록 작성할 수 있는 능력을 갖는데 있다.
인터페이스
행위는 같지만 근본이 다른놈?
참조는 공간만 참조.
String 클래스(모든 클래스는 object이다.)
자바는 완전한 객체지향이다.
(Boxing과 UnBoxing)
Integer x = 3; => Integer x = new Integer(3);
일케 쓰면 컴파일러가 일케 만들어준다.
값을 참조할수 있도록 박싱(뤱(wrap)픵 yoyo )
요즘은 오브젝트에 그냥 값만 넣어도 알아서 만들어줌 ( 오토 빡싱)
Object x= 3; => Object x = new Integer(3);
int y = x;(초창기엔 에러가 났는데 요즘은 안난다 오토 언빡싱)
Object x= 3; => Object x = new Integer(3);
add(x,4); x 에 참조가 아닌 값이 전달됨.
Boxing에 사용되는 Wrapper 클래스
Object ──── ① Number : Byte, Short, Long,Integer등등
② String
int a = 3.intValue(); ---> 앙대요 < 요게 안대거
new Integer(3).intValue();---->되요
객체로 만들어줘서 나오는거 that’s yes yes ㅎㅇ
int b = “hello”.length(); -->되요
String 객체의 ‘+ (덧셈)‘ 은 미리 연산자 오버로딩이 된 메소드이다.
'Yame Programmer > JAVA' 카테고리의 다른 글
[톰캣] 서버 실행시 CMD창 바로 사라지는 문제 해결 방법 (0) | 2017.08.23 |
---|---|
[자바예제] 제어문 예제 (0) | 2015.06.19 |
[이론] 제어구조,파일 입출력, 배열, static, 캡슐화, 생성자, 오버로딩 (0) | 2015.06.16 |
[이론] 연산자 정리 (0) | 2015.06.11 |
[이론] 문자열 입력 (0) | 2015.06.11 |