네로개발일기

개발자 네로의 개발 일기, 자바를 좋아합니다 !

반응형

abstract 키워드 - 추상 메서드와 추상 클래스

추상 클래스: 추상 메서드를 하나라도 가지고 있는 클래스

 

* 문제점

1. 동물 클래스(상위 클래스)가 있고 동물 참조 변수를 통해 모든 동물들(하위 클래스)는 울게 하고 싶다.

2. 동물 클래스는 어떻게 울어야 하는지 모른다. (우는 메서드를 정의할 수 없다.)

 

* 해결 방법

추상 클래스와 추상 메서드를 활용한다.

추상 메서드로 하위 클래스에게 메서드의 구현을 강제할 수 있다. 

 

[ 정리 ]

  • 추상 클래스는 인스턴스를 만들 수 없다. (new 사용 불가)
  • 추상 메서드는 하위 클래스에게 메서드의 구현을 강제한다.
  • 추상 메서드를 포함하는 클래스는 반드시 추상 클래스여야 한다.

 

클래스 생성 시의 실행 블록, static 블록

public class Driver05 {
	public static void main(String[] args) {
		System.out.println("main 메서드 시작!");
		System.out.println(Animal.age);
	}
}

class Animal {
	static int age = 0;

	static {
		System.out.println("Animal class ready on!");
	}
}

Anima의 static 블록은 언제 처음 실행될까?

Animal.age 정적 속성을 사용할 때이다.

 

해당 클래스가 코드에서 맨 처음 사용될 때 스태틱 영역에 로딩되며, 이때 단 한번만 static 블록이 실행된다.

 

* 클래스가 제일 처음 사용되는 경우

  • 클래스의 정적 속성을 사용할 때
  • 클래스의 정적 메서드를 사용할 때
  • 클래스의 인스턴스를 만들 때

[ 정리 ]

  • 스태틱 블록에서 사용할 수 있는 속성과 메서드는 static 멤버 뿐이다. (일반 객체는 아직 생성 전이므로 접근할 수 없다.)
  • 프로그램 실행 시 클래스를 바로 static 영역에 로딩하지 않는 것은 메모리를 좀 더 효율적으로 사용하기 위해서이다. 

final 키워드

final 클래스

final 클래스는 상속을 허락하지 않는다. (하위 클래스를 만들 수 없다.)

 

final 변수

public class 고양이 {
	final static int 정적상수1 = 1;
	final static int 정적상수2;

	final int 객체상수1 = 1;
	final int 객체상수2;

	static {
		정적상수2 = 2;

		// 상수는 한번 초기화 되면 값을 변경할 수 없다.
		// 정적상수2 = 4;
	}

	고양이() {
		객체상수2 = 2;

		// 상수는 한번 초기화 되면 값을 변경할 수 없다.
		// 객체상수2 = 4;

		final int 지역상수1 = 1;
		final int 지역상수2;

		지역상수2 = 2;
	}
}

* final 변수 초기화 방법

final static으로 정의된 정적 상수는 선언과 동시에 초기화하거나 정적 생성자에 해당하는 static 블록 내부에서 초기화 가능

final로 정의된 객체 상수는 똑같이 객체 상수 선언과 동시에 초기화하거나 객체 생성자에서 초기화 가능하다.

 

final 메서드

public class 동물 {
	final void 숨쉬다() {
		System.out.println("호흡 중");
	}
}

class 포유류 extends 동물 {
	// 에러 발생: Cannot override the final method from 동물
	/*
	 * void 숨쉬다() { System.out.println("호흡 중"); }
	 */
}

메서드가 final이면 최종 메서드이므로 오버라이딩을 금지한다.

 

interface 키워드와 implements 키워드

인터페이스는 public 추상 메서드와 public 정적 상수만 가질 수 있다.

default 메서드가 추가되었다.

 

728x90
반응형
blog image

Written by ner.o

개발자 네로의 개발 일기, 자바를 좋아합니다 !