Mixins가 무엇인가요?

0

기술면접 - TS

목록 보기
16/18

Mixins가 무엇인가요?

Mixins의 개념

Mixins은 객체 지향 프로그래밍에서 코드 재사용과 다중 상속을 지원하기 위한 기법입니다. Mixins은 클래스에 재사용 가능한 기능 세트를 추가하는 방법을 제공합니다.

기본 클래스 상속 방식에서는 하나의 클래스가 다른 클래스를 상속받아 부모 클래스의 기능을 재사용할 수 있습니다. 그러나 다중 상속은 몇 가지 문제점을 가질 수 있습니다. 예를 들어, 다중 상속 시 메서드 충돌이 발생할 수 있거나, 클래스 계층 구조가 복잡해지는 등의 문제가 있을 수 있습니다.

Mixin은 다중 상속의 문제를 해결하기 위한 대안으로, 기능 단위로 분리된 클래스를 생성한 다음, 필요한 클래스에 Mixin을 적용하여 기능을 조합하는 방식입니다. Mixin은 클래스가 아니며, 단순히 메서드와 속성의 집합이며, 이러한 Mixin들을 다른 클래스에 적용하여 그 클래스의 기능을 확장할 수 있습니다.

일반적으로 Mixin을 사용하려면 다음과 같은 단계를 따릅니다:

1. Mixin 정의: 필요한 기능을 가진 Mixin 클래스를 정의합니다. 이 클래스는 일반적으로 메서드와 속성을 가지며, 기능을 제공하는 역할을 합니다.

2. 클래스에 Mixin 적용: Mixin을 사용하려는 클래스에 Mixin을 적용합니다. 이는 다른 클래스를 상속받는 대신 Mixin을 적용하는 것입니다. 이를 통해 Mixin의 기능이 클래스에 추가됩니다.

3. Mixin 합성: 여러 개의 Mixin을 조합하여 필요한 기능을 가진 클래스를 만듭니다. 이는 Mixin들을 단순히 합성하는 것으로, Mixin들의 기능이 함께 결합됩니다.

Mixins은 코드 재사용과 기능 조합을 통해 유연하고 모듈화된 클래스 디자인을 구현하는 데 유용합니다. 다른 클래스들 간의 복잡한 상속 구조를 피하면서도 필요한 기능을 조합하여 사용할 수 있습니다. TypeScript는 Mixins을 지원하기 위한 문법과 도구를 제공하여 코드 재사용을 더욱 간편하게 할 수 있도록 도와줍니다.

Mixins의 예시

다음은 TypeScript에서 Mixins을 사용하는 간단한 예시입니다:

// Mixin 정의
class Printable {
  print() {
    console.log(this);
  }
}

class Savable {
  save() {
    console.log("Saving:", this);
  }
}

// Mixin을 적용할 클래스
class User {
  constructor(private name: string) {}
}

// Mixin 합성
interface User extends Printable, Savable {}
applyMixins(User, [Printable, Savable]);

// Mixin을 적용한 클래스 사용
const user = new User("John");
user.print(); // 출력: User { name: 'John' }
user.save(); // 출력: Saving: User { name: 'John' }

// Mixin 합성을 위한 유틸리티 함수
function applyMixins(derivedCtor: any, constructors: any[]) {
  constructors.forEach((baseCtor) => {
    Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {
      derivedCtor.prototype[name] = baseCtor.prototype[name];
    });
  });
}

위의 예시에서 PrintableSavable은 두 개의 Mixin 클래스입니다. 각각 printsave라는 메서드를 가지고 있습니다. 그리고 User 클래스는 Mixin을 적용할 대상 클래스로, name 속성을 가지고 있는 간단한 사용자 클래스입니다.

User 클래스는 PrintableSavable을 합성하기 위해 User 클래스와 Mixin 클래스들을 결합시키는 인터페이스를 선언합니다. 그리고 applyMixins 함수를 사용하여 User 클래스에 Mixin의 기능을 적용합니다.

이제 User 클래스의 인스턴스를 생성하고 Mixin에서 제공하는 printsave 메서드를 사용할 수 있습니다. 이를 통해 user.print()user.save()가 기대한 대로 동작하게 됩니다.

위의 예시는 간단한 Mixins의 동작 원리를 보여주기 위한 것이며, 실제로는 더 복잡한 Mixin 조합 및 활용이 가능합니다. Mixins을 사용하면 여러 클래스 간의 기능을 조합하여 필요한 클래스를 유연하게 구성할 수 있으며, 코드의 재사용성과 모듈화를 향상시킬 수 있습니다.

profile
지치지 않는 백엔드 개발자 김성주입니다 :)

0개의 댓글