WEB/JAVA

Enum Type ์—์„œ Function Interface ํ™œ์šฉ

ํšŒ์‚ฌ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๋‹ค๊ฐ€ ํ•จ์ˆ˜ํ˜•์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•œ ๋ถ€๋ถ„์ด ์žˆ์–ด์„œ ๊ณต๋ถ€ํ•ด๋ณด์•˜๋‹ค.

์‚ฌ์šฉํ•œ ๋ชฉ์ ์€ ํ•ด๋‹น EnumType ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ทธ Enum์— ๋งž๊ฒŒ ๋ฐฐ์—ด์„ ์ •๋ ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์‹ ์„ ํ•œ ์ถฉ๊ฒฉ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค ..ใ…Ž.. ๊ทธ๋ž˜์„œ ์ €๋„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•ด๋ณด๊ณ  ๊ณต๋ถ€ํ•ด๋ดค์Šต๋‹ˆ๋‹ค! 

 

package com.example.demo;

import java.util.function.Function;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public enum ItemType {

  AA("์ƒ์ˆ˜",CalRatio::getRatio),
  BB("์Œ๋ฃŒ",CalRatio::getRatio),
  CC("๊ณผ์ž",CalRatio::getRatio);

  final String type;
  final Function<Long,Integer> ratio;

}

@RequiredArgsConstructor ์„ ์‚ฌ์šฉํ•ด final ์ด ์„ ์–ธ๋œ ํ•„๋“œ๋“ค์ด ์ปดํŒŒ์ผ ์‹œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ƒ์„ฑ์ž๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค

Long ํŒŒ๋ผ๋ฏธํ„ฐ , Integer ๋ฆฌํ„ด ํ•œ๋‹ค.

ItemType(String type, Function<Long, Integer> ratio) {
  this.type = type;
  this.ratio = ratio;
}

 

 

์ƒ์ˆ˜์— ๋Œ€ํ•œ ์•„์ดํ…œ์˜ ๊ฐ€์ค‘์น˜๋ฅผ ๊ตฌํ•ด ์ฝ”๋“œ์— ํฌํ•จ ์‹œ์ผœ์•ผ ํ•œ๋‹ค๋ฉด 

 

(๋Œ€์ถฉ ๋งŒ๋“  ์˜ˆ์ œ)

package com.example.demo;

public class CalRatio {

  public static Integer getRatio(Long weight){

    double totalWeight = 300;

    return (int)Math.round(weight / totalWeight *100);
  }

}

 

์ด๋Ÿฐ์‹์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

ItemType.AA.getRatio().apply(120L)

 

๋งŒ์•ฝ์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋‘ ๊ฐœ์ธ ๊ฒฝ์šฐ์—๋Š” BiFunction ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค! 

Integer,Integer ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›๊ณ  Integer๋กœ Return ํ•ฉ๋‹ˆ๋‹ค!

final BiFunction<Integer,Integer,Integer> totalAccount;
public static Integer getTotalAccount(int quantity, int unit) {

  return Math.round(quantity * unit);
}
ItemType.AA.totalAccount.apply(250,5)

 

๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด๋ณธ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•ด๋ด…๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ์–ด๋–ค์‹์œผ๋กœ ์ œ ํ”„๋กœ์ ํŠธ์— ๊ณ ๋„ํ™” ํ• ์ง€ ์„ค๋ ˆ์ด๋„ค์š”..........

๋ฐ˜์‘ํ˜•