공부해봅시당
[CS] '명령형' 프로그래밍 vs '선언적' 프로그래밍 본문
명령형 프로그래밍 = 어떻게
명령형 프로그래밍에서는 '어떻게' 해야하는지 처리 방식을 모두 설명함
예시
루프를 사용하여 각 요소를 순회하고, 각 단계에서 무엇을 해야 하는지 명시적으로 지정함
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = 0;
for (int number : numbers) {
sum += number; // 각 숫자를 sum에 더함
}
System.out.println(sum); // 출력: 15
장단점
장점
1. 명확한 흐름 제어
명령형 프로그래밍은 알고리즘의 각 단계와 작업 흐름을 명확하게 제어할 수 있게 해줌
특히 복잡한 알고리즘과 로직을 구현할 때 유용할 수 있음
2. 직관적인 이해
프로그래밍 경험이 많지 않은 사람들에게는 명령형 접근 방식이 더 직관적으로 느껴질 수 있음
3. 세밀한 최적화 가능
개발자가 코드의 각 부분을 세밀하게 제어할 수 있기 때문에 성능 최적화를 위해 코드를 미세하게 조정할 수 있음
단점
1. 코드 길이와 복잡성
명령형 코드는 같은 작업을 수행하기 위해 더 많은 코드를 필요로 할 수 있으며, 이는 코드의 복잡성을 증가시킬 수 있음
2. 유지보수의 어려움
알고리즘 각 단계를 명시적으로 기술해야하기 때문에 코드가 길어지고 복잡해질 경우 유지보수가 어려워질 수 있음
3. 재사용성 감소
특정 문제에 대한 해결 방식을 구체적으로 명시하기 때문에 코드 재사용성이 감소할 수 있음
선언적 프로그래밍 = 무엇을
선언적 프로그래밍에서는 '무엇을' 해야하는지에 초점을 맞춤
예시
Java의 Stream API를 사용하여 '무엇을' 해야 하는지 명시하고, '어떻게' 그 작업을 수행할지에 대한 세부 사항은 추상화하여 숨김
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream() // 스트림 생성
.mapToInt(Integer::intValue) // 각 요소를 int로 변환
.sum(); // 모든 요소의 합을 계산
System.out.println(sum); // 출력: 15
장단점
장점
1. 가독성 향상
선언적 프로그래밍은 '무엇을' 해야 하는지에 집중하기 때문에 읽기 쉽고 이해하기 쉬운 코드 작성 가능
2. 코드 길이 감소
일반적으로 선언적 접근 방식은 더 적은 코드로 동일한 작업을 수행할 수 있게 해줌
덕분에 유지보수가 쉽고, 코드 간결성 유지에 도움을 줌
3. 재사용성 및 모듈성 향상
고수준의 추상화 덕분에 코드의 재사용성과 모듈성이 향상됨
더 큰 프로젝트와 라이브러리에서 특히 유용함
4. 병렬 처리 용이
선언적 프로그래밍은 데이터의 흐름에 중점을 두기 때문에 병렬 처리와 같은 고급 최적화를 적용하기가 더 쉬움
단점
1. 성능 최적화의 한계
추상화된 수준이 높기 때문에 성능 최적화에 제한이 있을 수 있음
명령형 프로그래밍에 비해 세밀한 성능 조정이 더 어려울 수 있음
2. 학습 곡선
스트림 API나 SQL과 같은 선언적 프로그래밍 패러다임을 처음 접하는 개발자에게는 학습 곡선이 있을 수 있음
3. 디버깅의 어려움
코드의 구체적인 실행 흐름을 직접 제어하지 않기 때문에 디버깅이 더 어려울 수 있음
오류의 원인을 파악하기 위해 추상화 레벨을 넘나들어야 할 수 있음
'STUDY > CS' 카테고리의 다른 글
[CS] 인코딩과 암호화, Base64는 인코딩일까 암호화일까? (0) | 2024.05.05 |
---|---|
[CS] UML(Unified Modeling Language) 관계 (1) | 2024.02.14 |
[CS 기초] Groovy란? (0) | 2023.11.06 |
[CS 기초] 고차함수 (2) | 2023.11.06 |
[CS 기초] 정적 스코프(Static Scope) vs 동적 스코프(Dynamic Scope) (0) | 2023.11.06 |