Java의 이중 콜론 연산자(::)

Joel Swapnil Singh 2023년10월12일
  1. Java에서 이중 콜론(::) 연산자를 사용하는 경우 및 방법
  2. 결론
Java의 이중 콜론 연산자(::)

Java에서는 이중 콜론 연산자(::)를 사용하여 해당 클래스 이름을 통해 메서드를 참조하여 메서드를 호출할 수 있습니다.

람다 식을 사용하여 이 작업을 수행할 수도 있습니다. 여기에서 찾을 수 있는 유일한 차이점은 :: 연산자를 사용하는 동안 이름으로 메서드를 직접 참조할 수 있다는 것입니다.

반면 람다 식을 사용할 때는 호출해야 하는 메서드에 대한 대리자가 필요합니다. 이 기사에서는 Java에서 :: 연산자를 사용하는 방법에 대해 설명합니다.

Java에서 :: 연산자를 사용할 수 있는 곳은 다양합니다. 메소드를 참조하기 위해 :: 연산자를 사용할 수 있습니다.

따라서 ::를 사용하여 클래스나 객체에서 정적 메서드를 추출할 수 있습니다. 생성자에 :: 연산자를 사용할 수도 있습니다.

또한 입력 스트림이 제공되면 :: 연산자를 사용하여 입력 스트림의 요소를 인쇄할 수 있습니다.

Java에서 이중 콜론(::) 연산자를 사용하는 경우 및 방법

:: 연산자를 사용하여 정적 메서드, 인스턴스 메서드, 수퍼 메서드, 특정 유형의 임의 개체의 인스턴스 메서드, 심지어 클래스 생성자를 처리할 수 있습니다.

각각의 접근 방식에 대해 하나씩 논의해 보겠습니다.

정적 메서드를 다루는 동안

정적 메소드를 다룰 때 Java에서 :: 연산자를 사용할 수 있습니다. 클래스의 정적 메서드에 대한 참조를 얻으려면 먼저 클래스 이름을 작성한 다음 :: 연산자를 작성한 다음 메서드 이름을 작성합니다.

이 접근 방식의 구문을 살펴보겠습니다.

통사론:

(ClassName::methodName)

이제 작동 방식을 이해하기 위해 아래 코드를 살펴보겠습니다.

import java.util.*;
public class Main {
  static void staticFunction(String s) // static function which is called using :: operator
  {
    System.out.println(s);
  }
  public static void main(String args[]) {
    List<String> list = new ArrayList<String>();
    list.add("This");
    list.add("is");
    list.add("an");
    list.add("example");
    list.forEach(Main::staticFunction);
  }
}

출력:

This
is
an
example

인스턴스 메소드를 다루는 동안

인스턴스 메소드를 다룰 때 Java에서 :: 연산자를 사용할 수도 있습니다.

클래스의 인스턴스 메소드에 대한 참조를 얻으려면 먼저 클래스의 객체를 작성합니다. 그런 다음 :: 연산자를 넣고 마지막으로 메서드 이름을 작성합니다.

이 접근 방식의 구문을 살펴보겠습니다.

통사론:

(ObjectOfTheClass::methodName)

이제 작동 방식을 이해하기 위해 아래 코드를 살펴보겠습니다.

import java.util.*;
public class Main {
  void instanceFunction(String s) // function which is called using :: operator
  {
    System.out.println(s);
  }
  public static void main(String args[]) {
    List<String> list = new ArrayList<String>();
    list.add("This");
    list.add("is");
    list.add("an");
    list.add("example");
    Main object = new Main();
    list.forEach(object::instanceFunction);
  }
}

출력:

This
is
an
example

슈퍼 메소드를 다루는 동안

수퍼 메소드를 다룰 때 Java에서 :: 연산자를 사용할 수도 있습니다.

클래스의 super 메소드를 참조하기 위해 먼저 super 키워드를 작성합니다. 그런 다음 :: 연산자를 넣고 마지막으로 메서드 이름을 작성합니다.

이 접근 방식의 구문을 살펴보겠습니다.

통사론:

(super::methodName)

이제 작동 방식을 이해하기 위해 아래 코드를 살펴보겠습니다.

// Java code to show use of double colon operator for super methods
import java.util.*;
import java.util.function.*;
class SuperClass {
  // super function to be called
  String printFunction(String s) {
    return ("This is Print function output from the SuperClass: " + s);
  }
}
public class Main extends SuperClass {
  // instance method to override super method
  @Override
  String printFunction(String s) {
    // call the super method
    // using double colon operator
    Function<String, String> func = super::printFunction;
    String newValue = func.apply(s);
    System.out.println(newValue);
    return newValue;
  }
  public static void main(String[] args) {
    List<String> list = new ArrayList<String>();
    list.add("This");
    list.add("is");
    list.add("an");
    list.add("example");
    Main object = new Main();
    list.forEach(object::printFunction);
  }
}

출력:

This is Print function output from the SuperClass: This
This is Print function output from the SuperClass: is
This is Print function output from the SuperClass: an
This is Print function output from the SuperClass: example

특정 유형의 임의 개체의 인스턴스 메서드를 처리하는 동안

특정 유형의 임의 객체의 인스턴스 메소드를 처리할 때 Java에서 :: 연산자를 사용할 수도 있습니다.

특정 유형의 임의 개체의 인스턴스 메서드를 참조하려면 먼저 클래스 이름을 작성합니다. 그런 다음 :: 연산자를 넣고 마지막으로 메서드 이름을 작성합니다.

이 접근 방식의 구문을 살펴보겠습니다.

통사론:

(ClassName::methodName)

이제 작동 방식을 이해하기 위해 아래 코드를 살펴보겠습니다.

// Java code to show the use of double colon operator for instance method of arbitrary type
import java.util.*;
class Test {
  String s = null;
  Test(String s) {
    this.s = s;
  }
  // instance function to be called
  void instanceFunction() {
    System.out.println(this.s);
  }
}

public class Main {
  public static void main(String[] args) {
    List<Test> list = new ArrayList<Test>();
    list.add(new Test("This"));
    list.add(new Test("is"));
    list.add(new Test("an"));
    list.add(new Test("example"));
    list.forEach(Test::instanceFunction); // call the instance method using double colon operator
  }
}

출력:

This
is
an
example

클래스 생성자를 다루는 동안

클래스 생성자를 다룰 때 Java에서 :: 연산자를 사용할 수도 있습니다.

클래스 생성자에 대한 참조를 얻으려면 먼저 클래스 이름을 작성합니다. 그런 다음 :: 연산자를 넣고 마지막으로 특정 클래스의 생성자를 호출하는 new를 작성합니다.

이 접근 방식의 구문을 살펴보겠습니다.

통사론:

(ClassName::new)

이제 작동 방식을 이해하기 위해 아래 코드를 살펴보겠습니다.

// Java code to show the use of double colon operator for class constructor
import java.util.*;
public class Main {
  public Main(String s) {
    System.out.println(s);
  }
  public static void main(String[] args) {
    List<String> list = new ArrayList<String>();
    list.add("This");
    list.add("is");
    list.add("an");
    list.add("example");
    list.forEach(Main::new); // call the instance method using double colon operator
  }
}

출력:

This
is
an
example

결론

이 글에서는 자바에서 이중 콜론 연산자(::)를 사용하여 다섯 곳을 살펴보았다.

모든 기술에는 의미가 있으며 위의 상황이 발생할 때마다 :: 연산자를 적용할 수 있습니다. 부적절하게 사용하면 잘못된 상황이 발생할 수 있으므로 구문에 주의하십시오.

관련 문장 - Java Operator