JAVA/객체지향 프로그래밍

코드 스타일 전쟁! 함수형 프로그래밍과 객체지향 프로그래밍의 모든 것 - 코드카인 티스토리

CodeCaine Explorer 2024. 12. 18. 09:12
728x90
반응형
SMALL

안녕하세요😊 코드카인 여러분!

오늘은 "함수형 프로그래밍과 객체지향 프로그래밍"에 대해 이야기해볼게요. 두 가지 프로그래밍 패러다임은 마치 두 가지 다른 요리 스타일처럼 각자만의 매력과 강점이 있답니다. 하나는 정교한 레시피에 따라 체계적으로 진행하는 방식이라면, 다른 하나는 재료 본연의 맛을 살리는 자연스러운 조리법 같아요. 그럼 본격적으로 시작해볼까요?


함수형 프로그래밍과 객체지향 프로그래밍이란?

🍳 객체지향 프로그래밍(OOP)이란?

객체지향 프로그래밍(Object-Oriented Programming)은 DATA를 객체로 묶어 다루는 방법이에요.
마치 레고 블록처럼 객체를 쌓아서 더 큰 구조를 만들어내는 방식이죠.

  • 주요 특징
    • 캡슐화(Encapsulation): 객체 내부의 DATA와 메서드를 하나로 묶어요.
    • 상속(Inheritance): 기존 객체의 속성을 물려받아 새로운 객체를 만들 수 있어요.
    • 다형성(Polymorphism): 같은 메서드 이름으로 다양한 기능을 구현할 수 있어요.
    • 추상화(Abstraction): 복잡한 것을 간단히 표현해요.

💡 비유:
객체지향 프로그래밍은 집을 짓는 것과 비슷해요. 각각의 방(객체)은 독립적으로 설계되었지만, 전체적으로 조화를 이루며 집을 완성하죠.


🥗 함수형 프로그래밍(FP)이란?

함수형 프로그래밍(Functional Programming)은 DATA를 상태로 관리하기보다 함수 중심으로 문제를 해결하는 방식이에요.
마치 요리 레시피에서 재료를 꾸준히 가공하는 단계와 비슷하답니다.

  • 주요 특징
    • 순수 함수(Pure Function): 함수가 같은 입력이면 항상 같은 출력을 내요.
    • 불변성(Immutability): DATA는 한 번 생성되면 변경되지 않아요.
    • 고차 함수(Higher-Order Function): 함수를 인자로 받거나 반환할 수 있어요.
    • 선언형 스타일(Declarative Style): 어떻게가 아니라 무엇을 해결할지에 초점이 맞춰져요.

💡 비유:
함수형 프로그래밍은 피자 만드는 과정과 같아요. 재료(DATA)는 그대로 두고, 순서에 따라 처리(함수)만 진행하면 완성!


🍕 둘의 차이를 비교해보자!

특징 객체지향 프로그래밍 함수형 프로그래밍
초점 객체(DATA와 행동) 함수와 DATA 변환
상태 관리 상태를 직접 관리하며 변경 가능 불변성을 유지하며 상태를 변경하지 않음
구현 방식 명령형(어떻게 구현할지 단계적으로 설명) 선언형(무엇을 할지만 설명)
대표 언어 Java, C++, Python Haskell, Scala, JavaScript (ES6 이상)
사용 사례 대규모 애플리케이션, 게임 개발 DATA 처리, 병렬 처리, 머신러닝

🛠️ 실전 예제로 이해하기

객체지향 프로그래밍 예제

class Animal {
    String name;

    public Animal(String name) {
        this.name = name;
    }

    public void speak() {
        System.out.println(name + "이(가) 소리를 냅니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal cat = new Animal("고양이");
        cat.speak(); // 출력: 고양이가 소리를 냅니다.
    }
}

함수형 프로그래밍 예제

const animals = ['고양이', '강아지', '토끼'];

const speak = (animal) => `${animal}이(가) 소리를 냅니다`;

animals.map(speak).forEach(console.log);
// 출력:
// 고양이가 소리를 냅니다
// 강아지가 소리를 냅니다
// 토끼가 소리를 냅니다

🎯 언제 어떤 방식을 선택할까?

  • 객체지향 프로그래밍을 선택할 때
    • 시스템이 크고 복잡하며, 여러 모듈로 나눌 필요가 있을 때
    • 상태(DATA)와 행동(로직)이 밀접하게 연결되어 있을 때
    • 코드 재사용성이 중요한 프로젝트
  • 함수형 프로그래밍을 선택할 때
    • DATA 변환과 처리가 주된 작업일 때
    • 병렬 처리나 동시성을 고려할 때
    • 코드의 가독성과 테스트 용이성이 중요할 때

😊 마무리하며..

함수형 프로그래밍과 객체지향 프로그래밍은 마치 서로 다른 도구 같은 존재예요. 상황에 따라 적합한 도구를 고르면 최고의 결과를 얻을 수 있답니다. 여러분의 코딩 여정이 이 두 가지 방법으로 더욱 풍성해지길 바랄게요. 🚀
코드카인 여러분, 항상 응원합니다! 💪

728x90
반응형
SMALL