OOP란?
OOP(Object-Oriented Programming)는 '객체지향 프로그래밍'을 의미하며,
객체들이 상호작용하는 방식으로 프로그램을 설계하는 프로그래밍 방법 중 하나이다.
객체는 데이터(필드)와 기능(메서드)으로 이루어졌으며, 이를 유기적으로 연결하여
현실세계의 개념을 코드로 모델링하는 것을 목표로 한다.
Java의 경우 이 객체를 인스턴스라고 하며, 클래스를 기반으로 생성된 실체라고 할 수 있다.
Java에서는 new
키워드를 사용하여 클래스를 인스턴스화하면, 메모리에 객체가 생성된다.
객체지향 프로그래밍의 핵심원칙
- 추상화
추상화란 객체의 공통적인 속성과 기능을 추출하여 추상클래스나 인터페이스로 정의하고,
이를 활용하여 구현클래스를 만드는 것을 말한다. 이렇게 추상적인 존재에 의존하면 다형성을
가질 수 있고, 코드의 재사용과 유지보수성을 개선할 수 있다는 장점이 있다.
- 다형성
다형성이란 하나의 객체가 여러 타입을 가질 수 있고, 어떤 타입인지에 따라 다른 역할을
수행할 수 있는 성질을 말한다. 대표적으로는 오버로딩과 오버라이딩이 있다.
- 상속
상속이란 기존 클래스를 재활용하여 새로운 클래스를 만드는 것으로, 상위 클래스로부터
확장된 여러 하위 클래스가 상위 클래스의 속성과 기능을 간편하게 사용할 수 있다.
- 캡슐화
캡슐화란 서로 연관된 속성과 기능을 하나의 단위로 묶어 객체를 구성하고, 외부로부터
보호하는 것을 말한다. 이를 통해 외부의 잘못된 접근으로 의도치 않는 동작이 일어나는
것을 방지할 수 있다.
SOLID 원칙이란?
SOLID 객체 지향 원칙을 적용하면 코드 확장과 유지보수 관리가 쉬워지며,
불필요한 복잡성을 제거하여 프로젝트 개발의 생산성을 높일 수 있다.
- SRP(Single Responsibility Principle) : 단일 책임 원칙
"클래스는 하나의 책임만 가져야 한다."
: 하나의 기능만 담당하도록 하여 유지보수성과 코드의 가독성을 높일 수 있다.
이 원칙에 따르면 클래스는 오직 하나의 변경 이유만 가져야 한다.
- OCP(Open-Closed Principle) : 개방-패쇄 원칙
"소프트웨어 구성요소는 확장에 열려있고, 변경에는 닫혀있어야한다."
: 변경사항 발생시 유연하게 기능을 추가할 수 있고, 객체에 직접적인 수정은 제한한다.
- LSP(Liskov Substitution Principle) : 리스코프 치환 원칙
"하위타입은 항상 상위타입을 대체할 수 있어야한다."
: 상위타입의 객체를 하위타입의 객체로 치환해도 프로그램의 동작이 유지되어야한다.
- ISP(Interface Segregation Principle) : 인터페이스 분리 원칙
"사용하지 않는 인터페이스에 의존하지 않아야한다."
: 여러개의 작은 인터페이스를 사용하여 필요한 기능만 제공하도록 한다.
- DIP(Dependency Inversion Principle) : 의존 역전 원칙
"고수준 모듈은 저수준 모듈에 의존해서는 안된다."
: 추상화는 구체화에 의존하지 않고, 구체화가 추상화에 의존해야한다.