이러한 이론이 왜 필요할까?
결론만 말하면 객체라는 개념을 다뤄 좋은 코드를 작성할 수 있는 특징들이다.
이러한 원칙들은 코드의 재사용성을 높이고, 유지보수, 확장, 유연성에 큰 도움을 줄 수 있다.
객체지향의 4대원칙은 캡슐화, 상속, 다형성, 추상화 라는 습성이 있다.
캡슐화

캡슐 알약을 뜯어보면 내부에는 a라는 약재, b라는 약재와 같이 많은 약재들이 들어있을 것이다.
또한 이러한 여러종류의 약재를 한 공간에 묶어 캡슐이라는 껍데기로 감싸주게 된다.
객체지향의 캡슐화 또한 이 특징과 같다.
데이터(속성)과 행위(메서드)를 하나의 단위로 묶어 줄 수 있으며
내부에서는 어떻게 동작하는지 보이지 않고, 외부에는 이를 접근해 사용만 가능하게 하는 인터페이스를 제공한다.
외부에 보이지 않게 한다는 것은 코드의 보안을 높이는것을 의미하고,
여러 데이터를 한곳에서 정의해 묶는다는 행동은 코드의 보완성을 높일 수 있음을 의미하게 된다.
상속

말그대로 물려주는 것을 의미한다.
하나의 클래스는 다른 클래스로 자신의 데이터를 물려주는게 가능하다.
아빠가 구매한 자동차를 옆집 아저씨가 운전할경우 불법이 될 수 있지만
아들인 나는 별 문제없이 자동차를 이용하는데 문제가 없다.
좋은 예시는 아니지만 나는 아빠의 허락하에 모든 재산을 사용할 수 있는것을 의미한다.
그러한 재산을 활용해 창업을 하거나, 물려받은 자동차가 맘에 들지않아 개조를 하는 행위이다.
즉 클래스의 상속도 같은 의미이다.
새로운 클래스가 부모클래스의 속성과 메서드를 사용하고, 확장하는 것이다.
public class People
{
public string _name;
public int _age;
public virtual void Speak()
{
Console.WriteLine($"{_age}살 {_name}은 말합니다.");
}
}
public class Child : People
{
public void Play()
{
}
public override void Speak()
{
Console.WriteLine($"{_age}살 {_name}은 유행어를 말합니다.");
}
}
위 코드처럼 Child는 People 이라는 클래스를 상속받았고
People의 클래스에서 상속을 허용한 멤버들을 자유롭게 사용하고, 수정하여 사용이 가능하게 된다.
다형성

포켓몬의 메타몽의 특정과 같다.
메타몽은 아무 형태로든 변신이 가능하다.
즉 클래스가 다른 형태로 바뀔 수 있다는 것을 의미한다.
다만 이는 상속을 통한 관계만 해당된다.
이러한 다형성을 활용해 여러 형태의 객체에 대응할 수 있게 된다.
public void Check(People m_people)
{
}
People p1 = new People();
Child c1 = new Child();
Check(c1); // 허용
Check라는 메서드는 People 이라는 객체를 받기로 약속되어있다.
하지만 실제 메서드 동작은 매개변수로 Child 객체를 받고있는 상황이지만 이는 허용되는 문법이다.
Check라는 메서드가 활용하는 매개변수는 People 이지만
Child는 People의 모든 데이터를 전달받아 People로도 활동할 수 있기 때문이다.
추상화


지도 앱을 만들어야한다고 가정해보자.
현실의 세계 시스템을 프로그래밍 해야하는 상황이다.
하지만 지도앱에 각 건물의 높이라던가, 땅은 어떤 소재로 포장되었고, 여긴 어떤사람이 살고있고 등등
이러한 정보가 필요한가??
이러한 정보 앱의 목표와 달리 필요가 없는 정보들이다.
앱의 목표는 각 거리가 몇미터인지만 확인하면 된다.
즉 이러한 모든 요소를 하나의 클래스에 전부 담는것이 아닌 핵심적인 요소만 추려내 단순화 하는것을 의미한다.
이를 통해 필요한 정보에만 집중할 수 있게 도움을 줄 수 있다.
'프로그래밍 용어' 카테고리의 다른 글
TCP 와 UDP (1) | 2024.11.07 |
---|---|
네트워크와 OSI 7 계층 (2) | 2024.11.07 |
객체지향(OOP) - 객체란? (0) | 2024.07.21 |
매개변수(Parameter) 와 인자(Argument)의 차이 (0) | 2024.07.15 |
스트림이란? Stream (0) | 2024.02.20 |