스파르타 내배캠 22일차 TIL
C5조_🥱안하조(사실 해)
팀프로젝트가 시작되면서 많은 분이 궁금해하는 객체 지향적 프로그램에 대한 특강을 진행했다. 유니티 개발 입문 강의에서 생각보다 딥한 객체지향적 설계를 이용하여 나를 포함한 많은 사람이 어렵게 느꼈던 것 같다. 튜터님처럼은 못하더라도 객체 지향적 설계는 프로제트에 앞서 가장 중요한 단계이기 때문에 확실히 공부 해야겠다고 생각했다. 그래서 오늘은 이번 강의에 대한 내용을 정리 해보려고 한다.
객체 지향 프로그래밍
객체(object)를 중심으로 프로그램을 설계, 개발하는 것
특징
- 클래스를 이용해 함수, 변수를 하나로 묶어 객체로 만들어 사용
1) 객체 지향 프로그래밍의 5가지 설계 원칙
(1) 단일 책임 원칙 : 클래스는 단 하나의 목적을 가져야 하며, 클래스를 변경하는 이유는 단 하나의 이유여야 한다.
(2) 리스코프 치환 원칙 : 상위 타입의 객체를 하위 타입으로 바꾸어도 프로그램은 일관되게 동작해야 한다.
(3)인터페이스 분리 원칙 : 클라이언트는 이용하지 않는 메서드에 의존하지 않도록 인터페이스를 분리해야 한다.
(4) 의존 역전 법칙 : 클라이언트는 추상화에 의존해야 하며, 구체화에 의존해선 안 된다.
(5) 클래스는 확장에 열려 있고 변경에 닫혀 있어야 한다.
2) 객체 지향 프로그래밍의 4가지 특징
(1) 캡슐화
연관있는 변수와 메소드를 묶어주는 작업
접근 지정자를 통해 외부로부터의 접근을 제한하고 객체 내에서만 접근이 가능하도록 한다.
(2) 추상화
객체에서 필요한 공통된 부분을 추출하는 것
클래스들의 공통점을 하나의 클래스로 만들어 각 클래스와 묶는다.
(3) 상속
부모 클래스로부터 공통된 변수와 함수, 인터페이스를 그대로 물려받는 것
비슷한 객체들의 부모 클래스와 인터페이스를 정의하여 공통화 한 다음 상속받아 객체를 좀 더 다루기 쉽게 한다. 각 클래스의 공통된 부분을 묶었다면, 부모 class를 상속받아 거기에 포함된 데이터를 그대로 사용 할 수 있다.
(4) 다향성
같은 종류의 클래스가 하나의 메세지에 대해 서로 다른 행동을 하는 것
abstract class Animal : MonoBehaviour
{
protected int age;
protected string name;
abstract protected void Say();
}
class Cat : Animal
{
private void Start()
{
age = 1;
name = "고양이";
}
override protected void Say() {Debug.Log("야옹");}
public void Attack_scratch() {Debug.Log("할퀴기");}
}
class Dog : Animal
{
private void Start()
{
age = 5;
name = "강아지";
}
override protected void Say() {Debug.Log("멍멍");}
public void Attack_scratch() {Debug.Log("물기");}
}
이를 이용해서 객체지향 프로그래밍은
의존성을 낮추고 결합도를 높인다.
객체의 자율성을 높이고 응집도를 높인다.
3) 응집도를 높이기 위해
연관성 없는 작업은 다른 객체에게 위임한다.
객체 내부의 상태를 캡슐화 하고 오직 메세지를 통해서만 상호작용한다.
마무리하며
이렇게 남의 코드를 보고 따라하는 것은 이해가 되지만 막상 내가 직접 코드를 작성할 땐 아직 적용이 안 되는 것 같다. 설계에 대한 실습 강의가 있는 날까지 최대한 지향적으로 설계하도록 노력해야겠다.
'Unity > TIL' 카테고리의 다른 글
Unity 컬렉션 (1) | 2024.05.21 |
---|---|
유니티 Physics Material (0) | 2024.05.17 |
개인과제 해설 (0) | 2024.05.14 |
개인과제 마무리 (0) | 2024.05.13 |
ReadyOnly + 갠플 개발 일지 (0) | 2024.05.10 |