객체지향프로그래밍(Object Oriented Programming)
프로그램을 여러개의 독립된 단위인 객체들의 모임으로 파악하고자하는 것이다.
- 자바는 대표적인 객체지향 프로그래밍 언어이다.
- 프로그램을 객체라는 단위로 나누고 객체들간에 상호작용하는 것을 의미한다.
- 부품에 해당되는 객체들을 먼저 만들고 하나씩 조립해서 완성된 소프트웨어를 만드는 기법
객체란?
객체의 넓은 의미
- 객체(Obejct)는 우리 주변에 있는 모든 것이 될 수 있다.
- 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고, 다른 것과 식별이 가능한 것.
- 예를 들어, TV, 컴퓨터, 건물, 의자, 사람 등 모두 객체가 될 수 있다.
- 객체는 속성(필드)과 동작(메서드)을 가진다.
객체의 좁은 의미
- 객체란 클래스의 인스턴스나 배열을 말한다.
- 컴퓨터 공학에서 객체: 변수, 자료구조, 함수, 메서드, 인스턴스 메모리 값
- 객체는 자신만의 고유한 특성과 행동을 가지며 다른 객체들에게 행동을 요청하거나 정보를 주고 받는 등 상호작용을 하면서 존재한다.
클래스란?
- 객체를 찍어내기 위한 틀, 설계도
- 멤버 변수와 메서드를 가지는 객체를 만들기 위한 확장이 가능한 코드 양식
인스턴스란?
- 객체는 소프트웨어 세계에 구현할 대상
- 인스턴스는 설계도(클래스)에 따라 소프트웨어 세계에 구현된 실체
객체지향프로그래밍과 절차지향프로그래밍
객체지향프로그래밍
- 처리방식: 문제를 여러개의 객체로 나누어 처리
- 장점
- 코드 재사용이 용이하다.
- 유지보수가 쉽다.
- 대형 프로젝트에 적합하다.
- 단점
- 처리 속도가 상대적으로 느리다.
- 객체가 많으면 용량이 커진다.
- 설계시 많은 시간과 노력이 필요하다.
- 예: 자바, 파이썬, C#
절차지향프로그래밍
- 처리 방식: 문제를 여러개의 함수로 나누어 처리
- 장점
- 단점
- 유지보수가 어렵다.
- 대규모 프로젝트에 부적합하다.
- 예: C
객체지향프로그래밍의 특징
- 캡슐화
- 상속
- 추상화
- 다형성
캡슐화(Encapsulation)
- 관련된 필드와 메소드를 하나로 묶고 실제 구현 내용을 외부로부터 감추는 기법 → 정보 은닉 가능
- 외부에서는 공개된 메서드를 통해 접근할 수 있다.
상속(Inheritance)
- 코드 공유 방법 중 하나
- 상속이란 상위 클래스의 모든 것을 하위클래스가 이어 받는 것이다.
- 이미 작성된 클래스의 특성을 그대로 이어 받아 새로운 클래스를 생성하는 기법이다.
- 상속이 필요한 이유는 코드의 중복을 없애기 위함이다.
→ 코드의 중복이 많아지면 개발 단계와 유지보수에서 많은 비용이 소요되기 때문에 코드 중복은 피하는 것이 좋다.
추상화(Abstraction)
- 추상화는 객체에서 공통된 속성과 행위를 추출하는 기법이다.
- 실제 존재하는 객체들을 프로그램으로 만들기 위해 공통적인 특성을 파악하고 불필요한 특성을 제거하는 과정을 말한다.
다형성(Polymorphism)
- 사전적인 의미로는 다양한 형태로 나타날 수 있는 능력을 의미한다.
- 다형성은 같은 이름의 메서드를 호출하더라도 객체에 따라 다르게 동작하는 것을 말한다.
- 상위 클래스의 동작을 하위클래스에서 다시 정의하여 오버라이딩하는 것 또한 다형성으로 볼 수 있다.
- 하나의 클래스 내에서 이름은 같지만 서로 다르게 동작하는 메소드를 여러 개 만드는 오버로딩 또한 다형성으로 볼 수 있다.