๐ŸŒ WEB/JAVA

Java 8 Interface - default ๋ฉ”์„œ๋“œ, static ๋ฉ”์„œ๋“œ

์• ์ •์“ฐ 2022. 3. 23. 17:01

Java 8 ์ดํ›„๋กœ interface์— ๋Œ€ํ•œ ์ •์˜๊ฐ€ ๋ช‡๊ฐ€์ง€ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค. 

 

์ƒํ™ฉ 

์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” Interface ์— ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ ํ•˜๊ณ  ์‹ถ๋‹ค. ํ•˜์ง€๋งŒ ์ด Interface๋ฅผ implemnets ๋ฐ›๊ณ  ์žˆ๋Š” class ๋ชจ๋‘๊ฐ€ ์ด ๊ธฐ๋Šฅ์˜ ๊ตฌํ˜„์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผ๋งŒ ํ•œ๋‹ค. 

 

default ๋ฉ”์„œ๋“œ

์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ default ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธ๋˜๋ฉด ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. -> ๊ตฌํ˜„์ฒด๋“ค์€ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

package com.example.demo;

public interface UserService {
  
  String getName(Long userId);
  
  int getAge(Long userId);
  
  /**
   * @implSpec ์ด ๊ตฌํ˜„์ฒด๋Š” ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
   * @param userId
   * @return
   */
  // ์ด ๋ถ€๋ถ„์€ ๊ตฌํ˜„์ฒด์—์„œ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
  default String getUserAddress(Long userId){
    return getName(userId) + "์˜ ์ฃผ์†Œ๋Š” ";
  }

}
package com.example.demo;


public class UserServiceImpl implements UserService {

  @Override
  public String getName(Long userId) {
    return "";
  }

  @Override
  public int getAge(Long userId) {
    return 0;
  }

  // ์žฌ์ •์˜ ๊ฐ€๋Šฅ
  @Override
  public String getUserAddress(Long userId) {
    return userId + "์˜ ์ฃผ์†Œ๋Š” ์—†์„ ๊ฒƒ์ž„ ๊ณ„์†Œ์˜ฅ";
  }
  
  // static ๋ฉ”์„œ๋“œ
  static void anyPrint() {
    System.out.println("anyPrint");
  }
}

์ฃผ์˜ํ•ด์•ผํ•˜๋Š” ์ 

- ์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ๋ฉ”์„œ๋”๋Š” ๊ตฌํ˜„์ฒด๊ฐ€ ๋ชจ๋ฅด๊ฒŒ ์ถ”๊ฐ€๋œ ๊ธฐ๋Šฅ์œผ๋กœ NPE ๋ผ๋˜์ง€ ์•Œ ์ˆ˜ ์—†๋Š” ์—๋Ÿฌ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค. 

- ์‚ฌ์šฉํ•˜๊ฒŒ๋  ๊ฒฝ์šฐ ๋ฌธ์„œํ™” ํ•„์ˆ˜ (@implSpec)

- ๊ฐ™์€ ๊ตฌํ˜„์ฒด๋ฅผ ์ •์˜ํ•œ Interface 2๊ฐœ ๋ฅผ implemnts ๋ฐ›์€ ๊ฒฝ์šฐ ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋‚˜๊ธฐ ๋–„๋ฌธ์— ์žฌ์ •์˜ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

( ์ด๋Ÿฐ ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธธ๊นŒ? ๐Ÿค” )

 

static ๋ฉ”์„œ๋“œ

  public static void main(String[] args) {
    UserService.anyPrint();
  }

 

์œ„์—์„œ ์ •์˜ํ•œ๊ฒƒ๊ณผ ๊ฐ™์ด static ์„ ๋ฉ”์„œ๋“œ์— ๋ถ™์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค. ๋ฐ”๋กœ UserService Interface ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์ด๋ ‡๊ฒŒ ์ถ”๊ฐ€๋œ default ๋ฉ”์„œ๋“œ๋กœ ์ธํ•ด JAVA API ์˜ ๋ณ€ํ™”๊ฐ€ ์žˆ๋‹ค.

 

 

 

 

๋ฐ˜์‘ํ˜•