[Java] 객체지향 프로그래밍(OOP)이란?
객체지향 프로그래밍 (OOP : Object Oriented Programming)
현실 세계의 개체(Entity)를 하나의 객체(Object)로 만들어 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법입니다.
객체 지향 프로그래밍 특징
* 추상화
불필요한 정보는 숨기고 중요한 정보만을 표현하는 것을 의미합니다. 위의 예시의 경우, 공통되는 특징들을 묶어서 스마트폰이라는 추상화가 이루어졌습니다.
* 캡슐화
프로그램 코드에서 변수와 함수는 분산되어 있기 때문에 재활용이 불편합니다. 그러나 객체지향에서 기능과 특성을 클래스에 모으면 관련된 기능을 사용하기 용이해집니다.
* 상속
객체지향프로그래밍에서 상속은 어떤 클래스를 확장하여 클래스를 만들 수 있음을 의미합니다. 상위 클래스(Super Class)의 모든 속성과 메서드를 하위클래스로 물려줄 수 있습니다. 이 때 물려받은 것들을 그대로 사용할 수도 있고, 커스텀할 수도 있습니다.
* 다형성
하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것을 의미합니다. 즉 오버라이딩과 오버로딩이 가능하다는 이야기 입니다. 위에서도 onButton이 부모 클래스와 다르게 동작함을 알 수 있습니다.
- 오버라이딩(OverRiding) : 부모 클래스의 메서드와 같은 이름, 매개 변수를 재정의 하는 것.
- 오버로딩(OverLoading) : 같은 이름의 함수를 여러개 정의하고, 매개변수에 따라 다르게 호출할 수 있게 하는 것.
하위클래스가 물려받은 메서드를 오버라이드하여 커스텀하는 것은 매우 중요한 의미를 가집니다. 이를 통해 같은 이름의 메서드임에도 상황에 맞는 다른 실행결과를 보여줄 수 있습니다.
다형성을 통해 유사한 클래스가 추가될 경우 유지보수가 용이하고 각 자료형마다 다른 메서드를 호출할 필요가 없으므로 조건문도 효율적으로 줄일 수 있습니다.
객체지향 프로그래밍의 장점
- 코드 재사용 용이
이미 만들어져 있는 클래스를 재사용 할 수 있고, 상속을 통해 코드의 확장성을 높일 수 있습니다.
- 유지보수가 편리
캡슐화를 통해 유지보수가 쉽습니다
- 대형 프로젝트에 적합
클래스 단위로 모듈화 시켜 개발 하기 때문에 업무분담의 편리성 향상됩니다.
객체지향 프로그래밍의 단점
개발속도가 느림
- 객체가 처리하려는 것에 대한 정확한 이해가 필요 설계에 시간이 오래걸립니다.
실행속도가 느림
- 객체지향 언어가 대체적으로 실행속도가 느립니다.
코딩 난이도 상승
- 다중 상속과 같은 이유로 복잡도 상승됩니다.