<클래스와 인스턴스 & 객체지향 이후 공부할 것>
- 상속(inheritance)
- 인터페이스(Interface)
- 패키지(package)
1.상속inheritance
class Parent{
public void method1() {
// ...
}
}
Q.위에서 저 클래스를 직접 수정할 수 없거나 변경하지 말아야하는 상황에서 method2()를 추가하고 싶다면?
A.저 클래스 전체를 카피해서 이름 다른 클래스로 해서 method2()를 추가
이 방법은 class parent의 method1의 코드 개선, 버그 해결 등을 하게 되면 이 method1을 카피한 수많은 모든 코드를 다 수정해야함. 일 산더미...?
이 문제 개선을 위해 자바에서 제공하는 기능이 상속
extends를 붙여서 상속표시
class Child extends Parent{
public void method2() {
// ...
}
}
Child라는 클래스에는 실제로는 method1이 구현되어 있지 않지만, 상속 받았기에 class Parent에 있기에 class Child에서도 사용 가능해짐
- class parent 코드가 수정되면, 동시에 다른 자식 클래스에도 다 같이 수정된다
2.인터페이스(Interface)
interface contract {
public String method1(String param);
public int method2(int param);
}
원래 인터페이스에는 메소드의 이름, 파라미터와 리턴값의 형식은 적으나 실제 내용은 적지 않는다
class Concreate1 implements Contract {
}
위 코드 의미
Concreate1 이라는 클래스는 Contract 라는 인터페이스에 적혀있는 메소드들의 형식을 구현했다 or 구현해야한다는 의미
이 상태로 Concreate1 클래스를 컴파일하면 컴파일조차 안된다
- 규칙위반 때문
- Contract에 적혀 있는 메소드들을 정의해야한다는 규칙을 어겼기 때문
implements에 contract를 적어놓게 되면 class Concreate1은 interface의 contract에 적혀있는 형태의 메소드를 구체적으로 구현해야하는 책임을 갖는다
class Concreate1 implements Contract{
public String method1(String param) {
return "foo";
}
public int method2(int param) {
return 1;
}
}
// 클래스 콘크리트1 안에 내용이 메소드1의 내용으로 채워짐
마찬가지로 class Concreate2
Concreate1과 Concreate2는 서로 다른 클래스이지만 확신할 수 있는 것은,
이 클래스들은 반드시 contract에 약속되어 있는 정의되어있는 형태의 멤버들을 구현하고 있을 것이라는 것. 일종의 무언의 약속
3.패키지(package)
클래스 이름은 같지만 기능이 다른 두 클래스가 존재할 수 있다
ex)서로 다른 디렉토리에 있는 경우, 한 컴퓨터 안에 같은 이름의 파일이 여러개 존재할 수 있는 것
클래스도 서로 다른 패키지에 묶여있으면 같은 이름의 클래스가 공존 가능
많아진 클래스를 정리정돈의 도구로써 사용되는 것이 패키지
패키지보다 더 큰 정리정돈의 도구는 자바에서는 없다
'JAVA > 생활코딩 JAVA 객체지향' 카테고리의 다른 글
JAVA 객체 지향 프로그래밍 - 8.2. 활용 - 인스턴스화 (0) | 2022.02.02 |
---|---|
JAVA 객체 지향 프로그래밍 - 8.1. 활용 - 클래스화 (0) | 2022.02.02 |
JAVA 객체 지향 프로그래밍 - 7. 생성자(constructor)와 this (0) | 2022.02.01 |
JAVA 객체 지향 프로그래밍 - 6. static (0) | 2022.02.01 |
JAVA 객체 지향 프로그래밍 - 5. 인스턴스 (0) | 2022.02.01 |