JAVA · 함수형/Stream
순수 함수와 참조 투명성
순수 함수의 조건과 참조 투명성이 코드 품질에 미치는 영향을 알아봅니다.
함수형/Stream중급순수함수참조투명성부수효과함수형
핵심 설명
순수 함수의 조건과 참조 투명성이 코드 품질에 미치는 영향을 알아봅니다.
Java code
import java.util.*;
import java.util.function.*;
public class PureFunction {
// 순수 함수: 같은 입력 -> 항상 같은 출력, 부수 효과 없음
static int add(int a, int b) { return a + b; }
static String greet(String name) { return "Hello, " + name; }
// 비순수 함수: 외부 상태에 의존
static int counter = 0;
static int impureCount() { return ++counter; } // 부수 효과!
// 순수 함수로 변환: 상태를 인자로 전달
static int pureCount(int current) { return current + 1; }
// 참조 투명성: 함수 호출을 결과값으로 대체 가능
// add(2, 3) -> 항상 5로 대체 가능 (참조 투명)
// impureCount() -> 대체 불가 (참조 불투명)
// 실전: 순수 함수 파이프라인
static List<String> processNames(List<String> names) {
return names.stream()
.map(String::trim) // 순수
.filter(s -> !s.isEmpty()) // 순수
.map(String::toUpperCase) // 순수
.sorted() // 순수
.toList(); // 순수
}
public static void main(String[] args) {
List<String> input = List.of(" Bob ", "Alice", "", "Charlie ");
List<String> result = processNames(input);
System.out.println(result); // [ALICE, BOB, CHARLIE]
System.out.println(input); // 원본 불변
}
}학습 팁
순수 함수는 테스트하기 쉽고, 캐싱(메모이제이션)이 가능하며, 병렬 실행에 안전합니다. 가능하면 순수 함수로 작성하세요.
주의할 점
스트림의 forEach에서 외부 변수를 수정하는 것은 순수하지 않습니다. collect나 reduce로 결과를 모으세요.
자주 묻는 질문
순수 함수와 참조 투명성란 무엇인가요?
순수 함수의 조건과 참조 투명성이 코드 품질에 미치는 영향을 알아봅니다.
순수 함수와 참조 투명성 학습 시 주의할 점은 무엇인가요?
스트림의 forEach 에서 외부 변수를 수정하는 것은 순수하지 않습니다. collect 나 reduce 로 결과를 모으세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.