자바의정석 Chapter7. 객체지향 프로그래밍 2


상속이란

  • 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것
  • extends 키워드를 사용함
  • 기존 코드를 재사용할 수 있기 때문에 생성산과 유지보수에 좋음
class Parent {
	
}

class Child extends Parent{
	//...
}

-상속에 대해서는 다시 정리를 해보겠습니다.

오버라이딩

  • 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것
  • 자손 클래스에서 오버라이딩 하는 메서드는 조상클래스의 메서드와 다음과 같은 조건이 있습니다.
    1. 이름이 같아야 합니다.
    2. 매개변수가 같아야 합니다.
    3. 반환 타입이 같아야 합니다.
    4. 접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없습니다.
    5. 조상 클래스의 메서드보다 많은 수의 예외를 선언 할 수 없습니다.
    6. 인스턴스메서드를 static메서드로 또는 반대로 변경할 수 없습니다.
class Parent {
	int x;
	int y;
	
	String getCalculator(){
		return x + y;
	}
	
	
class Child	extends Parent {
	int z;
	
	String getCalculator(){
		return x + y + z;
	}
}

super

  • 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조 변수입니다.
  • 클래스메서드(static메서드)에서는 super를 사용할 수 없습니다.
  • 인스턴스메서드에서만 사용할 수 있습니다.
[예제]
class SuperTest {
	public static void main(String args[]) {
		Child c = new Child();
		c.method();
	}
}

class Parent {
	int x=10;
}

class Child extends Parent {
	int x=20;
	
	void method() {
		System.out.println("x=" + x);
		System.out.println("this.x=" + this.x);
		System.out.println("super.x=" + super.x);
	}
[실행결과]
x=20
this.x=20
super.x=10

super()

  • 조상클래스의 생성자 입니다.
  • Object 클래스를 제외한 모든 클래스의 생성자 첫 줄에는 생성자, this() 또는 super()를 호출해야 합니다.
  • 직접 호출하지 않아도 컴파일러가 자동으로 첫 줄에 생성 합니다.

package

  • 클래스의 묶음입니다.
  • 하나의 소스파일에는 첫 번째 문장으로 단 한번의 패키지 선언만을 허용 합니다.
  • 모든 클래스는 반드시 하나의 패키지에 속해야 합니다.
  • 패키지는 점 (.) 을 구분자로 계층구조로 구성합니다.
  • 패키지는 물리적으로 클래스 파일을 포함하는 하나의 디렉토리입니다.
  • package 지시어를 사용합니다.

import

다른 패키지의 클래스를 사용하기 위해서는 해당 클래스의 패키지 및 클래스명을 선언 해주어야 하는데 이를 import 한다 라고 합니다.

static

  • 모든 자원에서 공유하기 위한 용도로 사용합니다.
  • static이 붙은 변수 및 메서드는 인스턴스를 생성하지 않아도 사용 가능합니다.

static 멤버변수

  • 모든 인스턴스에 공통적으로 사용되는 클래스변수
  • 클래스변수는 인스턴스를 생성하지 않고도 사용 가능
  • 클래스가 메모리에 로드될 때 생성

static 메서드

  • 인스턴스를 생성하지 않고도 호출이 가능
  • static 메서드 내에서는 인스턴스멤버들을 직접 사용할 수 없음

final

  • 변수에 사용시 값을 변경 할 수 없는 상수가 됨
  • 메서드에 사용시 오버라이딩을 할 수없게 됨

abstract

  • 추상의 의미를 가지고 있습니다.
  • 추상 클래스 - 클래스 내에 추상 메서드가 선언되어 있음을 의미
  • 추상 메서드 - 선언부만 작성하고 구현부는 작성되지 않은 메서드
  • 추상 클래스는 불안정한 클래스로써 그 자체로 인스턴스를 생성하지 못 합니다.

접근제어자

  • 클래스단위, 패키지단위 등 접근을 제한할 수 있습니다.
  • 캡슐화와 밀접한 관련이 있으며 외부로부터 데이터를 보호하기 위한 목적으로 사용됩니다.

접근제어자 종류

  • private - 같은 클래스 내에서만 접근 가능
  • default - 같은 패키지 내에서만 접근 가능
  • protected - 같은 패키지 및 다른 패키지의 자손 클래스에서 접근이 가능
  • public - 모든 곳에서 접근 가능

제어자 주의사항

  • 메서드에 static과 abstract를 함께 사용할 수 없습니다.
  • 클래스에 abstact와 final을 동시에 사용할 수 없습니다.
  • abstract메서드의 접근 제어자가 private일 수 없습니다.
  • 메서드에 private과 final을 같이 사용할 필요는 없습니다.

다형성

  • 다형성이란

추상클래스

  • 클래스를 설계도에 비유할 때 미완성 설계도라고 할 수 있습니다.
  • 미완성 메소드가 포함되어있는 클래스 입니다.
  • 인스턴스를 직접 생성 할 수 없고 자손에 의해 완성될 수 있습니다.
  • abstract 키워드를 사용합니다.
  • 추상화의 목적은 클래스간의 공통부분만을 그린 미완성 설계도를 이용하여 각각의 설계도를 완성하는것이 효율적

추상메서드

  • 선언부만 있으며 구현부{} 가 없습니다.
// 추성 메서드
abstract 리턴타입 메서드이름();

// 일반 메서드
abstract 리턴타입 메서드이름(타입 변수명, 타입 변수명..){
	// 구현 로직 내용
}

인터페이스

내부클래스

Reference

자바의 정석

태그:

카테고리:

업데이트:

댓글남기기