15Days) 객체지향 프로그래밍 심화(3) - BurgerQueen 주문 프로그램 만들기

nacSeo (낙서)·2022년 11월 9일
0

◉ 학습목표

1. 객체지향 프로그래밍의 핵심 원리를 이용해 실습 프로그램을 구현해낼 수 있다.
  1. 실습 (주문 프로그램 제작)

⦿ 학습내용

☞ 기본적인 프로그래밍 순서

✔︎ 내가 생각하는 기본적인 프로그래밍 순서
① 요구사항 분석
② 분석을 통한 프로그램 흐름 파악
③ 큰 틀을 잡고 세분화시켜가며 구조 잡아보기
④ 객체지향 원리를 적용시키며 기능 구현 코드짜기

☞ 역할과 구현의 분리

✔︎ 역할(추상적인 것)에 의존 ⭕️
✔︎ 구현(구체적인 것)에 의존 ❌
✔︎ 역할을 정의할 때 사용하는 것 : 인터페이스
🌟 결론 : 인터페이스를 활용하여, 구현에 의존하지 말고 역할에 의존하도록 하자!!!💯
※ 프로그램에 새로운 기능이 추가된다면, 해당 기능의 클래스만 생성되게 하고 기존 작성한 코드들은 수정하지 않아도 되게!

☞ 의존성 주입 (Dependency Injection, DI)

✔︎ 의존성 주입 : 객체가 자신이 의존할 객체를 스스로 만들도록 하는 것이 아니라, 외부에서 주입해주는 것
✔︎ 의존성 주입의 기본 원리
추상화 : 인터페이스를 통해 공통의 메서드들을 추상화해 추상메서드 정의
다형성 : 인터페이스를 타입으로 사용한 필드를 정의해서 다형성을 통해 구현 클래스의 객체를 할당받을 수 있음

☞ 인터페이스

✔︎ 객체가 마땅히 해야 하는 역할을 규정해놓은 것
✔︎ 인터페이스에 의존하면 구체적인 구현 객체는 인터페이스를 구현했다는 조건 아래 자유롭게 교체 가능
✔︎ 변화와 확장에 유연하다는 객체지향 프로그래밍의 이점과 직결됨

☞ 단일 책임 원칙 (Single Responsibility Principle, SRP)

✔︎ 단일 책임 원칙 : 객체는 오직 하나의 책임만 맡아야 한다는 원칙

☞ 싱글톤 패턴 (Singleton pattern)

✔︎ 싱글톤 패턴 : 단 하나의 객체만 생성되도록 코드를 작성하는 패턴
✔︎ 프로그램이 동작하면서 자체적으로 보유한 데이터가 바뀌지 않는 인스턴스는 개수가 상관없으므로 굳이 싱글톤 패턴을 적용시킬 필요는 없음

◉ 느낀 점

☞ 하루종일 이 것만 붙잡고 했는데도 수업이 끝나고 새벽이 돼서야 프로젝트가 마무리됐다.. 😹 레퍼런스 코드가 있었지만, 하나하나 다 이해하고 가려고 해서 더더욱 늦게까지 걸린 것 같다 🥲 정말이지 레퍼런스 코드없이 혼자 만드려면 생각만 해도 아찔하다.. 하지만 현업에 가서는 구현해낼 수 있는 능력을 요구할 것 같기에 얼른 내걸로 만들고 이것저것 만져봐야겠다!

이번 실습 프로그램을 진행하면서 객체지향 프로그래밍에서 핵심 요소들인 상속, 캡슐화, 다형성, 추상화는 물론이고 프로그래밍을 시작할 때 어떻게 틀을 잡고 진행해가는지 전체적인 흐름과, 객체지향 설계 원칙 중 하나인 단일 책임의 원칙, 객체를 하나만 생성되도록 작성하는 싱글톤 패턴 등 여러 가지를 배우고 느낄 수 있었다. 실시간 세션에서는 이해를 돕기 위해 역할배역이고 구현배우로써, 배우가 바뀌더라도 배역을 중심으로 연기를 해야한다는 예시로, 역할과 구현의 분리를 이해하는 데 있어서 큰 도움이 됐다. 무엇보다도 강조해주신, 나중 spring을 공부할 때 중요한 개념 중 하나인 의존성 주입(DI) 또한 접할 수 있어서 하루지만 알찬 시간이라 느낀다 :)
어려운 내용들이지만 직접 코드를 작성해가며 이해를 위해 노력하며 성장할 수 있었던 것 같다! 하다가 머리가 터져버릴 뻔 했지만^^,,(마지막 부분은 사실 머리 속에 안들어가서 이해를 완벽히 못했다.. 주말에 또 해봐야지 ㅠㅠㅠ)

드디어 객체지향 프로그래밍을 마무리 지었다! 정말 어려운 내용들이었고, 또 그만큼 중요한 내용이기에 시간날 때마다 요 내용들은 꼭 복습해줘야겠다.. 또 기본 실습 프로젝트 외에도 옵션 프로젝트들도 있었는데 옵션은 커녕.. 기본도 이해하기 힘들고 시간이 오래 소요됐다^^,, 도대체 옵션까지 하시는 분들은 어떻게...🤯 대단하시다 ,,
늦은 시간까지 고생한 내 자신한테 고맙다!!! 푹 자고 내일 새로운 내용들도 빠팅해보쟈 ,,~~!!!

◉ 내일의 키워드

・ Enum
・ 제네릭
・ 예외 처리
・ 컬렉션 프레임워크
profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글