-
day19 - JAVA (자바 , 상속, super, Object 클래스, 오버라이딩, 다형성, 추상 클래스, pakage/import)KIC/JAVA 2021. 7. 16. 02:50반응형
[상속]
• 객체지향 개념의 가장 중요한 코드의 재사용을 프로그램으 로 구현하는 부분이다.
• 새로운 클래스를 생성할 때 처음부터 새로 작성하는 것이 아니라, 기존에 정의된 클래스로부터 중복되는 부분을 물려받아서 사용할 수 있다. 이후 새로운 클래스에서 추가되는 부분만 고심해서 프로그래밍하면 된다.
• 프로그램을 전체를 새로 개발한 것이 아니므로 프로그램 개발기간의 단축과, 비용의 감소를 가져올 수 있고, 이미 실 시스템에서 안정적으로 돌아가는 코드부분을 사용하기 때문에 시스템이 더 안정적이다.-> extends를 중심으로 왼쪽이 서브 클래스이고 오른쪽이 슈퍼클래스이다.
[super]
-> super 레퍼런스: 슈퍼클래스를 가리키는 레퍼런스
-> super()메소드: 슈퍼클래스의 생성자를 호출
-> this 레퍼런스나 super 레퍼런스는 static이 붙은 메소드 에서는 사용 할 수 없다. 따라서 main()메소드에서도 이들을 사용할 수 없다.[super() 예제]
[Object 클래스]
-> 모든 클래스의 부모 클래스이다.
-> 즉, Object클래스가 자바에서 '최상의 클래스'이다.
-> Object클래스에는 다양한 메소드가 존재하는데, 어떤 클래스에서도 이 메소드를 호출할수있다.-> 이렇게 모든 클래스들은 자신이 구현하지 않아도 이미 Object 클래스에 구현되어 있는 메소드들을 활용할 수 있다.
[자주쓰는 object 클래스 메소드 종류]
- equals() 메소드 : 두 객체가 동일한 객체라면 true를 리턴, 다르다면 false를 리턴.
- hashCode() 메소드 : 객체의 메모리 번지를 이용해서 해시코드를 만들어 리턴. 객체마다 다른값을 가지고 있음.
- toString() 메소드 : 객체의 문자 정보를 리턴. 객체를 문자열로 표현.[오버라이딩]
- 오버라이딩은 상속관계에서 발생하는데, 슈퍼클래스에서 상속받은 메소드를 그대로 사용하는 것이 아니라, 서브클 래스에 맞도록 고쳐서 사용하는 것을 말한다.
- 슈퍼클래스와 서브클래스에 같은 이름을 가진 메소드가 존재할 때, 슈퍼클래스의 메소드를 무시하고(override), 서브 클래스의 메소드를 사용하는 것으로, 메소드를 재정의하 는 것이다.[오버라이딩 주의점]
- 1. 슈퍼클래스의 메소드를 오버라이딩 하는 서브클래스의 메소드는, 메소드의 시그니쳐는 물론 리턴 타입까지 일치해야 한다. 일치하지 않으면 오버라이딩이 되지 않는다.
- 2. 서브클래스에서 재정의 되는 메소드의 접근제어자(public, private 등)는 슈퍼클래스의 오버라이드되는 메소드의 접근제어자와 같거나, 덜 제한적인 접근제어자를 써야한다.(슈퍼클래스에서 public을 썼는데 자식 클래스가 private를 쓸 수 없다.)
[오버라이딩 vs 오버로딩]
[다형성]
- 자바의 전반적으로 매우 중요한 개념이다.
- 자바에서 클래스의 객체를 생성하는데 융통성을 부여 하기 위해서 다형성이라는 매커니즘을 사용.
- '다형성'은 여러 개의 서로 다른 형식과 모양을 가진 다는 의미로, 다형성을 이용하면 객체의 유형에 따라 서로 다른 작업을 수행하도록 할 수 있다.
- 객체는 한가지 타입에 하나의 형태만을 생성하는 고정적인 형태보단, 한가지 타입으로 여러형태를 생성할 수 있는 유동적인 형태가 프로그램을 더욱 편하게 작성하게 해준다.[추상 클래스]
- 메소드에서 내용을 가지고 있다는 것은 바디(body: {}) 를 가진 메소드를 의미한다. 클래스가 가지고 있는 메소드가 모두 바디를 가지고 있으면 구체적 클래스라 부를 수 있다.
- 메소드가 바디를 가지고 있지 않고 메소드의 인터페이스 부분(선언부)만 갖고 있는 메소드가 하나라도 있으면 이 클래스를 추상클래스라 부른다.
- 이때 바디 없이 메소드의 선언부만 갖고 있는 메소드 를 추상메소드라 한다. 추상메소드는 메소드의 선언부 다음에 (세미콜론)이 온다.[추상 클래스 선언]
- 메소드의 끝이 {}없이 :(세미콜론) 으로 마무리된다. 추상클래스로부터 상속을 받는 경우 추상메소드의 바디부분을 반 드시 구현해야 한다. 반드시 추상메소드는 오버라이딩해야 한다.
- 추상 클래스는 객체를 생성할 수 없다.
- 객체를 생성하려면 클래스가 가지고 있는 메소드가 모두 바디를 가지고 있어야 한다.
- 추상 클래스는 상속을 통해서 완전해진다.
- 추상 클래스 선언시 abstract 키워드를 써서 선언한다.
[ex]
-> 추상 클래스라면 이 부분들에 반드시 abstract 키워드를 필수적으로 써야한다.
-> 이후 이렇게 @Override 를 통해 추상 메서드들을 구현한다.
-> 추상 메서드에서 구현해야할 area()와 length()는 반드시 구현해야 에러가 안난다.
[추상 클래스 간의 상속]
- 추상 클래스들간에도 상속이 가능하다.
- 일반 클래스들간의 상속 과 유사하지만 추상 클래스들간의 상속에서는 상속 받은 추상 메서드들을 꼭 재정의할 필요는 없다.
- 그냥 상속만 받아두고 있다가 언젠가 일반 클래스와 상속관계가 이루어 질 때가 있을 것 이고, 이때 재정의 하지 못했던 상속 받은 추상 메서드들을 모두 일반 클래스 내에서 재정의 해도 되기 때문이다.
[추상 클래스 사용 목적]
- 추상 클래스를 상속받는 클래스는 추상 클래스의 추상 메소드를 모두 오버라이딩 해야한다. 오버라이딩을 하지 않으면 에러가 난다.
- 추상메소드는
1. 그 클래스를 상속받는 클래스가 여러개여서 공통의 내용을 기술할 수 없거나 할 필요가 없는 경우
2. 어떠한 클래스에서 상속받을 지 알 수 없기 때문에 내용을 기술할 수는 없지만, 반드시 작성해야 하는 메소드의 상속을 받는쪽에서 반드시 구현(implements) 하도록 강제할 경우
에 사용한다.
- 필수적으로 작성해야 하는 메소드의 경우에 추상메소드로 선언해서 강제로 구현하도록 한다.
[pakage/import]
package : 클래스들의 모임.
- 클래스이름은 패키지명을 포함한다.
- package 설정은 파일의 처음에 한번만 설정이 가능하다.
- 하나의 파일에 있는 모든 클래스는 같은 패키지에 속한 클래스다.
import : 패키지명을 생략할 수 있도록 머리 사용된 클래스의 패키지를 선언하는 문장.
- 클래스의 이름을 생략할 수 있는 경우
1. 같은 패키지에 속한 클래스는 패키지명을 생략 가능함.2. java.lang 패키지에 속한 클래스들은 패키지명을 생략 가능함.
3. import 구문으로 설정된 클래스는 패키지 생략 가능300x250'KIC > JAVA' 카테고리의 다른 글
day21 - JAVA (inner class, static 내부 클래스, non-static 내부 클래스, 지역 내부 클래스, 무명 클래스) (0) 2021.07.17 day20 - JAVA (자바 , 인터페이스, final, static) (0) 2021.07.16 day18_2- JAVA (자바 , 변수의 초기화, toString) (0) 2021.07.15 day18_1- JAVA (자바 ,static 메서드, 인스턴스메서드, 메서드 오버로딩, 생성자, this) (0) 2021.07.15 day17- JAVA (자바 ,객체지향언어, 변수, 클래스변수, 인스턴스변수, 메서드, 매개 변수) (0) 2021.07.15