728x90

<클래스와 인스턴스 & 객체지향 이후 공부할 것>

  1. 상속(inheritance)
  2. 인터페이스(Interface)
  3. 패키지(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

Concreate1Concreate2서로 다른 클래스이지만 확신할 수 있는 것은,

이 클래스들은 반드시 contract에 약속되어 있는 정의되어있는 형태의 멤버들을 구현하고 있을 것이라는 것. 일종의 무언의 약속

 

3.패키지(package)

클래스 이름은 같지만 기능이 다른 두 클래스가 존재할 수 있다

ex)서로 다른 디렉토리에 있는 경우, 한 컴퓨터 안에 같은 이름의 파일이 여러개 존재할 수 있는 것

 

클래스도 서로 다른 패키지에 묶여있으면 같은 이름의 클래스가 공존 가능

많아진 클래스정리정돈의 도구로써 사용되는 것이 패키지

패키지보다 더 큰 정리정돈의 도구는 자바에서는 없다

 

 

 

 

 

728x90
반응형

+ Recent posts