2024/01 107
-
6. 재사용성을 높이는 디자인 라이브러리나 이미 존재하는 코드를 이용하는 것은 재사용 전략의 절반일 뿐이다. 나머지 절반은 내가 작성하는 코드를 재사용할 수 있게 만드는 것이다. 잘 만들어진 라이브러리와 그렇지 않은 라이브러리에 어떤 차이가 있는지 아마도 경험했을 것이다. 잘 만들어진 라이브러리는 기분 좋은 편리함을 느끼게 해주지만 엉성하게 만들어진 라이브러리는 어떻게든 이용해보려는 노력에도 스트래스만 잔뜩 주다가 결국 내손으로 직접 만들게 된다. 다른 프로그래머의 사용을 의도해서 만든 라이브러리든 단순히 클래스 계층을 이루려는 것이든 간에 항상 코드 재사용을 염두에 두고 있어야 한다. 언제 어디서 비슷한 기능을 필요로 할지 모른다. 재사용성 있는 디자인은 객체지향 원칙을 기반으로 해서 몇 가지 새로운 ..
-
5.5 추상화 추상화는 해당 클래스의 이용 방법, 즉, 인터페이스를 그 구현과 분리하는 것이다. 추상화는 앞서 살펴본 여러 가지 이유에서 바람직하다. 그리고 객체 지향 디자인의 기본적인 요소다. 5.5.1 인터페이스와 구현 추상화의 핵심은 구현에서 인터페이스를 분리해애는 데 있다. 구현은 목적하는 작업을 수행하도록 작성한 코드고, 인터페이스는 다른 사람이 그 코드를 이용할 떄 사용해야 하는 규약이다. C에서는 헤더 파일이 라이브러리에 포함된 함수 목록을 담고 있어서 인터페이스 역할을 했다. 객체지향 프로그래밍에서는 클래스의 접근 가능한 프로퍼티와 행동이 인터페이스 역할을 한다. 좋은 인터페이스는 공개된(public) 행동만으로 이루어진다. 프로퍼티와 값은 그 자체로는 공개되지 않고 게터와 세터에 의해 공..
-
언리얼 내에서 피격처리를 좀더 객관화 하여, 추가적인 행동을 취해보자. 피격 시 애니메이션을 송출할 것이다. 우선, 피격 애니메이션을 정의할 몽타주를 새로 생성한다. 몽타주 생성 위와같이, Hit모션에 따른 몽타주를 새로 정의한다. 사망모션과 Hit모션을 둘다 만들어준다. 몽타주는 각각 Hit은 상체 또는 전신으로 동작하고, Dead는 전신으로 동작한다. 각 몽타주의 슬롯을 필요에 따라 원하는 위치에 정의해준다. 몽타주를 만들었으면, 이제 ABP에서 BP작업을 진행해준다. ABP연결하기 ABP_Enemy로 이동한다. 이미 전에 ABP_Player에서 했던대로, 새롭게 연결하여 정의해준다. 기본 애니메이션은, BS_SwordEnemy를 통해 재생되고, 해당 애니메이션을 기준으로, UpperBody, 그 이..
-
문제 설명 출발지점부터 distance만큼 떨어진 곳에 도착지점이 있습니다. 그리고 그사이에는 바위들이 놓여있습니다. 바위 중 몇 개를 제거하려고 합니다. 예를 들어, 도착지점이 25만큼 떨어져 있고, 바위가 [2, 14, 11, 21, 17] 지점에 놓여있을 때 바위 2개를 제거하면 출발지점, 도착지점, 바위 간의 거리가 아래와 같습니다. 제거한 바위의 위치 각 바위 사이의 거리 거리의 최솟값 [21, 17] [2, 9, 3, 11] 2 [2, 21] [11, 3, 3, 8] 3 [2, 11] [14, 3, 4, 4] 3 [11, 21] [2, 12, 3, 8] 2 [2, 14] [11, 6, 4, 4] 4 위에서 구한 거리의 최솟값 중에 가장 큰 값은 4입니다. 출발지점부터 도착지점까지의 거리 dis..
-
5.4 객체 간 관계 프로그래밍을 하다 보면 서로 다른 두 클래스가 공통적인 속성을 가지거나 서로 어떤 연관 관계가 있는 경우를 만나게 된다. 예를 들어 그림, 음악, 보관 목록의 문자를 모두 나타내는 미디어 객체가 너무 일반적이긴 하지만 이들 객체가 뭔가 공통적인 속성이 있는 것 만큼은 분명하다. 예를 들어 세 미디어 모두 최종 수정 날짜를 가질 수도 있고, 삭제하기 행동을 가질 수도 있다. 객체지향 언어는 객체 간 관계에 대응하기 위한 몇 가지 매커니즘을 지원한다. 여기서 어려운 부분은 실제로 그 관계가 무엇인가? 하는 부분으로 크게 has-a 관계와 is-a관계 두가지가 있다. 5.4.1 Has-A관계 A가 B를 가질 때 또는 A가 B를 포함할 때 A와 B는 has-a관계 또는 집합(aggregat..
-
5.3 객체 세상에서 생각하기 프로그래머가 절차적인 패러다임에서 객체지향 패러다임으로 전환하면 프로퍼티와 행동을 조합하여 객체로 만드는 새로운 통찰력이 생기는 것을 경험할 떄가 많다. 어떤 프로그래머는 작업하던 프로그램의 디자인 단계를 다시 밟아 일부 코드를 객체로 재작성하고, 어떤 프로그래머는 모든 코드를 버리고 객체지향 방식으로 완전히 새로 시작하기도 한다. 객체를 이용해서 소프트웨어를 개발할 떄는 두 가지 접근 방법이 있다. 어떤 사람에게는 객체가 단순히 데이터와 함수를 묵어주는 좋은 툴로만 보인다. 이러한 프로그래머는 코드의 가속성과 유지보수 편의성을 높이는 목적으로 여기저기 객체를 심게 된다. 이러한 접근 방법을 사용하는 프로그래머는 마치 외과의사가 심장질환 환자에세 심박 조절기를 심듯이 독립된..