@21.04.15
JAVA
@상속?
=> 기존 클래스의 변수(데이터)와 메소드를 물려받아 새로운 클래스를 구성하는 것.
--> 게임 캐릭터를 예로들면 기본캐가 부모(Super) Class, 1차가 자식(Sub) Class이다.
--> 기본캐와 1차전직 간 중복되는건 이동, 기본공격, 점프 등이 있겠다.
단지 1차 전직하면서 스킬이 몇개 추가되는것뿐, 아예 없애는건 없을것. 즉, 아래와 같은 과정.
--> 만일 이와 같은 구성이 아니고, 매번 새롭게 만든다했을 때 뭐가 불편한가? --> 단적인 예로 모든 캐릭터의 점프키를 바꾼다면 기본,1차,2차 모든 캐릭터를 수정해야할 것. 상속으로 인해 기본캐 릭터를 상속 받고 몇가지만 추가하는 식으로 만들었다면, 기본캐만 바꾸면 수정이 될 것이다. 즉, 상속은 유지보수면에서 굉장히 중요하다고 할 수 있다.
@상속의 특징
1. 다중상속을 지원하지 않는다.
=> 하나의 자식 클래스에 여러개의 부모 클래스가 붙어있을 순 없다.즉, 아래와 같은 현상은 안된다.
2. 상속의 횟수에 제한을 두지 않는다.
=> 부모 클래스 아래 자식 클래스가 다른 클래스의 부모 클래스가 될 수 있다.즉, 아래와 같은 관계가 형성 될 수 있다.
3. 모든 클래스는 java.lang.Object를 상속받는다.
=> 때문에, java.lang.Object를 최상위 클래스라고도 부른다. => 문장 그대로 모든 클래스에게는 공통된 최상위 Super Class가 있다는 의미.
@상속 - 부모&자식 클래스 생성
예로 위와 같은 중국집을 예제로 만든 부모 클래스가 있다. 위에서 설명했듯 상속의 개념은 기존에 만든 설계도를 그대로 가져와서 덧붙히는 개념이다. 위와 같은 중국집 메뉴 만드는 클래스를 그대로 가져오고 추가적으로 탕수육을 만드는 클래스를 만들어보면,
위와 같이 extends 라는 구문을 통해 Parent Class를 상속 받아 그대로 사용할 수 있다. 때문에 사용가능한 기능을 보면 알 수 있다.
@오버라이딩( Override - Method 재정의 )
위에서 만든 Parent / Child 클래스를 가져와서 각각 makeBok 이란 기능을 사용해보았다.
보는것과 같이 동일한 결과를 도출하는데, 만일 Child 자식 클래스가 더 맛있는 볶음밥을 만들려 한다고 하자.
그저 단지 같은 이름으로 Method를 생성하고 Logic을 구성하면 된다.
사진 처럼 Override를 하면 이클립스의 좌측에 초록색 화살표가 존재하는데, 상속이란 개념이 JVM이 SubClass에 존재하지 않는 기능을 수행하면 다시 SuperClass로 올라가서 확인하기 때문에, 위 방향이라고 생각하자.
%Annotation - 어노테이션
Override의 정석적인 방법은 위의 사진처럼 @ 와 함께 Override 라는 구문을 추가하는 것.
보면 회색 글씨로 마치 주석과 같이 변한 모습을 볼 수 있다. 이는
- Override 했음을 표시한다.
- Annotation을 씀으로써 컴파일러가 에러가 있을 시 메세지를 표출한다.
( 예로 부모클래스를 수정했는데, 자식 클래스를 수정하지 않은 경우. )
@Casting
=> 기존 데이터 타입을 다른 데이터 타입으로 변환하는 것.
%1. UpCasting (업캐스팅)
=> 하위 클래스가 상위 클래스 타입으로 자동 타입 변환하는 것 ( 다형성 )
=> 좀 더 풀어서 쓰면 객체는 상위 클래스 인데 기능은 하위 클래스를 쓴다는 뜻.
이에 대한 예시를 위에서 만든 Parent/Child 클래스로 들어본다.
생성할 때는 Parent로, 부여(?..)하는 것은 Child 클래스로 생성해본다.
1. 보면 Child 클래스에서만 추가된 탕수육을 만드는 기능은 사용할 수 없음을 확인할 수 있다.
2. 단, 오버라이딩된 Method에 한해서는 SubClass의 Method를 사용한다.
%2. DownCasting (다운캐스팅)
=> 업캐스팅과 다르게 "명시적 변환" 이다.
한번 업캐스팅했던 방법과 비슷하게 명시적 형변환을 진행해보자.
위와 같이 문법적으로는 오류가 없으나 컴파일 시 Error를 나타낸다.
이번에는 DownCasting의 정의대로 기존에 UpCasting된 클래스를 상대로 해본다.
@추상 클래스 - Abstract Class
=> 추상 클래스 키워드 : abstract
=> 추상 메소드 하나 없이, abstract로 선언만한 경우도 추상클래스이다.
%추상 클래스 / 메소드
- 추상 클래스는 Class 앞에 "abstract" 라는 키워드를 넣어주면 된다.
- 추상 메소드를 하나라도 가지고 있으면 "추상 클래스"이다.
- 객체를 생성할 수 없다.
- 추상 메소드의 경우 중괄호가 없다.
%추사클래스 상속?
- 추상 클래스를 상속 받기 위해서는 추상클래스가 갖고있는 메소드를 반드시 오버라이딩 해야한다.
- 추상 클래스는 객체 생성이 불가하다.
%추상클래스 사용이유
=> 추상클래스는 결국 일좀의 틀을(Frame) 제공하는 역할을 한다.
=> 기능적인 면보다는 클래스 내의 Method 명을 지정해줌으로써 통일화, 협업을 위함이다.
=> 예로 들자면 특정 문서의 양식, 공장에서 부품을 찍어내는 틀. 이라고 말할 수 있겠다.
----> 단적인 예로, 천명의 IT 직원들이 모두 같은 변수, Method 명으로 코드를 짤거란 보장은 없지 않는가?? 추상클래 스를 통해 특정한 틀을 제공하고, 그대로 만들게하기 위함이다.
@추상 메소드( abstract Method )
- 선언되어 있으나 구현되어 있지 않은 메소드 (Return, 이름, 매개변수 모두 존재한다.)
- 추상 메소드 선언
ex) public abstract int getValue( );
- 추상 메소드는 서브 클래스에서 오버라이딩해 구현한다.
- 추상 메소드의 경우 중괄호가 없다.
@접근제한자 ( 지정자 )
=> 접근제한자는 위의 사진과 같이 4가지 존재한다.
- default의 경우는 아무것도 안쓴것. ( 즉, 평소만들던 public을 빼면 default 다. )
@스태틱 ( Static) - 저장공간
@Interface ( 인터페이스 )
=> 클래스들이 구현해야 하는 공통되는 기능들을 미리 지정
=> 일종의 프로젝트 설계도. ( 이 또한 문서의 양식, 이력서와 비슷하다.)
- 추상클래스와 다르게 인터페이스는 멤버필드, 추상매서드만 정의할 수 있다.
( 추상클래스는 추상매서드 외에 다른 매서드도 정의할 수 있다.)
- 추상클래스와 다르게 다중구현이 가능하다. ( interface 키워드 대신 implements 사용시 다중 구현 가능)
@Interface 실습
우선 Interface 생성 자체는 Class 파일을 만드는것과 비슷하게 진행한다.
Interface에 대한 예를 들기 위해 2개의 Interface와 1개의 Class를 만들었다.
그리고 이 3개의 파일을 모두 상속 받으려 하는 Test라는 Class를 생성한다.
Test Class는 1개의 Class를 상속 받기 위해 extends , 2개의 Interface를 상속 받기 위해 Implements 를 사용했다.
보면 2개의 인터페이스 파일에 추상 메소드를 만들었기 때문에 왼쪽 사진에서 이를 만들어 달라고 에러 메세지가 뜬다.
여기서 Add unimplemented methods 를 누르면 자동으로 오른쪽과 같으 2개의 Override를 생성한다.
해당 실습의 결론
- Class는 단 한개의 부모 클래스만 가질 수 있다.
- Interface는 여러개의 Interface 파일을 상속할 수 있다.
@추상클래스&인터페이스 차이점
=> 코딩을 함에 있어 특정 부분의 속성을 정의하고자 하면 추상클래스를 사용한다.
=> 코딩을 함에 있어 특정 부분의 기능적인 부분을 만들고자 하면 인터페이스를 사용한다.
이클립스파일
솔직히 스캔하기에 너무 많다. 그냥 파일로 남긴다.
상속 패키지
월급계산프로그램 패키지
인터페이스 패키지
인형뽑기
'국비교육기관 > 수업' 카테고리의 다른 글
26일차_자바_GUI_JDBC (0) | 2021.04.19 |
---|---|
25일차_자바_GUI (0) | 2021.04.16 |
23일차_자바_ArrayList_MVC (0) | 2021.04.14 |
22일차_자바_OOP (0) | 2021.04.13 |
20일차_자바_재귀함수_Method-Overloading (0) | 2021.04.09 |
댓글