CodeGym /Java Blog /๋ฌด์ž‘์œ„์˜ /์˜ˆ์ œ๊ฐ€ ํฌํ•จ๋œ Java ์ˆ ์–ด
John Squirrels
๋ ˆ๋ฒจ 41
San Francisco

์˜ˆ์ œ๊ฐ€ ํฌํ•จ๋œ Java ์ˆ ์–ด

๋ฌด์ž‘์œ„์˜ ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
์ผ๋ฐ˜์ ์œผ๋กœ ์ˆ ์–ด๋Š” ๊ฐ’์ด ์ฐธ์ธ์ง€ ๊ฑฐ์ง“์ธ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์ง„์ˆ ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ˆ ์–ด๋Š” ๋ถ€์šธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•˜๋‚˜์˜ ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. Functional Interface Predicate๋Š” Java 8์—์„œ ์‹คํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. "Functional"์€ ํ•˜๋‚˜์˜ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋งŒ ํฌํ•จํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ์ธ์ˆ˜๋ฅผ ์ˆ˜๋ฝํ•˜๊ณ  ๋ถ€์šธ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. Java์—์„œ ๊ธฐ๋Šฅ ์ธํ„ฐํŽ˜์ด์Šค๋Š” Lambda ํ‘œํ˜„์‹, ์ƒ์„ฑ์ž ๋ฐ ๋ฉ”์„œ๋“œ ์ฐธ์กฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ Java 8 ์ˆ ์–ด๋Š” ์˜ค๋ธŒ์ ํŠธ ์ฝœ๋ ‰์…˜์— ๋Œ€ํ•œ ํ•„ํ„ฐ๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ณ  ์ผ๋ถ€ ์—ฐ์Šต ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ๋ด…์‹œ๋‹ค. ์˜ˆ์ œ๊ฐ€ ์žˆ๋Š” Java ์ˆ ์–ด - 1

๊ฐœ๋ฐœ์ž๊ฐ€ ์ˆ ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐœ๋ฐœ์ž๋Š” ๋ฏธ๋ฆฌ ์ •์˜๋œ ๊ธฐ์ค€์— ๋”ฐ๋ผ ํ•ญ๋ชฉ์„ ํ‰๊ฐ€ํ•˜๊ณ  ๋ถ€์šธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ชจ๋“  ์ž‘์—…์— ์กฐ๊ฑด์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ˆ ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์ž‘์—…์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.
  • ์ •์ˆ˜ ์ง‘ํ•ฉ ํ•„ํ„ฐ๋ง.
  • ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ์ „ ์ •์˜๋œ ์—ฌ๋Ÿฌ ์กฐ๊ฑด์„ ์ค€์ˆ˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์—ฌ ๋ชฉ๋ก ์ •๋ ฌ(์˜ˆ: ๊ฐ€๊ฒฉ ๋ฐ ์ค‘๋Ÿ‰ ์กฐ๊ฑด์„ ์„ค์ •ํ•˜์—ฌ ํ’ˆ๋ชฉ ๋ฒ”์œ„ ๊ตฌ์„ฑ).
  • ๋™์‹œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํŒจํ‚ค์ง€ ์‚ฌ์šฉ.
์ˆ ์–ด๋Š” ์†Œํ”„ํŠธ์›จ์–ด ํ…Œ์ŠคํŠธ์—์„œ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์  ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ๋‹จ์œ„๋ฅผ ๋” ์‰ฝ๊ฒŒ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ณ  ์•ฑ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ๊ด€๋ฆฌ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

Java์˜ ์ˆ ์–ด ๊ตฌ๋ฌธ

java.util.function.Predicate๋Š” Lambda์—์„œ ํ‰๊ฐ€ ๋…ธ์ถœ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋Œ€์ฒด ๋ฐฉ๋ฒ•์œผ๋กœ Java 8์—์„œ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค์˜ ํ‘œ์ค€ ๋ณด๊ธฐ๋Š” Predicate<T> ์ž…๋‹ˆ๋‹ค . ์—ฌ๊ธฐ์„œ T๋Š” ๋ถ€์šธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋‹จ์ผ ์ธ์ˆ˜์ž…๋‹ˆ๋‹ค. Java ์ˆ ์–ด์—๋Š” ์ฃผ์–ด์ง„ ๊ฐ์ฒด์—์„œ ์ด ์ˆ ์–ด๋ฅผ ํ‰๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์ (์ถ”์ƒ) ๋ฉ”์†Œ๋“œ test(Object)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@FunctionalInterface
public interface Predicate<T> {
boolean test(T t);
}
๋‹ค์Œ์€ "๋ณด๋‹ค ํผ", "๋ณด๋‹ค ์ž‘์Œ" ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ •์ˆ˜๋ฅผ ํ•„ํ„ฐ๋งํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์กฐ๊ฑด์ž๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์˜ˆ์ž…๋‹ˆ๋‹ค.

// An example of a simple Java predicate
  
import java.util.function.Predicate; 
public class PredicateExample { 
    public static void main(String[] args) 
    { 
        // Creating predicate 
        Predicate<Integer> lesserThan = i -> (i < 18);  
  
        // Calling Predicate method 
        System.out.println(lesserThan.test(10));  
    }
}
์ถœ๋ ฅ์€ 10 < 18์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฐธ์ด ๋ฉ๋‹ˆ๋‹ค . filter() ์— ์ˆ ์–ด๊ฐ€ ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ์˜ˆ์ž…๋‹ˆ๋‹ค . ์ˆ ์–ด๋Š” ์—ฐ๋ น ๋ชฉ๋ก์—์„œ ๋ชจ๋“  ์„ฑ์ธ์„ ํ•„ํ„ฐ๋งํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

  import java.util.List;
  import java.util.function.Predicate;

  public class PredicateExample {
      public static void main(String[] args) {
          List<Integer> ages = List.of(17, 18, 19, 28, 18, 28, 46, 7, 8, 9, 21, 12);
          NotLessThan18<Integer> isAdult = new NotLessThan18<>();
          ages.stream().filter(isAdult).forEach(System.out::println);
      }
  }



class NotLessThan18<E> implements Predicate<Integer> {

      @Override
      public boolean test(Integer v) {
          Integer ADULT = 18;
          return v >= ADULT;
      }
  }
์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
18 19 28 18 28 46 21

Java 8 ์กฐ๊ฑด์ž ๋ฉ”์„œ๋“œ

์ˆ ์–ด ์ธํ„ฐํŽ˜์ด์Šค์—๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • boolean test(T t)๋Š” ์ฃผ์–ด์ง„ ์ธ์ˆ˜์— ๋Œ€ํ•œ ์ˆ ์–ด๋ฅผ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • default Predicate<T> and(Predicate<? super T> other)๋Š” ์ด ์ˆ ์–ด์™€ ๋‹ค๋ฅธ ์ˆ ์–ด์˜ ๋‹จ๋ฝ ๋…ผ๋ฆฌ์  AND๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆ ์–ด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • default Predicate<T> ๋˜๋Š” ์ด ์ˆ ์–ด์™€ ๋‹ค๋ฅธ ์ˆ ์–ด์˜ ๋‹จ๋ฝ ๋…ผ๋ฆฌ์  OR์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ตฌ์„ฑ๋œ ์ˆ ์–ด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • default Predicate<T> negate()๋Š” ์ด ์ˆ ์–ด์™€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ฐ˜๋Œ€๋˜๋Š” ์ˆ ์–ด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • default Predicate<T> isEqual(Object targetRef) ๋Š” Objects.equals(Object, Object) ์— ๋”ฐ๋ผ ๋‘ ์ธ์ˆ˜๊ฐ€ ๊ฐ™์€์ง€ ํ…Œ์ŠคํŠธํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค .

๋ถˆ๋ฆฌ์–ธ ํ…Œ์ŠคํŠธ(T t)

์ด๊ฒƒ์€ ์ฃผ์–ด์ง„ ์ธ์ˆ˜๊ฐ€ ์ˆ ์–ด์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ‰๊ฐ€ํ•˜๋Š” Java ์ˆ ์–ด์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ์  ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์˜ˆ: ์—ฌ๊ธฐ์„œ๋Š” 18์„ธ ์ด์ƒ์˜ ๋ชจ๋“  ์‚ฌ๋žŒ์„ ์œ„ํ•œ ์ˆ ์–ด adult๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. test() ๋ฉ”์„œ๋“œ๋Š” ์ •์ˆ˜ ๊ฐ’์„ ๊ฐ€์ ธ์™€์„œ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

import java.util.function.Predicate;
public class PredicateTestTest {
   public static void main(String[] args) {
       Predicate<Integer> adult = i -> i >= 18;
       System.out.println(adult.test(12));
       System.out.println(adult.test(19));
       System.out.println(adult.test(21));
   }
}
์œ„ ์ฝ”๋“œ์˜ ์ถœ๋ ฅ์€ ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ์ฒซ ๋ฒˆ์งธ ๊ฒฝ์šฐ์—๋Š” 12๊ฐ€ 18๋ณด๋‹ค ์ž‘์œผ๋ฏ€๋กœ false๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ์™€ ์„ธ ๋ฒˆ์งธ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜์–ด ๋ฐ˜ํ™˜์ด true๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
๊ฑฐ์ง“ ์ฐธ ์ฐธ

๊ธฐ๋ณธ Predicate.and()

์ด ๋ฉ”์„œ๋“œ๋Š” "and" ์—ฐ์‚ฐ์ž๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์–ด์ง„ ์ˆ ์–ด ์ค‘ ํ•˜๋‚˜๊ฐ€ ์„ค์ •๋œ ์กฐ๊ฑด์„ ์ค€์ˆ˜ํ•˜์ง€ ์•Š์œผ๋ฉด ๋‹ค๋ฅธ ์ˆ ์–ด๋Š” ํ‰๊ฐ€๋ฅผ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ: and() ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ ์„ฑ์ธ์ด์ง€๋งŒ 65์„ธ ๋ฏธ๋งŒ์ธ ๋ชจ๋“  ์‚ฌ๋žŒ์„ ํ•„ํ„ฐ๋งํ•˜๋Š” ์ˆ ์–ด๋ฅผ Java๋กœ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค . predicate.add()๋ฅผ ์‚ฌ์šฉ ํ•˜๊ณ  ์ด๋Ÿฌํ•œ ์กฐ๊ฑด์— ๋Œ€ํ•ด ๋žŒ๋‹ค๋กœ Java ์กฐ๊ฑด์ž๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์กฐ๊ฑด์ด ์ฐธ์ด๋ฉด ์•ฑ์€ ๋‹ค์Œ ๋ฌธ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

import java.util.function.Predicate;

   public class PredicateDemo {
       public static void main(String[] args) {
           Predicate<Integer> adultYet = i -> i >= 18;
           Predicate<Integer> adultStill = i -> i < 65;
           System.out.println(adultYet.and(adultStill).test(5));
           System.out.println(adultYet.and(adultStill).test(38));
           System.out.println(adultYet.and(adultStill).test(90));
       }
   }
์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๊ฑฐ์ง“ ์ฐธ ๊ฑฐ์ง“

๊ธฐ๋ณธ Predicate.or()

Predicate.or() ๋ฉ”์„œ๋“œ๋Š” "OR" ์—ฐ์‚ฐ์ž๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‘ ์ˆ ์–ด ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ฐธ์ด๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๊ฐ€ ๊ฑฐ์ง“์ด๋”๋ผ๋„ ์กฐ๊ฑด์ด ์ฐธ์œผ๋กœ ์œ ์ง€๋จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: ์ด์ œ ๋ฌธ์ž์—ด์„ ํ‰๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•˜์œ„ ๋ฌธ์ž์—ด "my" ๋˜๋Š” "crayon"์ด ํฌํ•จ๋œ ๋ชจ๋“  ๊ตฌ๋ฌธ์„ ์ •๋ ฌํ•˜๋ ค๋ฉด OR ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด ๋ณด์‹ญ์‹œ์˜ค.

import java.util.function.Predicate;

  public class PredicateDemo2 {
      public static void main(String[] args) {
          Predicate<String> containsA = t -> t.contains("crayon");
          Predicate<String> containsB = t -> t.contains("my");
          System.out.println(containsA.or(containsB).test("here is my crayon"));
          System.out.println(containsA.or(containsB).test("here is my pencil"));
          System.out.println(containsA.or(containsB).test("here is John's crayon"));
          System.out.println(containsA.or(containsB).test("here is John's pencil"));
      }
  }
์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ฐธ ์ฐธ ์ฐธ ๊ฑฐ์ง“

๊ธฐ๋ณธ ์ˆ ์–ด ๋ถ€์ •()

๋ถ€์ •() ๋ฉ”์„œ๋“œ๋Š” ์‚ฌ์ „ ์ •์˜๋œ ๊ธฐ์ค€์„ ์ค€์ˆ˜ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ๊ฐ’์„ ์ˆ˜์ง‘ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ: "Tomatoes" ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์ •๋ ฌํ•˜๊ณ  "Red"๊ฐ€ ์•„๋‹Œ ๋ชจ๋“  ํ•ญ๋ชฉ์„ ์ฐพ์œผ๋ ค๋ฉด ์ˆ ์–ด๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์ „์ฒด ์‹œํ€€์Šค๋ฅผ ๋น ๋ฅด๊ฒŒ ์Šค์บ”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜๊ณ  ์™„๋ฃŒ๋˜๋ฉด ์†”๋ฃจ์…˜๊ณผ ๋น„๊ตํ•˜์—ฌ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

import java.util.function.Predicate;

public class PredicateDemo3 {
public static void main(String[] args) {
 Predicate<Integer> adult = i -> i >= 18;
System.out.println(adult.negate().test(7));  System.out.println(adult.negate().test(19))
  }
   }
์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
ํ—ˆ์œ„ ์‚ฌ์‹ค

์ •์  ์ˆ ์–ด isEqual(Object targetRef)

์ด ๋ฉ”์„œ๋“œ๋Š” ๋‘ ๊ฐœ์ฒด๊ฐ€ Objects.equals()์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์ •์˜๋œ ๊ฐ’๊ณผ ๊ฐ™์€์ง€ ํ™•์ธํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ์œ ์‚ฌํ•œ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ๋น„๊ตํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์— ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: ๋‘ ๊ฐœ์˜ ๋ฐฐ ๋งˆ์ฐจ๋ฅผ ๋น„๊ตํ•˜๊ณ  ๋‘ ๋งˆ์ฐจ์— ํ‘œ์ค€ ๋ฌด๊ฒŒ์™€ ์ƒ‰์ƒ์˜ ๊ณผ์ผ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๊ณ  ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค. ์ด ๊ฒฝ์šฐ ์ •์  ์ˆ ์–ด isEqual(Object targetRef)๊ฐ€ ์ •ํ™•ํžˆ ํ•„์š”ํ•œ ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค. isEqual์ด ๋‘ ๋ฌธ์ž์—ด์˜ ๋™๋“ฑ์„ฑ์„ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค .

import java.util.function.Predicate;

public class PredicateDemo2 {
   public static void main(String[] args) {
       Predicate<String> i = Predicate.isEqual("here is my crayon");
       System.out.println(i.test("here is my pencil"));
       System.out.println(i.test("here is my crayon"));
   }
}
๋ถ„์„ ์ค‘์ธ ๊ฐœ์ฒด๊ฐ€ ํ‘œ์ค€ ์กฐ๊ฑด์„ ์ค€์ˆ˜ํ•˜๋Š” ๊ฒฝ์šฐ ํ•จ์ˆ˜๋Š” true๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๊ฑฐ์ง“ ์ฐธ

์ž๋ฐ” IntPredicate

Java IntPredicate๋Š” ๊ธฐ๋Šฅ์  ์ธํ„ฐํŽ˜์ด์Šค์ด๋ฏ€๋กœ ์ด๋ฅผ ๋žŒ๋‹ค ์‹ ๋˜๋Š” ๋ฉ”์„œ๋“œ ์ฐธ์กฐ์— ๋Œ€ํ•œ ํ• ๋‹น ๋Œ€์ƒ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. IntPredicate๋Š” ์ •์ˆ˜์—์„œ ์ž‘๋™ํ•˜๋ฉฐ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์กฐ๊ฑด์ž ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ˆ ์–ด ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ฐ™์ด IntPredicate์—๋„ test() , and() , negate() ๋˜๋Š” () ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ IntPredicate์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์–ด๋ ˆ์ด์—์„œ ๋ชจ๋“  ์„ฑ์ธ(18์„ธ ์ด์ƒ)์„ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.

import java.util.Arrays;
import java.util.function.IntPredicate;

public class IntPredicateExample {

   public static void main(String[] args) {

       int[] ages = { 18, 28, 18, 46, 90, 45, 2, 3, 1, 5, 7, 21, 12 };

       IntPredicate p = n -> n >= 18;

       Arrays.stream(ages).filter(p).forEach(System.out::println);
   }
}
์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
18 28 18 46 90 45 21

Java์—์„œ ๊นจ๋—ํ•œ ์กฐ๊ฑด์ž ์ž‘์„ฑ

Java ์ˆ ์–ด๋Š” ๊ธฐ๋Šฅ์ด ๋›ฐ์–ด๋‚˜๊ณ  ์ž‘์—…ํ•˜๊ธฐ์— ์žฌ๋ฏธ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ž‘์„ฑํ•˜๋Š” ๋žŒ๋‹ค ํ‘œํ˜„์‹์ด ์ฝ”๋“œ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์—ผ๋‘์— ๋‘์ง€ ์•Š์œผ๋ฉด ์ง€์ €๋ถ„ํ•œ ์กฐ๊ฑด์ž๋กœ ์ฝ”๋“œ ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ์„ฑ์ด ๊ฐ์†Œํ•  ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๊ธฐ๋Šฅ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ  ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
  • Don't Repeat Yourself โ€” ๋‘ ๋ฒˆ ์ด์ƒ ๋ฐ˜๋ณต๋˜๋Š” ๊ฐ’, ๋ฉ”์„œ๋“œ ๋ฐ ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•˜์—ฌ Java๋กœ ์ˆ ์–ด๋ฅผ ๊ตฌ์„ฑํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ด๋Ÿฐ ์‹์œผ๋กœ ์ƒ์‚ฐ์ ์ธ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์ง€์ €๋ถ„ํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์•ฑ ์ฝ”๋“œ์—์„œ ์กฐ๊ฑด์ž๋ฅผ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์™ธ์—๋Š” ์ˆ ์–ด ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ผ์ •์„ ๋งŒ๋“ค๊ณ  ์ด๋ฅผ ๊ณ ์ˆ˜ํ•˜์‹ญ์‹œ์˜ค.
  • ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฐ ์ปดํฌ์ง€์…˜ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค๊ฐ€ ๋ถ€ํ’€์–ด ์˜ค๋ฅด์ง€ ์•Š๊ณ  ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • Java ์ˆ ์–ด๋ฅผ Helper ํด๋ž˜์Šค๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์ด ํ–ฅ์ƒ๋˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•ด์ง‘๋‹ˆ๋‹ค.
  • ๊ฐ€๋…์„ฑ - ๊ฐ€๋Šฅํ•˜๋ฉด ๋ณต์žกํ•œ ์ˆ ์–ด๋ณด๋‹ค ํ•œ ์ค„ ๋ฌธ์žฅ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ๊ธฐ๋Šฅ ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ๊ณผ์‹œํ•˜๊ณ  ์‹ถ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์œ ์ง€ ๊ด€๋ฆฌ์— ์žˆ์–ด์„œ๋Š” ์ ์„์ˆ˜๋ก ์ข‹์Šต๋‹ˆ๋‹ค.
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION