본문 바로가기

Program Language/Java

[JAVA] <CGI> 상속

 2017.05.19

[상 속]


※ 맨 밑에 참조에 캡쳐한 코딩 있습니다.


* VO : 내가 만들어낸 새로운 자료형


* 캡슐화, 상속, 다형성


* 상속 : 뒤를 잇다, 이어받다, 물려받다.


- ex) 네 발 자전거를 만들고 싶다. 자전거 사다 보조바퀴 다는것이 빠름 편함.

- 확장하는 개념이다. 원하는 데이터를 가져와서 기능을 추가 하는 것이다.

- JAVA의 상속 : 기존 클래스의 변수(데이터)와 메소드(로직, 코드)를 물려받아 기능이 추가 된 클래스를 구성하는 것.

- 부모 클래스 = 수퍼 클래스, 자식클래스 = 서브클래스

- 자식 클래스는 부모 클래스의 기능을 모두 사용 할 수 있지만 반대는 안된다.

- 단, 자바에서는 다중 상속이 불가능 하다. 


ex) 

~ 부모 : 마우스 1, 마우스 2,  자식 : 휠마우스,

~ 휠마우스에 클릭 호출~! -> 마우스 1의 클릭을 가져올지, 마우스 2의 클릭을 가져올지 정하질 못해서 오류가 난다.


- 상속의 횟수는 정해지지 않았다


ex)

~ 부모1 -> 자식1// 자식1=부모2 -> 자식2 // 자식2=부모3 -> 자식3 ***


* 상속의 필요성


ex)

- class 마우스 : 클릭하기 메소드. 우클릭 하기 메소드, 드래그하기 메소드

- class 휠 마우스 : 클릭하기 메소드. 우클릭 하기 메소드, 드래그하기 메소드, 스크롤하기 메소드

- class 인체공학 메소드 : 클릭하기 메소드. 우클릭 하기 메소드, 드래그하기 메소드, 피로감소 메소드


=> 클래스에 있는 공통점을 빼서 부모 클래스를 만든다~!!(class 마우스가 부모클래스가 된다.) -> 추상화 과정


- 새로운 기능을 추가하고 싶으면 마우스 클래스를 불러와 기능만 추가하면 된다.


ps. 자바 배운지 1달 됬는데 상속을 이용해서 프로그래밍을 하게 된다면 여기 있으면 안된다. => 도전목표가 되겠군~!! ㅎㅎ


* 상속을 사용해서 얻는 장점


- 기존 클래스의 변수와 코드를 재사용 -> 간결화 

- 먼저 작성된 검증된 프로그램을 재사용 - > 신뢰성, 신속성

- 클래스간 계층적 분류 및 관리  -> 유지보수 용이


* 접근제한자 종류


: public, protected, default, private

- 프라이빗(private) 개인주의 : 본인 클래스 안에서만 사용, 외부 클래스에서 조작 불가 (데이터 은닉)

- 퍼블릭(public) : 온동네 사람들이 다 쓴다. Test클래스에 대한 객체만 생성되면 생성된 어디서든 사용가능

- 디폴트(default) : 안 붙였을때 기본적으로 붙여지느 것이다. 직접 붙이면 에러뜸. 디폴트의 사용범위는 같은 패키지 내에서만 사용가능하다. 다른 패키지에서 객체가 생성되어도 사용 불가.

- 프로텍티드(protected) : 퍼블릭보다 효용범위가 작지만 퍼블릭이랑 거의 비슷하다. 온동네 사용 가능하다. 퍼블리과 유사하지만 (동일 패키지가 아니고 상속받지도 않았을 때) 두 가지 조건 모두 만족하면 사용불가.

[출처] (자바) private, public, default, protected 변수의 의미와 사용가능 범위|작성자 찡꽁빵꽁


* protected 제한을 걸어 놓으면 다른 패키지에서 상속을 받았을 때 사용이 가능하지만, default 제한을 걸어 놓으면 사용할 수 없다.



* 다른 클래스의 정보를 가져오기 위해서 클래스 옆에 extends 를 입력해준다.

ex) public class UseClass extends Useclass2() { }


* 다른 패키지에서 다른 패키지 클래스를 상속받고 싶으면 import로 패키지와 클래스 명을 적어줘야 한다.


ex) 

package Package2;


import Package1.DataClass;


public class UseClass2 extends DataClass{

public void print() {

System.out.println(num1);

}


}


* 캐스팅

- 형변환이라고 부름
- 다형성과 관계있어 중요하다.
ex) 
int = 1.0; // 오류남
int = (int)1.0;
----------------------------
double = 1; // 오류 안남, why? 기본형 끼리의 캐스팅 때문이다. double은 더 큰 형태이고 int는 그보다 작은 형태이다. 이런 ㄱ자동으로 컴파일러가 캐스팅을 해준다.

* 업캐스팅


- 자식(서브클래스)이 자동으로 부모(슈퍼클래스) 타입으로 변환되는 것

- 중요성  

ex)



*다운 캐스팅


- 업캐스팅 된 것을 다시 원래대로 되돌리는 것, 업캐스팅과 달리 명시적으로 타입을 지정해야 한다.



* 제네릭스

ArrayList<> a = new ArrayList<>();

제네릭스 : <> 안에는 객체형만 들어갈 수 있다. String은 객체자료형이라 들어갈 수 있었던 것이고 int나 double은 들어갈 수 있는데, 이것을 들어가게끔 해주기 위해선 첫 문자를 대문자로 해주어야 한다. 하지만 int만 Integer로 적어줘야 한다.


-

ArrayList<Object> a = new ArrayList<Object>(); 

a.add(12);

a.add(18.8);

System.out.println(a.get(1) + a.get(2));

 

이것은 객체와 객체의 연산이라 불가능 하다. 즉 다운캐스팅으로 명시적형변환 해주고 연산을 해줘야 한다.




※ 참조





  

  

  









'Program Language > Java' 카테고리의 다른 글

[JAVA] SQL_3  (0) 2017.05.31
[JAVA] JDBC_2  (1) 2017.05.30
[JAVA] JDBC  (0) 2017.05.29
[JAVA] SQL  (0) 2017.05.29
[JAVA] JAVA  (0) 2017.05.02