객체지향_ 상속을 통해 새로운 기능 추가하기_마지막 (스테픈 2km완료)

지난 포스팅에서 Todolist를 완성키겼다

image.png

image.png

나는 객체지향 프로그래밍 방식으로 코드를 작성하고 구현을 했다고 생각했는데

곰곰히 생각해보니 캡슐화, 추상화까지만 작성이 되어있다.

그래서 어제 만든 프로젝트가 과연 객체지향 프로그래밍의 원칙을 지켜가며 만들었는가 하는 부분에 의문점이 생겼다.

기능을 좀더 추가하여 객체지향 프로그래밍의 원칙을 지켜 사용하는 방향으로 추가 작업을 하게 되었다.

HTML코드는 최대한 간단하게 작업했다.

html의 Detail태그를 활용해 접고 펴는것으로 화면에 보여지게 작성했다.

image.png

Details 태그는 태그로 아코디언 형식의 메뉴를 만들어준다.

이렇게 만든뒤

이제 상속을 통해 기능을 확장하는 부분까지 처리를 해보도록 하겠다.

구매리스트에는 기존에 없는 기능을 추가하고

기존에 있던 함수를 변경하여 적용하려고 한다.

이는 다형성과 상속을 전부 사용하기 위해서다.

image.png

updateTodo 메서드를 쇼핑리스트에서는

기존에 Todo리스트에 작성한 텍스트의 내용을 수정하는 기능을 추가 하려고 한다.

이는 객체지향 프로그래밍의 다형성

  • 메서드 오버라이딩(Method Overriding) : 부모 클래스의 메서드를 자식 클래스에서 재정의하여 사용하는 것을 말한다.

해당 특징을 활용하는것이다.

또한 상속을 통해 만들게될 장바구니 클래스에서만 사용이 가능한 특별한 메서드를 추가하려고 한다.

바로 전체 삭제기능이다.

이제 코드로 구현해보자

image.png

현재 부모 클래스로부터 상속을 받게되면

모든 변수에서 오류가 발생한다
이는 부모의 클래스에서 private로 처리가 되어있어서 발생하는 문제이다.

자식 클래스에서 부모클래스의 요소를 전달 받으려면

protected를 사용해야 상속받은 클래스에서도 접근이 가능하게 된다.

image.png

기존의 private를 전부 변경시켰다.

그리고 getTodo() 메서드에 모든 로직을 전부 함수로 분리시켰다.

image.png

image.png

이렇게 분리시킨 이유는

새로운 리스트에는 html태그에 수정버튼을 추가하려고 하는데

getTodo에 기능이 전부 들어있어서

상속을 통해 구현할때마다

자식클래스에서 메서드 오버라이딩을 통해

getTodo 메서드를 전체수정해야하는 상황이 되기때문에

기능별로 전부 쪼개서 필요한 메서드만 부분적으로 수정해서 사용할 수 있도록 변경했다.

html태그를 가공하는 부분과 이벤트 등록하는 부분을 메서드 오버라이딩을 통해 다른 기능으로 동작하도록 하려고 한다.

update메서드는 기능의 추가를위해 인터페이스에 내용을 변경했다.

image.png

해당 액션을 넣어서 텍스트를 action이 있으면 텍스트를 변경시키려고 한다.

image.png

상속을 통해 새로운 클래스를 생성했다.

기존 투두리스트의 메서드를 기능별로 조금더 쪼개서 변경하게 되었는데

image.png

기능별로 메소드를 전부 분리시키고 거기에 맞게 인터페이스를 최신화 했다.

상속을 통해 새로운 기능을 더 추가하고 사용하려고 하니

기존의 구조에서 부족한 부분이 느껴져서 계속 수정하게 된다.

image.png

쇼핑 리스트는 해당 버튼을 추가해서

리스트 전체 삭제하는 기능을 추가했고

작성한 텍스트를 수정하는 기능도 추가했다.

image.png

gettodo에 있던 메서드를 분리시켜 만든 elementmaker메서드인데

여기에도 동그라미 친 부분이 메서드 오버라이딩을 사용해 추가한 내용들이다.

A태그를 하나 더 만들어서 수정버튼으로 변경시켰다.

image.png

allclear 메서드를 만들어 리스트를 전부 삭제시키는 기능을 넣었다.

image.png

사실 함수를 하나 더 만들어도 되지만

객체지향 프로그래밍의 원칙인 다형성을 지키기 위해

기존 함수를 수정해서 분기처리를 할 수 있도록 변경했다.

  • 메서드 오버라이딩을 통해 기존의 Todolist 클래스에서의 메서드와는 전혀 다르게 동작한다.

image.png

완성된 코드이다

이대로 정상 동작하는지 테스트 해보겠다.

CSS 부분은 포스팅은 생략했다.

약간의 배치정도만 수정했다.

07.05.2024 15_16.gif

정상적으로 동작하는걸 볼 수 있다.

오늘은 저번글에서 자세하게 예를 들어 설명하지 않았던 다형성과 상속을 실제로 적용해봤다.

구조화 된 하나의 Todolist 클래스를 상속 받아서 다른 종류의 상품 구매목록앱을 제작해보며

구조를 어떻게 짜는게 재사용성에 좋은지를 다시금 생각하게 하는 시간이었다고 생각한다.

코드는 여기에서 자세하게 확인이 가능하다.

https://github.com/yonggyu01/todo_typescript

배포는 여기

https://yonggyu01.github.io/todo_typescript/

image.png

이렇게 완성된 투두리스트 앱의 구조를 다이어그램으로 정리해봤다.

이런 구조를 갖게되었다.

처음의 구조와는 완전 다른데

객체지향 프로그래밍의 원칙을 지키며 프로그래밍을 하려고 노력하다보니

조금더 나은 방식으로 구조가 변경된것 같다.


스테픈 2km완료

image.png

Coin Marketplace

STEEM 0.27
TRX 0.11
JST 0.030
BTC 67653.09
ETH 3789.60
USDT 1.00
SBD 3.50