[Java] 객체 지향 프로그래밍
객체 지향 이론의 기본 개념
실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들을 사물 간의 상호작용이다.
객체 지향은 상속, 캡슐화, 추상화 개념을 중심으로 점차 발전해 왔으며 최초의 객체지향 언어는 시뮬라(simula, 1960)이다.
1. 객체 지향 언어
객체 지향 언어는 기존의 프로그래밍 언어와 다른 전혀 새로운것이 아니라 기존의 프로그래밍 언어에 몇 가지 새로운 규칙을 추가하여 발전한 것이다.
객체 지향 프로그래밍(Object-Oriented Programming, OOP)은 컴퓨터 프로그래밍 패러다임 중 하나로
2. 장점
코드의 재사용성이 높고 유지보수가 용이하다.
- 재사용성 : 새로운 코드를 작성할떄 기존의 코드를 이용하여 쉽게 구현한다.
- 편의성 : 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경한다.
- 신뢰성 : 제어자와 메서드를 이용하여 데이터를 보호하고 올바른 값을 유지하며, 코드의 중복을 제거하고 코드의 불일치로 인한 오작동을 방지한다.
3. 단점
- 처리속도가 느리다.
- 객체가 많아지면 용량이 커진다.
- 설계 단계에 많은 시간과 노력이 필요하다.
4. 주요 특징 4가지
4.1. 캡슐화 (Encapsulation)
정의 : 캡슐화는 관련이 있는 변수와 함수를 하나의 클래스에 모아 외부에서 쉽게 접근하지 못하도록 하는 것을 말한다.
캡슐화의 큰 장점은 정보은닉이다.
외부에서 변수와 객체를 직접 접근하지 못하고 클래스를 통해서 접근할수 있어 데이터를 보호할 수 있고 클래스를 여러 곳에 사용하여 재사용성을 높일 수 있다. 또한 관련 있는 변수나 함수를 클래스에 모아 두기 때문에 코드 관리도 편하며 수정도 용이하다.
그래서 결합도를 낮추고 응집도를 높일수 있다.
4.2. 상속 (Inheritance)
정의 : 부모 클래스에 있는 속성과 기능을 물려받는 것을 말한다.
부모 클래스에 있는 변수와 함수를 자식 클래스가 사용할 수 있다. 부모 클래스는 주로 여러 곳에서 사용할 수 있는 공통 클래스로 만들어져서 여러 자식 클래스들에게 속성과 기능을 제공할 수 있다. 또한, 다형성을 통해 부모 클래스를 기반으로 여러 자식 클래스들의 각자의 기능을 구현할 수 있다.
4.3. 다형성 (Polymorphism)
정의 : 하나의 변수와 함수를 다양하게 이용하는 것을 말한다.
부모 클래스에 있는 함수를 오버라이딩하여 내가 원하는 기능으로 대체할 수 있으며 하나의 함수명으로 여러 개의 파라미터를 받아 오버로딩하여 다양하게 함수를 이용할 수 있다.
4.4. 추상화 (Astraction)
정의 : 공통된 속성이나 기능을 뽑아내 하나의 클래스로 만드는 것을 말한다.
여러 자식 클래스에서 공통으로 사용하는 함수가 있다고 가정한다면, 그 공통 함수는 부모 클래스로 뽑아내 추상화하여 사용할 수 있다. 보통 추상 클래스는 직접 구현하지 않고 구현체(implements)를 따로 두어 기능을 구현한다.