1. 추상 클래스 응용 - 템플릿 메서드
템플릿 메소드 패턴 (template method pattern)
메소드에서 알고리즘의 골격을 정의한다.
알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있다.
템플릿 메소드를 이용하면 알고리즘의 구조는 그대로 유지하면서 서브클래스에서 특정 단계를 재정의 할 수 있다.
알고리즘의 틀을 만들기 위한 패턴이다.
이 패턴에서 틀(템플릿)이란 일련의 단계들로 알고리즘을 정의한 메소드다. 여러 던계 가운데 하나 이상이 추상 메소드로 정의되며, 그 추상 메소드는 서브클래스에서 구현된다. 이렇게 하면 서브클래스에서 일부분의 단계를 구현할 수 있도록 하면서도 알고리즘의 구조는 바꾸지 않아도 되도록 할 수 있다.
출처: https://jusungpark.tistory.com/24
디자인패턴 - 템플릿 메소드 패턴 (template method pattern)
템플릿 메소드 패턴 (template method pattern) 메소드에서 알고리즘의 골격을 정의한다. 알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있다. 템플릿 메소드를 이용하면 알고리즘의 구조
jusungpark.tistory.com
2. final 예약어
자바에서 클래스나 변수를 정의할 때 final 키워드를 사용할 수 있습니다. 클래스나 변수에 final을 붙이면 시간이 지나도 처음 정의된 상태가 변하지 않는 것을 보장한다는 의미입니다.
다음과 같은 용도로 사용됩니다.
- final 변수
- final 인자
- final 클래스
- final 메소드
각각 어떻게 final을 선언하고 정의하는지 알아보겠습니다.
1. final variables (변수)
다음과 같이 변수를 선언할 때, 클래스 앞에 final 키워드를 입력할 수 있습니다.
final String hello = "Hello world";
final 키워드가 붙은 변수는 초기화 후 변경할 수 없습니다. 다음과 같이 변경하려고 하면 컴파일 에러가 발생합니다.
final String hello = "Hello world"; hello = "See you around" // compile error!
if 문에서 초기화
변수를 선언할 때 꼭 초기화가 필요한 것은 아닙니다. 다음과 같이 if문을 사용하여 조건별로 초기화를 다르게 할 수 있습니다. 물론, 한번 초기화되면 다른 값으로 설정할 수 없습니다.
final String hello; boolean condition = true; if (condition) { hello = "Hello world"; } else { hello = "See you around"; }
클래스 생성자에서 초기화
클래스의 멤버 변수에 final을 사용할 때는 클래스의 생성자에서 초기화할 수 있습니다.
class AAA { final String hello; AAA() { hello = "hello world"; } }
static final 변수 초기화
static 변수도 다음과 같이 final 변수로 만들고 초기화할 수 있습니다. static final 변수도 일반적인 final 변수와 동일한 특징을 갖고 있습니다.
static final String hello = "hello world";
static final 변수를 선언할 때 초기화하지 싶지 않다면, 다음과 같이 static { } 안에서 초기화할 수 있습니다.
static final String hello; static { hello = "hello world"; }
2. final arguments (인자)
인자를 선언할 때 final 키워드를 사용할 수 있습니다. final로 선언된 인자는 메소드 내에서 변경이 불가능합니다.
따라서 다음과 같이 final int로 선언한 number는 읽을 수 있지만 number = 10처럼 값을 변경하려고 하면 컴파일 에러가 발생합니다.
public void func(final int number) { System.out.println(number); // number = 10; compile error! }
3. final 클래스
클래스를 정의할 때 다음과 같이 final 키워드를 사용할 수 있습니다.
final class AAA { final String hello; AAA() { hello = "hello world"; } }
변수가 아닌 클래스에 final을 붙이는 것은 어떤 의미일까요?
클래스에 final을 붙이면 다른 클래스가 상속할 수 없는 클래스가 됩니다. 만약 다음과 같이 final 클래스를 상속하려고 하면 컴파일 에러가 발생합니다.
final class AAA { final String hello; AAA() { hello = "hello world"; } } class BBB extends AAA() { // compile error! }
4. final 메소드
다음과 같이 클래스의 메소드에도 final keyword를 붙일 수 있습니다.
class AAA { final String hello = "hello world"; final String getHello() { return hello; } }
final 메소드는 Override가 안되도록 만듭니다.
예를 들면, 다음과 같이 AAA 클래스를 상속하는 BBB 클래스에서는 getHello()를 재정의할 수 없습니다. Override하려고 하면 컴파일 에러가 발생합니다.
class BBB extends AAA { @Override String getHello() { // compile error ! return "See you around"; } }
정리
지금까지 살펴본 내용들을 정리하면 final 키워드는 다음과 같이 상태 변경이 안되도록 합니다.
- final variables, arguments : 값이 변경되지 않도록 만듬
- final class : 클래스를 상속하지 못하도록 만듬
- final method : 메소드가 오버라이드되지 못하도록 만듬
출처: codechacha.com/ko/java-final-keyword/
Java - Final 키워드에 대한 이해
클래스, 메소드, 변수에 final을 붙이면 시간이 지나도 처음 정의된 상태가 변하지 않는 것을 보장한다는 의미입니다. static 변수에도 final을 붙일 수 있으며, final 변수를 선언할 때 바로 초기화를
codechacha.com
올인원 패키지 : JAVA 웹 개발 마스터👉https://bit.ly/35aoeAW
'패스트캠퍼스 환급 챌린지' 카테고리의 다른 글
[패스트캠퍼스 수강 후기] {자바 인강} 100% 환급 챌린지 {16} 회차 미션 (0) | 2020.11.18 |
---|---|
[패스트캠퍼스 수강 후기] {자바 인강} 100% 환급 챌린지 {15} 회차 미션 (0) | 2020.11.17 |
[패스트캠퍼스 수강 후기] {자바 인강} 100% 환급 챌린지 {14} 회차 미션 (0) | 2020.11.15 |
[패스트캠퍼스 수강 후기] {자바 인강} 100% 환급 챌린지 {13} 회차 미션 (0) | 2020.11.14 |
[패스트캠퍼스 수강 후기] {자바 인강} 100% 환급 챌린지 {12} 회차 미션 (0) | 2020.11.13 |