OOP에서 개발자가 해야할 일은 클래스를 설계하는 것입니다.
클래스를 설계하려면 구현하고자 하는 현실의 객체의 특성을 파악해야합니다.
그리고 객체의 특성을 파악하기 전에 객체를 식별해야합니다.
무슨 얘기냐면, 개발자가 프로그램을 만들 때에는 해결하고자 하는 문제가 있습니다.
고객, 회사 동료, 자기 자신이 가지고 있는 문제를 프로그램을 통해서 해결합니다.
프로그램으로 문제를 해결하려면 우선은 어떤 문제가 있는지 파악을 해야합니다.
예를 들자면, 편의점에 진열되어 있는 식품들의 종류과 개수를 파악하는 프로그램을 만들고자 한다면(problem description, 이 과제에 대해 어떤 식으로 프로그램을 만들지, 문제에 대한 설명에서 프로그램과 관련된 요소를 추출해야합니다.
이를 problem statement라고 합니다.
편의점에 샌드위치, 삼각김밥, 빵, 콜라, 사이다, 아이스크림이 있다.
샌드위치는 3개, 삼각김밥은 2개, 빵은 10개, 콜라는 11병, 사이다는 12병, 아이스크림응 5개가 있다.
위의 예시에서 프로그램과 관련된 것은 샌드위치, 삼각김밥, 빵, 콜라, 사이다, 아이스크림과 각각의 개수 입니다.
즉, 직면한 문제에 대한 설명에서 프로그램을 만들때 필요한 요소를 추출하는데, OOP에서는 보통 설명 안에 있는 명사로 프로그램에서 활용할 클래스를 식별합니다.
연습해봅시다.
Our store serves fast food. THe items sold include pizza, burgers, and hot dogs. We also sell soda, water, and French fries. Clients may choose to buy one or more items. if they choose to buy more than one item, they receive a special disount of 20%. the store has five employees.
위의 예제에서 Class로 해야할 것은, fast food, pizza, burger, hotdog,
drink, soda, water, French Fries, Client, discount, Store, Employee라고 저는 식별했습니다.
하지만 여기서 한번 더 분석을 해봐야합니다.
예문에서 클래스가 될만한 명사를 뽑았지만
- 위의 용어들은 프로젝트의 범위에 필요한가?
- 고객과 직원을 추적하는 기능이 필요하지 않다면, 고객과 직원은 필요없습니다.
- 용어는 클래스의 예를 나타내는가?
- 우리가 만들고자 하는 프로그램에 중요한 클래스인가? ← 이게 가장 중요한 질문입니다.
- 클래스는 프로그램에서 사용되어야만 합니다.
위의 질문을 생각해서 다시헌번 필터링하면
해당되는 클래스는 pizza, burgers, hotdog, soda, water, french fries가 될겁니다.
(food는 pizza, burger, hotdog 등을 일반화시킨 용어로, 위의 문제설명에 기반한 프로그램을 만들 때는 필요없을 수도 있습니다.)
다른 예시를 보고 다시한번 분석해봅시다.
Our electronics store sells laptops, desktops, tablets, smartphones, notebooks, pen drives and headphones. We also sell accessories for these devices. The store has 10 employees and one manager. Clients are registerd when they make ther first puchase.
클래스가 될 만한 명사
laptops, desctops, tablest, smpartphones, notebooks, pen dirves, headphones, accessories, employees, manager, clients
이 밖에 별다른 설명이 없다면, 고객이 첫 구매를 했을 시, 등록되어야 하니까 고객 클래스가 필요할테고 그 고객을 등록하는 작업을 직원과 매니저가 하니까 직원과 매니저 또한 클래스가 필요할 거라고 생각했습니다.
purchase도 필요하게 클래스로 사용하는 경우도 있을 수 있습니다. 구매한 물건을 기록하고자 한다던가 말이죠.
마지막 예제입니다.
Our maze game will have five levels. The player will move to each level once it reaches the goal.
There are two types of enemies: ants and toads. if the player collides with either one of thme, the level starts again until the player has no more lives left.
클래스가 될 만한 명사는 ants, toads, player, level입니다.
이런식으로 직면한 문제에 대한 설명에서 프로그램에서 활용될 요소(여기서는 클래스)를 식별하는게 가장 먼저 필요합니다.
식별한 용어가 정말로 프로그램을 만들 때 필요한지 곰곰히 생각해보고 필요하다면, 클래스로 활용합니다.
여기까지가 처음 OOP로 프로그래밍을 할 때 먼저 분석해야할 부분입니다.
다음에 필요한 것은 클래스의 특성을 정리하는 겁니다.
Reference
Udemy python OOP How to Identify classes in a problem description
'Python' 카테고리의 다른 글
객체 지향 프로그래밍의 장점 (0) | 2023.07.01 |
---|---|
객체 지향 프로그래밍이란 (0) | 2023.07.01 |
Faker seed를 사용해봤습니다 (0) | 2023.05.15 |
Python에서 super() 함수의 이해 (0) | 2023.02.12 |