Ted's Codding study
제네릭, 클래스, 배열 메서드를 활용한 회원 관리 프로그램 구현. 본문
TypeScript
제네릭, 클래스, 배열 메서드를 활용한 회원 관리 프로그램 구현. Ted93 2024. 7. 7. 19:27
1. 회원 정보
- name(이름), age(나이), active(활성 상태)의 속성을 가짐
- active 속성은 기본값으로 true값을 가짐(회원이 기본적으로 활성 상태)
2. 회원 관리 프로그램
- 회원을 추가(addMember)
- 회원을 검색(findMember)
- 회원을 제거(removeMember)
- 활성화된 회원만 필터링(filterActiveMember)
3. 기능 추가
Member 클래스 확장
- Member 클래스를 상속받는 VIPMember 클래스를 정의
- rewardPoints(보상점수) 속성을 가짐
- 생성자를 통해 초기화 가능 (Member 클래스의 속성은 super())
회원 나이 평균 계산하기
- Membership 클래스에 getAverageAge 메서드를 추가
- 현재 목록에 있는 모든 회원들의 나이 평균을 계산하여 반환
비활성 회원 검색 기능을 추가
- Membership 클래스에 filterInactiveMembers 메서드를 추가
- 활성 상태가 아닌(active 속성값이 false) 회원들만 필터링하여 반환
class Member {
constructor(
public name: string,
public age: number,
public active: boolean = true,
) {}
}
class Membership<T extends Member> {
private members: T[] = [];
addMember(member: T) {
this.members.push(member);
}
findMember(name: string): T | undefined {
return this.members.find((member) => member.name === name);
}
removeMember(name: string): void {
const index = this.members.findIndex((member) => member.name === name);
if (index !== -1) {
this.members.splice(index, 1);
}
}
filterActiveMembers(): T[] {
return this.members.filter((member) => member.active);
}
}
//! MemberShip 클래스 사용 예시
let membership = new Membership<Member>();
let memberA = new Member('테드', 30);
membership.addMember(memberA);
membership.addMember(new Member('챨리', 29));
membership.addMember(new Member('마이클', 22));
membership.addMember(new Member('마커스', 25, false));
console.log(membership.findMember('챨리')); // Member { name: '챨리', age: 29, active: true }
console.log(membership.findMember('헤일리')); // undefined
let activeMembers = membership.filterActiveMembers();
console.log(activeMembers);
// [
// Member { name: '테드', age: 30, active: true },
// Member { name: '챨리', age: 29, active: true },
// Member { name: '마이클', age: 22, active: true }
// ]
membership.removeMember('챨리');
console.log(membership.findMember('챨리')); // undefined