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 ์ ๋ณํ๊ฐ ์๋ค.
'๐ WEB > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Enum Type ์์ Function Interface ํ์ฉ (0) | 2022.04.01 |
---|---|
Test-Driven-Development ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ (0) | 2022.03.24 |
[MapStruct] ๋ด๊ฐ ์ฐพ์ ์ฐ๋ ค๊ณ ์ ๋ฆฌํ ๊ธ (0) | 2022.03.16 |
[Lombok] Difference Between @Value and @Data (0) | 2022.03.11 |
๋ด๊ฐ ๋ณด๋ ค๊ณ ์ ๋ฆฌํ๋ JAVA ๋ฉํฐ ์ค๋ ๋ 5- ์ค๋ ๋ํ (0) | 2021.10.06 |