객체지향프로그래밍(Object - Oriented Programming, OOP)
객체들의 유기적인 협력과 결합으로 파악하고자하는 컴퓨터프로그래밍의 패러다임
객체지향적으로 프로그램을 설계하는데는 큰 이점이 있다.
장점
1. 프로그램을 보다 유연하고 변경이 용이
2. 코드의 변경을 최소화하고 유지보수하는데 용이
3. 코드의 재사용을 통해 반복적 코드 최소화
4. 코드를 최대한 간결하게 표현
5. 인간친화적이고 직관적인 코드 작성
이러한 장점으로 객체지향프로그래밍의 4가지 특징이 있다.
추상화, 상속, 다형성, 캡슐화 이다.
객체(Object)
객체는 OOP의 가장 기본적인 단위이다. 모든 것이 객체들간의 상호작용을 통해 출발되기 때문이다.
체스를 예를 들면 체스말에는 다양한 기물이 있다. 왕, 여왕, 폰, 룩, 나이트, 비숍 등 모든 것들이 객체이다.
public class Chessman : MonoBehaviour
{
//체스기물들
public enum ChessType
{
KING, QUEEN, BISHUP, KNIGHT, ROOK, PAWN
}
public ChessType chesstype; //체스종류
bool isRotate;//회전하는지
void start()
{
}
void StraightMove()
{
Debug.Log("직선이동한다");
}
void DiagonalMove()
{
Debug.Log("대각선이동한다");
}
void RotatePiece()
{
Debug.Log("회전한다");
}
}
각각의 객체를 추상화시켜 속성과 기능으로 분류하고 이것을 다시 각각의 변수와 함수로 정의한다.
1. 추상화
객체의 공통적 속성과 기능을 추출하여 정의하여 표현한 것이다.
룩과 왕 모두 체스맨으로 직선이동(StraightMove)을 하는 공통점을 가지고 있다. 체스맨이라는 상위클래스(Super-Class)에서 공통적인 기능인 직선이동(StraightMove)을 추출하여 상위클래스에 정의했다. 특히 공통적인 기능(함수 Method)를 추출하였다.
ChessType 인터페이스이다.
객체지향적 설계에서 인터페이스는 어떤 객체의 역할만을 정의하고 객체들간의 연결을 하는 역할을 한다.
public ChessType()
{
void StragihtMove();
void DiagonalMove();
}
2. 상속화
기존 클래스를 재활용해 새로운 클래스를 작성하는 것이다. 쉽게 상위클래스로부터 확장된 여러개의 하위클래스들이 상위 클래스의 속성과 기능을 간편하게 사용하는 것이다.
//나이트가 상속받은 클래스
public class Knight : Chessman
{
public Knight()
{
}
}
//왕이 상속받은 클래스
public class King : Chessman
{
public King()
{
}
}
특히 각각의 클래스에 맞게 매서드 오버라이딩을 사용하여 함수를 사용가능하다.
public class King : Chessman
{
public King()
{
value = 10;
}
// 가능한 움직임을 가지고 움직이는 함수
public override bool[,] PossibleMoves()
{
}
}
override bool[,] PossibleMoves()함수는 각 기물들의 위치를 체크하고 각각 다른 움직임 속성에 맞게 움직이도록 오버라이딩을 하는 함수이다. 즉, 체스말들의 클래스안에는 모두 오버라이딩되어 각각의 속성들로 함수를 재정의한다.
결론적으로, 상속성은 인터페이스를 사용하는 구현에 비해 추상화의 정도가 낮다. 인터페이스가 역할만 정의해두고, 하위클래스에서 구체적인 표현을 강제하는 것에 비해, 상속은 상황에 따라 모든 구체적인 내용을 정의해두고 하위클래스에서는 단순히 가져다가 재사용할 수 있다.
3. 다형성
객체지향 프로그래밍의 꽃으로 어떤 객체의 속성이나 기능이 상황에 따라 여러가지 형태를 가질 수 있는 성질이다.
대표적인 예로는 오버라이딩과 오버로딩이 있다. 이것은 추후에 더 정리해보자.
4. 캡슐화
어떤 객체를 객체지향적으로 설계하는 가장 중요한 목적은 공개 인터페이스를 선정하는 것이다. 즉, 구현이나 기능적인 상세함을 숨기는 것을 정보숨김 또는 은닉이라고 한다. 쉽게 말해 캡슐에 싸서 감추는 것이다.
숨기는 것은 private 공개하는 것은 public이다.
참조 :
'Programming skills > CS(Computer Science)' 카테고리의 다른 글
[CS] 인터페이스와 추상 클래스 차이 (0) | 2023.10.18 |
---|---|
[CS]선형 비선형 자료구조 (1) | 2023.10.11 |
TCP /UDP 특징 및 차이 (0) | 2023.09.04 |