
객체지향 프로그램이 뭐냐 라는 물음에 딱 정의 하지못해 한번 알아보는 시간을 가졌다.
객체는 프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간을 의미하며 값을 저장 할 변수와 작업을 수행 할 메소드를 서로 연관된 것들끼리 묶어서 만든 것을 객체라고한다.
하지만 자바에서는 객체(object)란 클래스의 인스턴스나 배열을 말한다고 정의하지만 쉽게 생각하면 사물이나 실체를 의미 한다고 생각한다. (사람, 자동차, 비행기)
프로그램을 객체 단위로 나눠 객체들의 작용을 통해 프로그램을 설계하고 개발하는 것,
즉 프로그래밍에서 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체로 만들고, 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.
추상화
객체에서 공통된 속성과 행위를 찾아서 타입과 행위를 정의하는 과정
캡슐화
관련이 있는 변수와 함수를 하나의 클래스로 묶고 외부에서 쉽게 접근하지 못하도록 은닉하는 것
(접근제어자 : private)
상속
클래스의 속성과 행위를 하위 클래스에 물려주거나 하위 클래스가 상위 클래스의 속성과 행위를 물려받는 것으로 코드의 재사용이 용이하다.
다형성
변수명, 함수명이 상황에 따라 다른 의미로 해석
하나의 클래스 내부에 같은 이름의 행위를 여러개 정의하거나 상위 클래스의 행위를 하위 클래스에서 재정의하여 사용할 수 있다.
객체지향 프로그래밍에 대해 알아보는 중 원칙이 있다는 것을 알게 되었다.
객체 지향적으로 설계하기 위해 SOLID 라 불리는 다섯 가지 원칙이 있는데
단일 책임 원칙 (SRP, Single Responsibility Principle)
하나의 클래스는 단 하나의 책임만 가져야 한다.
단일 책임 원칙을 지키지 않을 경우 한 책임의 변경에 의해 다른 책임과 관련된 코드에 영향이 갈 수 있다.
개방-폐쇄 원칙 (OCP, Open/Closed Principle)
소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
기능을 변경하거나 확장할 수 있으면서 기능을 사용하는 코드는 수정하지 않는다.
리스코프 치환 원칙 (LSP, Liskov Substitution Principle)
프로그램 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
상위 타입의 객체를 하위 타입의 객체로 치환해도, 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
인터페이스 분리 원칙 (ISP, Interface Segregation Principle)
범용 인터페이스 하나보다 클라이언트를 위한 여러 개의 인터페이스로 구성하는 것이 좋다.
인터페이스는 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.
클라이언트가 필요로 하는 인터페이스로 분리함으로써 각 클라이언트가 사용하지 않는 인터페이스에 변경이 있어도 영향을 받지 않도록 만들어야 한다.
의존관계 역전 원칙 (DIP), Dependency Inversion Principle)
추상화에 의존해야지 구체화에 의존하면 안된다.
고수준 모듈은 저수준 모듈의 구현에 의존해서는 안되고 저수준 모듈은 고수준 모듈에서 정의한 추상 타입에 의존해야 한다.