본문 바로가기

패스트캠퍼스 환급 챌린지

[패스트캠퍼스 수강 후기] {자바 인강} 100% 환급 챌린지 {14} 회차 미션

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