람다 공부를 위해 알아야 할 것들

정다운·2025년 4월 7일

고급자바

목록 보기
1/7

람다 없이 코드 조각 전달하기

값 매개변수화(Value Parameterization)

  • 문자값(Value), 숫자값(Value) 처럼 구체적인 값을 메서드 안에 두지 않고, 매개변수를 통해 외부에서 전달받는다.
  • 재사용성을 높이는 방법이다.
  • 값 매개변수화, 값 파라미터화 라고도 부른다.
public static void helloJava() {
        System.out.println("프로그램 시작");
        System.out.println("Hello Java");
        System.out.println("프로그램 종료");
    }

값 매개변수화 후 =>

public static void hello(String str){
        System.out.println("프로그램 시작"); // 변하지 않는 부분
        
        // 변하는 부분 시작
        System.out.println(str);
        // 변하는 부분 종료
        
        System.out.println("프로그램 종료"); // 변하지 않는 부분
    }
    public static void main(String[] args) {
        hello("hello Java");
    }

동작 매개변수화(Behavior Parameterization)

  • 코드 조각을 메서드 안에 두지 않고 매개변수를 통해 외부에서 전달 받는다.
  • 재사용성을 높이는 방법이다.
  • 동작 매개변수화, 동작 파라미터화, 행동 매개변수화, 행위 파라미터화 등으로 부른다.
public static void helloDice() {
        long startNs = System.nanoTime();

        //코드 조각 시작
        int randomValue = new Random().nextInt(6) + 1;
        System.out.println("주사위 = " + randomValue);
        //코드 조각 종료

        long endNs = System.nanoTime();
        System.out.println("실행 시간: " + (endNs - startNs) + "ns");
    }
    public static void main(String[] args) {
        helloDice();
    }

동작 매개변수화 후 =>

public static void hello(Procedure procedure){
        long startNs = System.nanoTime();

        //코드 조각 시작
        procedure.run();
        //코드 조각 종료

        long endNs = System.nanoTime();
        System.out.println("실행 시간: " + (endNs - startNs) + "ns");
    }

    public static void main(String[] args) {
        hello(() -> {
                int randomValue = new Random().nextInt(6) + 1;
                System.out.println("주사위 = " + randomValue);
        });
    }

함수 VS 메서드

객체(클래스)와의 관계

함수

  • 독립적으로 존재하며 클래스(객체)와 직접적인 연관이 없다.
  • 절차적 언어에서는 모든 로직이 함수 단위로 구성된다.

메서드

  • 클래스 또는 객체에 속해 있는 함수이다.
  • 객체의 상태에 직접 접근하거나 객체가 제공해야 할 기능을 구현할 수 있다.
  • 객체지향 언어에서 클래스 내부에 정의된 함수는 보통 메서드라고 부른다.

호출방식

함수

  • 호출 시에 객체 인스턴스가 필요 없다.
  • 보통 이름(매개변수) 형태로 호출된다.
  • 지역 변수, 전역 변수 등과 함께 동작, 클래스나 인스턴스 변수 등은 다루지 못한다.

메서드

  • 보통 객체(인스턴스).메서드이름(매개변수) 형태로 호출한다.
  • 호출될 때 해당 객체의 필드나 다른 메서드에 접근 가능하다.
  • 인스턴스 메서드, 정적 메서드, 추상 메서드 등 다양한 형태로 존재한다.

메서드는 클래스 내부의 함수이다.
함수는 객체와 상관없이 독립적으로 호출 가능하다.
-> 따라서 함수와 메서드는 수행하는 역할 자체는 같지만 소속과 호출 방식이 다르다.

람다 맛보기

  • 람다는 () -> {} 로 표현한다.
  • 람다를 사용할 때는 이름, 반환 타입은 생략, 매개변수와 본문만 적으면 된다.

0개의 댓글