일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- RAISERRR
- github
- 권한
- JavaScript
- sql server manager
- 프로시저
- ERROR_MESSAGE
- MSSQL
- OUT 파라미터
- .NET 8.0
- cors
- SSMS
- ORM
- IT
- SOP
- 데이터베이스
- java
- SQL Server
- IT story
- jpa
- springboot
- 스프링부트
- Newtonsoft.Json
- SQL Server 구성 관리자
- git
- System.Text.Json
- Exception in thread "main" java.lang.Error
- 스프링 시큐리티
- 자바
- C#
- Today
- Total
its_jh_stroy
객체 지향 4대 요소 본문
객체 지향 프로그래밍은 추상화, 캡슐화, 상속, 다형성이라는 4가지 요소를 가진다.
추상화
실세계의 복잡한 개체에서 필요한 속성과 메서드를 표현(결정)하는 것이다.
복잡한 개체가 가지는 멤버를 100% 정확하게 나타낼 필요는 없다.
특정 맥락에서만 실제 개체의 멤버를 모델링하고 나머지는 무시한다.
예를 들어, Train 클래스는 기차 제조 관리 프로그램과 승차원 예매 시스템 모두 사용될 수 있지만, 프로그램의 맥락에 따라 가지는 멤버는 다르게 된다.
캡슐화와 정보 은닉
추상화 과정에서 결정된 속성과 메서드를 클래스에 정의하여 하나로 묶는 과정이다.
이때 객체의 속성은 Private 접근 제어자를 통해 외부 접근으로부터 보호한다.
접근 제어자를 통해 외부로부터 속성을 보호하는 것을 정보 은닉이라고 하는데, 캡슐화는 정보 은닉을 내포하고 있다.
상속
어떤 클래스가 다른 클래스의 특성(속성과 메서드)를 물려받아 재사용하는 개념이다.
이를 통해 코드의 중복을 줄이고 개발자의 시간과 노력을 절약할 수 있게 된다.
상속은 다음에 설명할 다형성을 가능하게 한다.
다형성
다형성의 핵심은 하나의 타입으로 다양한 객체를 구현하는 것이다.
서로 다른 타입의 객체가 동일한 메시지에 대해 각기 다른 방식으로 반응하는 것이다.
동일 타입을 상속받는 다양항 객체들이 동일한 메시지에 각각의 동작을 다르게 구현할 수 있다.
메시지를 요청하는 입장에서 타입과 무관하게 같은 메시지를 통해 동일한 책임을 수행하게 된다.
다형성을 구현하는 상속과 오버라이드
개발 측면에서 다형성은 인터페이스 또는 추상 클래스 상속을 통해 구현할 수 있다.
선언된 상위 메서드를 정의하거나, 이미 정의된 메서드를 오버라이드하여 구현체마다 다르게 동작하도록 코드를 작성하는 것이다.
public interface IPerson
{
public void Great();
}
public class Korean : IPerson
{
public void Great()
{
Console.WriteLine("안녕하세요.");
}
}
public class American : IPerson
{
public void Great()
{
Console.WriteLine("Hello");
}
}
업캐스팅으로 더 좋은 코드 작성하기
여기에 업캐스팅을 더해 더욱 효율적인 코드를 작성할 수 있다.
상위 클래스 참조로 여러 하위 클래스를 조작할 수 있는 점을 이용하면, 동일한 방식으로 다양한 객체를 조작할 수 있다.
따라서 업캐스팅을 통해 다형성의 핵심인 "하나의 인터페이스, 다양한 구현"을 구현하는 데 도움을 받을 수 있다.
// IPerson을 상속받는 어떤 객체든 파라미터가 될 수 있다.
public void Active(IPerson person)
{
// ...
}
'IT Story' 카테고리의 다른 글
동일 출처 정책(SOP)과 교차 출처 리소스 공유(CORS) (0) | 2024.02.06 |
---|---|
결합도(Coupling)와 응집도(Cohesion) (0) | 2024.01.23 |
구름 ide에서 MySQL 사용해보기 (0) | 2023.12.26 |