객체 지향은 책임과 권한을 가진 객체들이 서로 메시지를 주고받아 협력하여 필요한 기능을 수행하는 방법론이다. 크고 복잡한 시스템도 효과적으로 분해하고 구성하며, 개발자는 손쉽게 이해하고 효율적으로 관리할 수 있게 도와준다.
캡슐화, 다형성, 상속을 지원하면서 데이터 접근 제한이 가능하면 객체지향, 아니면 절차지향적인 성격을 가진다.
코딩을 할 때 중요한게 얼만큼 깔끔하고 이쁘게 짜는가도 중요하지만, 코드 변경점이 발생했을 때 최대한 적게 수정하여 시간비용을 줄이는게 중요하다. 즉 유지보수성이 쉬워야한다.
또, 발생한 문제 지점을 빠르게 파악하고 빠르게 고칠 수 있게 코드를 짜는 것을 목표로 해야한다.
그런점에서 객체 지향 프로그래밍은 코드의 구조와 동작을 직관적으로 파악할 수 있으며 예시로 자동차 객체에서 악셀기능, 브레이크 기능 등의 메서드를 가지고 있을 때 스탑이 안되는 증상이 있으면 브레이크 기능을 우선적으로 보면 된다.
단일 책임의 원칙, 하나의 객체는 하나의 책임만을 가진다.
한 클래스에서 문제가 생겼을 때 발생하는 책임이 2가지 이상이 되면 안된다는 뜻이다. 사용자의 설정을 변경하는 책임을 가진 클래스와 인증을 검증하는 책임을 가진 클래스가 한 클래스로 묶인게 아니라 두 클래스로 묶이는게 정상이다.
개방-폐쇄 원칙, 개체는 확장성을 허가하나 변경은 돼선 안된다.
기존 코드에 영향을 주지 않고 새로운 기능이나 구성요소를 추가해야한다는 뜻이다.
작은 요구사항 하나 반영하는데에 모든 코드를 수정한다면 스트레스 및 비용이 많이 들 것이다.
리스코프 치환 원칙, 부모 클래스와 자식클래식의 객체를 서로 바꾸더라도 잘못된 결과를 도출해서는 안된다.
직사각형을 만드는 부모클래스에서 상속받아 정사각형을 만드는 클래스를 만들었을 때 직사각형은 높이 너비가 독립적으로 정의하는 것에 비해 정사각형은 고정되어있기 때문에 같은 값을 도출할 수 없다.
이럴경우 두 클래스를 모두 포함하는 인터페이스를 구현해야하며, 새로운 부모클래스를 생성하고 직사각형과 정사각형이 상속받도록 코드를 수정해야한다.
인터페이스 분리 원칙, 인터페이스는 필요하지 않는 기능을 의존하지 않도록 최대한 작고 구체적으로 유지해야한다.
프린트의 경우 복사,스캔,팩스를 한 인터페이스에 담지 않고 각각 나누어 선언하여 필요한 것만 가져다 쓸 수 있게 한다.
의존성 역전 원칙, 추상화에 의존하라, 구체화에 의존하지 마라
높은 계층의 모듈이 저수준 모듈에 직접 의존해서는 안된다. 둘 다 추상화에 의존해야 한다. 추상화는 세부 사항에 의존하지 않아야 하고 세부 사항이 추상화에 의존해야한다.
0개국어인가... 한국말이 어렵네 😰