Java OOP(객체 지향 프로그래밍) 개념
목차
OOP (Object-Oriented Programming)이란 객체 지향적인 프로그래밍. 즉, C언어같은 절차 지향적인 프로그래밍이 아닌 객체의 관점에서 프로그래밍을 한다는 것이다.
- OOP는 객체의 관점에서 프로그래밍 하는 것을 의미한다.
- C언어는 절차 지향 프로그래밍인데, 절차 지향 프로그래밍은 프로세스가 함수 단위로 순서대로 진행되는 것을 말한다.
- OOP는 절차지향에 비해서 사람의 사고방식과 더 가깝다.
- OOP는 객체들의 유기적인 관계를 통해서 프로세스가 진행된다.
- 애플리케이션을 구성하는 요소들을 객체로 바라보고, 객체들을 유기적으로 연결하여 프로그래밍 하는 것을 말한다.
객체 (Object) 란?
- Object란 말을 번역하여 객체란 말을 썼는데 Object의 사전적 의미는 아래와 같다
- 명사 물건, 물체 (→UFO)
- 명사 욕망, 연구, 관심 등의 대상 (→sex object)
- NOUN a thing that you can see and touch and that is not alive
- NOUN someone or something that makes you feel a specified emotion
- 영어의 정의를 요약하여 말하면 어떤 네가 인식하거나 특별하게 생각하는 물질(누구, 것)이라 말할 수 있다
- 즉, 하나의 형태를 가지기위한 목적(Object)을 기반(Oriented)한 프로그래밍 곧 OOP이다
OOP의 특징
- 캡슐화(Encapsulation)
- 캡슐화란
- 하나의 객체에 대해 그 객체가 특정한 목적에 해당하는 필요한 변수나 메소드를 하나록 묶는것
- 클래스를 만들때 이 객체가 특정한 목적을 잘 수행 할 수 있도록 변수와 메서드를 관련성 있게 구성해야한다
- 정보은닉
- 캡슐을 까기 전까지 내용이 무었인지 모르는 것 처럼 캡슐화를 하는 중요한 목적은 바로 정보은닉이다.
- 안에서만 접근할 수 있게 private로 선언하여 접근을 제한하여야한다.
- 보호된 변수는 getter나 setter 등의 메서드를 통해서만 간접적으로 접근이 가능하도록 하는 것이 캡슐화의 중요한 목적이다.(보호된 변수가 변경 될 수 있는 setter도 아무생각 없이 만들면 안된다.)
참고
- 캡슐화와 정보은닉은 동일한 개념이 아니다.
- 캡슐화를 하면 불필요한 정보를 감출 수 있기 때문에, 정보은닉을 할 수 있다는 특징이 있다는 것이다.
- 예를 들어, 리모콘을 사용하는데 리모콘 내부 회로(private으로 정의된 속성)를 알 필요가 있느냐는 것이다.
- 사용자의 입장에서는 리모콘의 조작 기능, 즉 public으로 정의된 속성만 알면 된다는 것이다.
- 추상화(Abstraction)
- 추상화는 목적과 관련이 없는 부분을 제거하여 필요한 부분만을 표현하는 것이다.
- 세상에 있는 것을 본따 클래스를 만들고 그 크래스의 상태와 행동을 부여한 객체를 만든다.
- 하지만 세상의 모든것을 다 클래스로 담고 객체를 만들려면 거대한 자원의 낭비가 불가피하다. 그래서 추상적으로 생각해 일단 큰틀의 클래스을 구현하고 거기에 최소한의 공통적인 요소나 필수 요소를 넣어 만든 것이 추상 클래스이다.
- 이 과정에서 공통적인 요소나 특징을 추출하는 과정이 추상화이다
- 추상화는 객체들의 공통된 특직을 파악해 정희애 놓은 설계기법이라 할 수 있다.
- 다형성(Polymorphism)
- 다형성은 상속을 통해 기능을 확장하거나 변경하는 것을 가능하게 해준다.
- 즉, 다형성은 형태가 같은데 다른 기능을 하는 것을 의미한다(같은 동작이지만 다른 결과물이 나올때 다형이라고 생각하면 된다.).
- 이를 통해 코드의 재사용, 코드 길이 감소가 되어 유지보수가 용이하도록 도와준다.
Overriding & Overloading
- 오버라이딩
- 부모 클래스에서 상속받은 자식 클래스에서 부모클래스에서 만들어진 메서드를 자식 클래스에서 자신의 입맛대로 다시 재정의해서 사용하는 것을 말한다.
- 오버로딩
- 같은 이름의 메서드를 사용하지만 메서드마다 다른 용도로 사용되며 그 결과물도 다르게 구현할 수 있게 만드는 개념
- 오버로딩이 가능하려면 메서드끼리 이름은 같지만 매개변수의 갯수나 데이터 타입이 다르면 오버로딩이 적용
- 다형성 사용 이유
- 같은 이름의 속성을 유지함으로서, 속성을 사용하기 위한 인터페이스를 유지하고, 메서드 이름을 낭비하지 않는다는 것이다.
- API가 많아질수록 메서드의 증대로 복잡성은 증가하기 때문에 다형성은 유용하다.
- 상속성, 재사용(Inheritance)
- 상속은 객체지향의 꽃이라고 할 수 있다.
- 상속이란 기존 상위클래스에 근거하여 새롭게 클래스와 행위를 정의할 수 있게 도와주는 개념이다.
- 기존 클래스에 기능을 가져와 재사용할 수 있으면서도 동시에 새롭게 만든 클래스에 새로운 기능을 추가할 수 있게 만들어 준다.
- 부모로부터 여러가지 상속을 받는것을 말하며 부모클래스와 자식클래스로 표현한다.
- 상속이 필요한 이유
- 상속이 필요한 이유는 코드의 중복을 없애기 위함이다.
- 코드의 중복이 많아지면 개발 단계에서도 피곤하지만, 유지 보수에서도 많은 비용이 들게 된다.
- OOP에서는 상속을 통해 코드의 중복 문제를 일부 해결할 수 있다.