본문으로 바로가기

객체지향 프로그래밍(Java OOP Programming) 이란?

 

객제지향 프로그래밍이란(Object Oriented Programming) 절차지향 프로그래밍의 반대 의미로서 설계에 중점을 이론이자 방법이라고 있다줄여서 OOP 하며 프로그램 이라는 세계를 객체라는 추상적인 단위로 나눈 후에 객체들 간의 상호작용을 통해 로직을 구성하는 프로그래밍을 의미한다.

 

객제지향 프로그래밍은 다음과 같은 장점이 있다.

  1. 구현해 놓은 클래스를 확장해서 다시 사용할 있어 재사용이 용이하다.

  2. 수정작업에서 특정 역할을 하는 메서드, 혹은 변수만 수정하면 되기 때문에 유지보수 비용이 많이 단축된다.

  3. 객체단위로 작업을 하기 때문에 다수의 인원들이 개발해야 하는 대형 프로젝트에 유리하다.

  4. 객체와 객체의 메서드(행동), 멤버 변수(재료) 기준으로 개발하기 때문에 개발이 간단하다.

 

하지만 반대로 다음과 같은 단점도 존재한다.

  1. 객체단위의 개발로 인하여 용량이 증가 그에따른 처리속도가 느릴 있다.

  2. 객체들간의 역할을 확실히 하기위해서 분석, 설계에 많은 시간과, 비용을 투자해야 한다.

 

 

객체지향 프로그래밍(OOP) 주요 키워드(주요특징) 5가지

 

1. 클래스(Class)와 객체(인스턴스)(Instance)

 

클래스란 특정 역할을 수행하기 위한 멤버변수(속성) 메서드(행위) 정의된 것을 의미한다. 클래스에서 정의한 모든것이 메모리에 할당될 때 이를 객체(인스턴스)라고 한다.

 

 

2. 추상화(Abstraction)

 

추상화란 공통된 행동이나 속성을 추출하는 것을 의미한다. 추후에 클래스를 구현하기 위한 일련의 설계서 역할을 담당하는 클래스라고 생각하면 이해하기 쉽다. 다음 일련의 작업이 추상화 과정을 예로 보여주는 간단한 과정이다.

  • 구현되는 사물(혹은 엔티티 혹은 객체) 간의 특징을 파악한 후에 하나의 그룹으로 묶어준다.
  • 그룹별 사물들의 공통된 행동(메서드) 속성(변수) 추출하여 추상적인 역할을 하는 개념을 만들어 준다.

 

 

 

3. 캡슐화(Encapsulation)

 

캡슐화는 공통된 기능을 하기 위한 변수와, 메서드들을 묶어 주는 작업을 의미한다. 클래스들은 해당 클래스의 역할에 맡는 변수와 메서드 들로 구성이 되어야 하며, 변수들은 "private, protected, public"등의 지시어를 통해 외부로터의 접근을 방지해야 한다.

이를 정보은닉이라 하며, 변수에 접근하기 위해서는 메서드 이용하여 접근하도록 해야하며 대표적으로 많이 쓰이는 방식은 setter, getter메소드이다.

  setter, getter 메서드와 같이 메서드를 통해 멤버변수에 접근하기 위한 이유는, 멤버변수를 개발자가 의도하지 않는 변환등의 행위를 제지하기 위함이다. 예를들어 은행업무 시스템에서 특정 계좌의 잔고를 담당하는 변수에 직접 접근하여 잔고를 늘리거나, 줄이거나 있다고 해보자. 시스템 자체에 대한 신뢰 악용을 면치 못할것이므로, 이런 사태를 방지하기위해 setter(param), type getter() 사용하여 멤버변수에 접근하게 하는것이다.

 

 

4. 상속, 재사용(Inheritance)

 

클래스란 개념을 사용하면서, 부모클래스를 통해 속성과 기능(행동) 상속받아 그대로 사용할 있게하거나, 기능의 일부분을 수정하여 사용하는 것을 상속이라 한다.

자바에서는 C++ 다르게 다중 상속을 지원하지 않는다. 하지만 인터페이스(Interface) 만들어 다중상속을 수는 있게 만들어 놓았다. 하지만 객체 지향에서 다중상속 위해 인터페이스가 존재한다고 생각하면 안된다.

 

5. 다형성(Polymorphism)

 

특정 변수와, 메서드들이 상황에 맞게 각기 다른 역할을 수행 있게 하는것을 다형성이라고 한다.

다형성에서는 오버라이딩(Overriding) 오버로딩(Overloading) 개념을 이야기 하는데 의미는 다음과 같다.

  • 오버라이딩 : 부모클래스에서 상속받은 메서드들을 구현하여 각기 클래스의 역할에 맡게 구현하는것

 

  • 오버로딩 : 같은 이름의 메서드를 여러 구현하고 파라미터의 개수 혹은 타입으로 구분지어 여러방법으로 호출할 있게 하는 방법을 말한다.