객체와 객체 지향에 대해 명확히 알고있지 않는 것 같아 글을 정리하며 다시 학습하려 합니다.
데이터 ( 상태 )와 기능 ( 행위 )을 하나로 묶인 독립적인 단위
⇒ 현실 세계의 사물을 컴퓨터 세계에 표현한 단위라고 볼 수 있음
객체들이 모여서 상호 작용하며 데이터를 처리하는 방식
즉, 프로그램을 묶음 단위로 쪼개서, 이후에 이를 이용하는 프로그램 방식
절차 지향 프로그래밍
함수를 사용하여 정리 정돈하는 프로그래밍 Ex) C언어
함수를 이용하여 작은 단위로 만들고 이를 결합하여 큰 프로그램을 만들어가는 프로그래밍
⇒ 복잡함
장점
단점
**메서드 오버라이딩**
부모 클래스의 메서드를 자식 클래스에서 재정의해서 사용하는 것을 말하며
, 자식 클래스는 부모 클래스의 메서드를 재활용하면서, 독자적인 기능을 추가할 수 있음
**메서드 오버로딩**
같은 이름의 메서드를 다양한 매개변수 타입과 개수로 오버로딩하여 사용하는 것을 말하며,
메서드 이름을 동일하게 유지하면서도, 다양한 상황에서 유연하게 대응할 수 있는 방법을 제공 업캐스팅, 다운캐스팅, 인터페이스, 추상 메서드, 추상 클래스 등등대상을 간단한 개념으로 일반화하는 과정 (데이터의 내부 표현은 숨기고, 필요한 인터페이스만 제공) ⇒ 클래스 내부의 필드는 private로 숨기고 외부에서 getter/setter 또는 메서드 인터페이스만 제공어떤 클래스의 메서드를 사용자에게 메서드의 작동 방식과 같은 내부 로직을 숨기는 것 ⇒ 어떻게 동작하는지는 감추고, 무엇을 하는지만 보이게 하면 됨By ROVERT MARTIN
SRP ( Single responsibility principle ) : 단일 책임 원칙
하나의 클래스는 하나의 책임( 기능 )만 가지며, 클래스가 제공하는 모든 서비스는 그 하나의 책임을 수행 하는데 집중되어야 함
⇒ 어떤 변화에 의해 클래스를 변경할 때 파급 효과가 적어야 한다는 의미
Ex ) UI 변경, 객체의 생성과 사용을 분리
OCP ( Open/closed principle ) : 개방 - 폐쇄 원칙 ⭐⭐
소프트웨어 요소는 확장에는 열려 있으나, 변경에는 닫혀 있어야 한다.
⇒ 자신의 확장에는 열려있으나, 주변에 변화에 대해서는 닫혀 있어야 한다는 의미
[ OCP 적용 방법 ]
예시 )
JDBC는 DB의 종류와 관계 없이 프로그래머에게 동일한 인터페이스를 제공함으로써
프로그래머에게는 DB 변화에 닫혀 있게 되고, JDBC는 자신의 확장에는 열려 있음
LSP ( Liskov substitution principle ) : 리스코프 치환 원칙
서브 타입은 언제나 자신의 기반 타입으로 교체할 수 있어야 함
상속의 원칙을 잘 지키는 것이 LSP를 잘 지키고 있는 것
ISP ( Interface segregation principle ) : 인터페이스 분리 원칙
클라이언트는 자신이 사용하지 않는 인터페이스에 의존 관계를 맺으면 안됨
클래스는 자신이 사용하지 않는 인터페이스 ( 메서드 )는 구현하지 않아야 함
즉, 어떤 클래스가 인터페이스의 특정 기능만을 사용할 경우 범용 인터페이스 하나를 사용하는 것이 아닌 특정 클라이언트를 위한 인터페이스 여러 개를 사용해야 한다
[ 예시 ]
public interface Operatable {
void 기어가기();
void 달리기();
void 뛰기();
}
--- 로봇1은 모든 기능을 다 사용하기에 상관이 없지만
public class 로봇1 implements Operatable {
@Override
public void 기어가기(); {
// 구현
}
@Override
public void 달리기(); {
// 구현
}
@Override
public void 뛰기(); {
// 구현
}
}
--
*로봇2가 기어가기() 기능만 필요로 한다면, 모든 동작을 포함한 범용 인터페이스 Operatable에
의존하는 대신, 기어가기()만을 정의한 명확한 인터페이스를 따로 만들어 그것에 의존해야함*
public interface Operatable2 {
void 기어가기();
}
public class 로봇2 implements Operatabl2 {
@Override
public void 기어가기(); {
// 구현
}
}
5. DIP ( Dependency inversion principle ) : 의존관계 역전 원칙
구체화에 의존하는 것이 아닌 추상화에 의존해야함
의존성 주입은 이 원칙을 따르는 방법 중 하나임
Ex) 운전자는 자동차에 역할에 대해서만 알면 되지 k3에 대해 알 필요는 없음
쉽게 이야기해서 구현 클래스에 의존하지 말고, 인터페이스에 의존하라는 뜻
구현체에 의존하게 되면 변경이 아주 어려워짐