덴바의 노트

내일배움캠프 8일차 TIL 본문

프로그래밍 노트/TIL

내일배움캠프 8일차 TIL

덴바 2024. 4. 25. 21:56

 


 

오늘의 학습 키워드

 

  • 객체지향 프로그래밍
  • 모듈과 결합

 

문제 발생

 

 

문제였던 코드의 GIT HISTORY 내역

 

 

오랜만에 비주얼 스튜디오를 이용해서, Text만을 이용한 RPG 게임을 만들었습니다.

 

너무 오랜만에 사용한 탓에 Unity 처럼 스크립트를 여러개를 생성해서 기능을 나누는 방식이 안되는 줄 알고

 

Program.cs라는 하나의 스크립트 내에 수많은 클래스를 생성하였습니다.

 

이렇게 한 결과 엄청나게 가독성이 떨어지면서 작업 속도에 난항을 겪었습니다.

 

 


해결

 

 

 

현재 수정한 스크립트

 

 

이러한 문제를 해결하기 위해, 하나의 스크립트에 구현해뒀던 모든 클래스를 분리시키는 작업을 했습니다.

 

그 결과 GameManager.cs를 제외한 대부분의 스크립트가 LOC 300 미만을 유지하기 되었습니다.

 

또한 가독성이 매우 향상했습니다.

 

제일 큰 장점은 View를 양 옆으로 두고 작업을 할 수 있게 됐습니다.

 


 


객체지향 프로그래밍


 

 

객체 지향 프로그래밍 (Object-Oriented Programmging) 이란?

 

 

프로그래밍에 관심이 있는 무조건 들어봤을 단어입니다.

 


객체지향 프로그래밍

[ object-oriented programming ]

 

모든 데이터를 하나의 물체처럼 취급해서 프로그래밍 하는 방법

 

 


 

사전에서는 위와 같이 말하고 있습니다.

 

 

요약하자면, 객체지향 프로그래밍이란 현실에 있는 것을 프로그래밍을 통해서 가상에 구현하는 것이라고 생각합니다.

 

 

객체지향 프로그래밍의  이전 방식인 절차지향 프로그래밍을 생각해보면,

 

 

특정 결과가 나오게 하기 위해서 해당 과정을 아래로 작성하는 방식입니다.

 

 

하지만 객체지향 방식이라면  이런 기능들을 하나의 최소 모듈을 생성하여 응집도를 높이고

 

 

모듈끼리의 결합을 최소한으로 하여 서로 작동할 것입니다.

 



 

객체지향의 특징


 

1. 캡슐화 : 관련된 데이터와 기능을 하나의 단위로 묶는 것

2. 상속 : 기존 클래스를 확장하여 새로운 클래스를 만드는 메커니즘

3. 다형성 : 하나의 인터페이스나 기능을 다양한 방식으로 구현하거나 사용할 수 있는 능력
ex)오버로딩이나 오버라이딩

4. 추상화 : 복잡한 시스템이나 개념을 단순화하여 필요한 기능에 집중하는 것

 

 


오늘의 회고

 


불편했던 점


 

이번 Text RPG의 문제점은 CLI 방식의 UI에 TEXT를 어떻게 나타내고 어떻게 연계시킬까에 있다고 봅니다.

 

아마 핵심은 상속과 모듈화, 결합 등 객체 지향에 가장 의의를 둔 과제였을 것이라고 보지만,

 

저는 위와 같은 부분이 제일 어려웠습니다.

 

왜냐면 Unity에서라면 Canvas와 UI Element들을 활용하면 엄청나게 쉽지만, Console을 사용하여,

 

Console에 원하는 텍스트를 출력해주면서도 입력한 값에 따라서 텍스트의 변화를 주기도 해야했기 때문입니다.

 

그렇기에 이번 강의와 과제를 통해서 객체지향의 핵심인 상속, 다형성, 캡슐화 등에 집중해보고 싶었지만,

 

오히려 해당 내용들을 학습하기에는 방해가 되는 과제가 아니었나 싶습니다.

 

 


 

 


개선해야 할 점


 

이번 과제에서는 2가지 디자인 패턴 중

 

하나를 활용라도 활용했으면 좀 더 가독성과 유지보수성, 성능 적으로 이득이지 않았을까 라는 생각이 들었습니다.

 

while (state != GameState.End)
{
		if (state == GameState.Main)
        {
            Display("", "", GameState.Main);
        }

        else if (state == GameState.Status)
        {
            Display(player.ShowAllStatus(), "", GameState.Status);
        }
        ...
}

 

 

지금은 위와 같은 코드를 Main함수 내에서 계속해서 돌리는 방법을 사용했기 떄문에,

 

Main 함수 내부에 코드길이가 매우 길어지고 가독성 등의 불편함이 많아졌습니다.

 

 


 

1. 이벤트 버스 패턴

 

GameManager.cs를 중심으로 Static을 선언하고 GameState를 변환시 마다 event Action을 활용하여,

 

Console에 값을 출력하는 방식이었다면 좋지 않았을까 싶습니다.

 

 

2.  상태 패턴(State Pattern)

 

각각의 UI. Main, Inventory, Status, Store, Dungeon, RestRoom 등을 State로 나누고,

 

Main() 함수 FSM을 선언하고 프로퍼티로 하나의 현재 상태를 받은 후

 

해당 State의 중요 로직 부분을 Main()에 연결하는 형식으로 했으면 

 

이건 이것대로 가독성과 유지보수성에 좋지 않았을까 싶습니다.

 

 

 

 

 

 

 

 

 

 

 

'프로그래밍 노트 > TIL' 카테고리의 다른 글

내일배움캠프 10일차 TIL  (0) 2024.04.29
내일배움캠프 9일차 WIL  (1) 2024.04.26
내일배움캠프 7일차 TIL  (0) 2024.04.24
내일배움캠프 6일차 TIL  (0) 2024.04.23
내일배움캠프 5일차 TIL  (0) 2024.04.22