80년도 초 소프트웨어 업계는 빠르게 변화하는 세상에 쫓아가지 못하고 있었다, 해결책으로 여러 가지 방법을 찾다가 객체지향을 도입하게 되었는데 기존의 절차적 프로그래밍이 아닌 객체 지향 프로그래밍으로 바꾸게 되니 코드의 재사용성은 높아지고 유지보수가 용이 해지며 중복 코드는 제거됨으로 오늘날까지 많이 쓰이고 있는 방식 중에 하나로 자리 잡게 되었다.
객체지향 언어 = 프로그래밍 언어 + 객체지향 개념
컴퓨터 프로그래밍 패러다임 중 하나로, 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 이론이다.
객체 지향 프로그래밍의 특징은 다음과 같이 나타낼 수 있다.
상속성, 다형성, 캡슐화, 추상화
기존 상위 클래스에 기능을 가져와 재사용할 수 있으면서도 동시에 새로운 하위 클래스에 새로운 기능도 추가할 수 있는 것을 말한다.
객체 지향을 공부 했다면 부모 클래스와, 자식 클래스라고 표현하는 것을 많이 들었을 텐데 말 그대로 부모가 자식에게 모두 상속해주는 것 처럼 부모 클래스가 자식 클래스에게 모두 상속해줌으로 써 코드의 중복을 없애준다.
상속은 다음과 같은 목적을 위해 사용한다.
상속과 연관있는 개념으로 한 객체가 상속을 통해 기능을 확장하거나 변경하여 다른 여러형태(객체)로 재구성 되는 것을 말한다.
다형성에는 대표적으로 오버로드(overload) 와 오버라이드(override)가 존재하는데 위의 행위를 하는 것을 오버로딩(overloading) 과 오버라이딩(overriding) 이라고 한다.
오버로딩(overloading)의 특징
대표적으로 java를 처음배우면 반드시 적게되는 코드인 println() 메서드가 오버로딩 되어있기 때문에 int, String, boolean, char형 인자를 모두 받아 동작할 수 있다.
오버라이딩(overriding)의 특징
부모가 default 접근제어자인 경우 자식은 default, protected, public 중 하나로 접근제어자를 설정해야한다.
데이터와 코드의 형태를 외부로부터 알 수 없게하고, 데이터의 구조와 역할, 기능을 하나의 캡슐형태로 만드는 방법이다. 흔히 접근제어자 라고 불린다.
접근제어자 | 같은패키지 일반 클래스 | 같은 패키지 자식 클래스 | 다른패키지 일반 클래스 | 다른패키지 자식 클래스 |
---|---|---|---|---|
private | 접근 불가능 | 접근 불가능 | 접근 불가능 | 접근 불가능 |
protected | 접근 가능 | 접근 가능 | 접근 불가능 | 접근 가능 |
default | 접근 가능 | 접근 가능 | 접근 불가능 | 접근 불가능 |
public | 접근 가능 | 접근 가능 | 접근 가능 | 접근 가능 |
객체의 공통적인 속성과 기능을 추출하여 정의하는 것을 말한다.
실제로 존재하는 객체들을 프로그램으로 만들기 위해 공통 특성을 파악해 필요없는 특성을 제거하는 과정이다.
추상화는 객체들의 공통된 특징을 파악해 정의해 놓은 설계 기법이라 할 수 있다.
https://velog.io/@gillog/OOP객체-지향-프로그래밍
https://woo0doo.tistory.com/15
https://tcpschool.com/java/java_modifier_accessModifier
https://youtube.com/playlist?list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp