객채지향프로그래밍, 함수형 프로그래밍 차이

Lia·2024년 2월 21일
0

객체지향 프로그래밍은?

데이터와 이를 처리하는 함수를 객체로 묶어 설계하는 방식
객체는 속성(데이터)과 메서드(함수)를 포함하고있다.

class Animal { // Animal이라는 클래스를 정의함.틀이라고 생각하자
  constructor(name) { // 생성자 함수. Animal 클래스로 객체를 생성할 때 'name' 매개변수를 받아옴. 여기서는 Dog 문자열을 받아옴!
    this.name = name; // 'this' 키워드는 Animal클래스의 인스턴스를 가리킴. 즉 dog객체를 가리킴. 
    // this.name은 객체의 이름 속성에 'name' 매개변수의 값을 할당함.
    즉 dog객체의 name은 Dog임
  }
  
  speak() { // 'speak' 메서드. 
    console.log(`${this.name} makes a sound.`); // 'this.name'은 해당 객체의 'name' 속성을 사용함. 콘솔에 동물의 이름과 함께 "makes a sound."를 출력함.
  }
}


const dog = new Animal('Dog'); // 'new' 키워드를 사용해 Animal 클래스의 인스턴스인 'dog' 객체를 생성함. 이때 'Dog' 문자열이 생성자에 전달됨. 인스턴스임 !

dog.speak(); // dog 객체의 'speak' 메서드를 호출함. 결과적으로 "Dog makes a sound."가 콘솔에 출력됨.

그럼 왜쓰는가 ~ ?

  1. 확장성
  2. 유지보수

코드로 확인해보자면 애니멀 클래스에는 모든 동물들이 할수있는 행동같은 메서드들이 포함된다.

예를들어 짖는다. 잔다. 뛴다. 와 같은것들.
그런데 강아지가 짖는소리는 멍멍 고양이는 냐옹~

그걸 애니멀클래스의 정의하면 어긋난다. 때문에 강아지라는 클래스를 확장하여 사용할수있다. 아래 코드를 참고하자 !

class Animal {
  constructor(name) {
    this.name = name;
  }
  
  speak() {
    console.log(`${this.name} makes a sound.`);
  }
}

class Dog extends Animal {
  constructor(name) {
    super(name);
  }
  
  wagTail() {
    console.log(`${this.name} wags its tail.`);
  }
}

class Cat extends Animal {
  constructor(name) {
    super(name);
  }
  
  purr() {
    console.log(`${this.name} is purring.`);
  }
}

const dog = new Dog('Buddy');
dog.speak(); // "Buddy makes a sound." 출력
dog.wagTail(); // "Buddy wags its tail." 출력

const cat = new Cat('Whiskers');
cat.speak(); // "Whiskers makes a sound." 출력
cat.purr(); // "Whiskers is purring." 출력

함수형 프로그래밍이란 ?

불변성유지하며 함수를 중심으로 작성한다.
작은 함수들을 조합하여 복잡한 로직을 구성한다.

왜쓰는가 ?

  • 딱봐도 가독성이 좋다.
// Animal 생성 함수
const createAnimal = name => ({
  name: name,
  speak: () => {
    console.log(`${name} makes a sound.`);
  }
});

// Dog 생성 함수
const createDog = name => {
  const animal = createAnimal(name);
  return {
    ...animal,
    wagTail: () => {
      console.log(`${name} wags its tail.`);
    }
  };
};

// Cat 생성 함수
const createCat = name => {
  const animal = createAnimal(name);
  return {
    ...animal,
    purr: () => {
      console.log(`${name} is purring.`);
    }
  };
};

// Dog 인스턴스 생성 및 사용
const dog = createDog('Buddy');
dog.speak(); // "Buddy makes a sound." 출력
dog.wagTail(); // "Buddy wags its tail." 출력

// Cat 인스턴스 생성 및 사용
const cat = createCat('Whiskers');
cat.speak(); // "Whiskers makes a sound." 출력
cat.purr(); // "Whiskers is purring." 출력
profile
https://lia-portfolio.vercel.app/

0개의 댓글