객체지향 프로그래밍(Object Oriented Programming)이란
객체지향 프로그래밍이란 프로그램 구현에 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 객체들의 역할과 책임을 정의해서 객체들간의 상호작용을 통해 프로그램을 구현하는 것이다.
즉, 기능이 아닌 객체가 중심이며 "누가 어떤일을 할 것인가?"가 핵심이다.
객체지향 프로그래밍의 장단점
장점
- 코드 재사용이 용이하다.
다른 개발자가 만든 객체를 가쳐와 사용할 수 있고, 상속을 통해 확장해서 사용할 수 있다.
- 유지보수가 편하다.
절차지향 프로그래밍에서 유지보수할 때는 일일이 찾아서 수정해야하는 반면에, 객체지향 프로그래밍에서는 수정해야 할 부분이 특정 클래스 내의 멤버 변수, 메서드등으로 존재하기 때문에 해당 부분만 찾아서 수정할 수 있다.
- 대형 프로젝트에 적합하다.
클래스단위로 모듈화시켜서 개발이 가능하므로 여러 명, 여러 회사에서 프로젝트를 개발할 때 업무를 분담하기 쉽다.
단점
- 처리속도가 절차지향 프로그래밍에 비해 상대적으로 느리다.
- 객체가 많아지면 용량이 커질 수 있다.
- 프로그램을 설계할 때 많은 시간과 노력이 필요하다.
객체지향 프로그래밍의 특징
객체지향 프로그래밍은 캡슐화, 추상화, 상속, 다형성이라는 특징을 가지고 있다.
1. 캡슐화 (Encapsulation)
캡슐화란 클래스 안에 서로 연관있는 속성과 기능들을 하나의 캡슐로 만들어서 데이터를 외부로부터 보호하는 것을 말한다. 캡슐화를 하는 이유로는 크게 두 가지가 있다.
- 데이터 보호(data protection) - 외부로부터 클래스에 정의된 속성과 기능들을 보호
- 데이터 은닉(data hiding) - 내부의 동작을 감추고 외부에는 필요한 부분만 노출
즉, 캡슐화는 각 객체 고유의 독립성과 역할, 책임 영역을 안전하게 지키고자 하는 목적을 가지고 있다.
Java의 객체지향 프로그래밍에서 캡슐화를 구현하기 위한 방법은 크게 두 가지가 있다. 접근제어자를 활용하는 방법과 Getter / Setter를 활용하는 방법이다.
다만 Getter / Setter의 경우, Getter는 비즈니스 로직에 사용하지 않고 데이터를 가져올 때만 사용하는 것을 권장한다. 그리고 Setter는 무분별하게 사용될 경우가 생겨 데이터 무결성을 해칠 수 있으므로 사용을 지양하는 것이 좋다.
2. 추상화 (Abstraction)
추상화란 객체의 공통적인 속성과 기능을 추출하여 정의하는 것이다.
예를 들어 코끼리와 기린이라는 객체가 있을 때 두 객체의 공통적인 특징(눈, 코, 입이 있다, 먹는다, 움직인다 등)을 찾아내서 하나로 정의하는 것을 의미한다.
Java에서는 이를 클래스로 정의하고 멤버 변수, 메서드로 표현한다.
3. 상속 (Inheritance)
상속이란 기존의 클래스를 재활용해서 새로운 클래스를 작성하는 것이다.
상속은 클래스 간에 공유될 수 있는 속성과 기능들을 상위 클래스로 추상화 시켜서 해당 상위 클래스로부터 확장된 여러 하위 클래스들이 상위 클래스의 속성과 기능들을 간편하게 사용할 수 있도록 한다.
즉, 클래스 간에 공유하는 속성과 기능들을 간편하게 재사용할 수 있어서 반복적인 코드를 최소화하고 공유하는 속성과 기능하게 간편하게 접근할 수 있게 해주는 장점을 가지고 있다.
4. 다형성
다형성이란 어떤 객체의 속성이나 기능이 상황에 따라 여러 가지 형태를 가질 수 있는 성질이다.
예를 들어 나의 역할이 부모님에게는 자식, 친구들에게는 친구, 학교에서는 학생 등 상황에 따라 달라지는 것과 비슷하다.
Java에서는 오버라이딩(Overriding)과 오버로딩(Overroading)을 통해 다형성을 구현할 수 있다.
Reference
객체 지향 프로그래밍의 4가지 특징ㅣ추상화, 상속, 다형성, 캡슐화 -
객체 지향 프로그래밍은 객체의 유기적인 협력과 결합으로 파악하고자 하는 컴퓨터 프로그래밍의 패러다임을 의미합니다. 객체 지향 프로그래밍의 기본적인 개념과 그 설계를 바르게 하기 위
www.codestates.com
https://whales.tistory.com/122
OOP(객체 지향 프로그래밍)
📖 객체지향이란? 객체지향 프로그래밍(Object-Oriented Programming)이란 프로그램을 설계하는 개념이자 방법론을 의미합니다. 여기서 나오는 객체라는 단어가 현실에서는 잘 쓰이지 않는 단어라 의
whales.tistory.com
https://jeong-pro.tistory.com/95
객체 지향 프로그래밍이 뭔가요? (꼬리에 꼬리를 무는 질문 1순위, 그놈의 OOP)
객체 지향 프로그래밍(Object Oriented Programming) 여러 소프트웨어 관련 IT기업 신입사원 기술면접에서 면접자들 긴장을 풀어줄 겸 워밍업으로 자주 나오는 질문이다. "객체 지향 프로그래밍에 대해
jeong-pro.tistory.com
댓글