Programing Language/Java

[Java] 자바 객체지향 개념 기초(Basic Java Object Oriented Programing)

vinedpillar 2022. 5. 11. 13:13

객체지향의 개념

  • 세상에 존재하는 모든 사물을 객체로 보고, 세상에 벌어지는 모든 사건들은 객체들간의 상호작용을 통해 발생한다는 전제로 출발합니다.

  • 명령어의 나열을 통해 프로그램 실행하는 절자지향적 프로그램과 달리, 객체지향적 프로그램은 프로그램에 필요한 데이터를 모아 추상화하여 객체로 만들고, 객체간의 상호작용 방식을 기술하는 방식으로 프로그램 실행합니다.

  • 실제 사물의 속성(state)과 기능(behavior)을 분석한 후에 이를 프로그래밍의 변수와 함수로 정의하여 실제 세계를 프로그래밍에 최대한 반영합니다.

 

 

 

 

객체지향 설계의 장점

  • 코드 재활용성 증가: 객체지향 방식의 설계로 코드 중복을 최소화하고, 재활용성을 증진합니다.

  • 유지보수 간편화: 기능이 모듈화되어 유지 보수가 필요한 부분만 수정할 수 있습니다.

  • 데이터 관리 용이: 사용되는 데이터의 구조를 비교적 쉽게 파악하고 관리할 수 있습니다.

 

 

 

 

객체지향을 위한 프로그래밍 요소

  • 오브젝트(Object)
    • 세상에 존재하는 사물을 뜻합니다.
    • 사물의 속성과 기능을 분석하고 정의하여 이를 프로그램화 하는 것이 객체지향 프로그래밍입니다.

  • 클래스(Class)
    • 오브젝트의 속성과 기능을 정의하여 프로그램으로 기술한 것 입니다.
    • 클래스에서 정의한 내용을 담은 인스턴스를 생성하는데 사용합니다.
    • 클래스는 크게 필드와 메서드, 컨스트럭터를 요소로 가지고 있습니다.

  • 인스턴스(Instance)
    • 생성자를 통해 만들어진 오브젝트의 개별적인 요소(들) 입니다.
    • 하나의 클래스로 유사한 성질의 수 많은 인스턴스를 생성 가능합니다.

 

 

 

 

객체간의 상호작용 관계

  • 객체는 단독으로 활용될 수 있지만, 다른 객체와의 관계를 가지고 활용됩니다.

  • 객체간의 관계는 크게 3가지로 구분됩니다.
    • 집합관계: 객체들이 특정 개념으로 묶일 수 있는 관계입니다.
      (자동차를 예로 들면 핸들, 와이퍼, 엔진 등 자동차를 이루는 부품이 집합 관계라고 할 수 있음)

    • 사용 관계: 객체간 서로의 정보나 기능을 사용하는 관계입니다.
      (자동차를 예로 들면 운전자가 자동차를 탄다, 멈춘다 등 사람이 자동차의 기능을 조작하는 것을 사용 관계라고 할 수 있음)

    • 상속 관계: 특정 객체가 다른 객체의 특징을 포함하는 관계입니다.
      (자동차를 예로 들면 자동차가 승용차, 스포츠카, 트럭 등의 개념을 포함하고 있으므로 이를 상속 관계라고 할 수 있음)

 

 

 

 

객체지향 프로그래밍의 특징

  • 캡슐화(encapsulation)
    • 객체는 속성(데이터)와 기능(메서드)를 하나로 묶어서 관리할 수 있습니다.
    • 이를 통해 데이터의 관리를 편리하게 만들어줍니다.
    • 객체의 데이터와 메서드를 감춰 외부로부터 변조를 보호합니다.

  • 상속성(Inheritance)
    • 상위 개념의 객체(부모)의 속성과 기능을 하위 개념 객체(자식)에게 상속시켜 특징을 물려줄 수 있습니다.
    • 이를 통해 중복된 프로그램 코드를 줄이고, 재사용성을 높일 수 있습니다.
    • 코드 수정 필요 시 상위 객체를 수정하면 영향을 받는 모든 객체에 적용되어 유지보수 시간을 최소화 할 수 있습니다.

  • 다형성(polymorphism)
    • 하나의 속성이나 기능을 상황에 따라 다른 내용으로 적용할 수 있는 특징을 뜻합니다.
    • 한 동작을 통해 여러 결과가 나타나도록 할 수 있습니다.
    • 이를 통해 중복되는 기능 구현 시 코드의 길이를 줄여 보다 효과적으로 프로그래밍을 할 수 있습니다.

  • 추상화(Abstraction)
    • 추상화는 객체의 핵심적인 정보만을 표현하여 프로그램 구조를 단순화 하는 것을 뜻합니다.
    • 기존 객체들의 공통적인 요소를 추출하여 상위 객체로 정의합니다.
    • 이를 통해 전체 프로그램의 구조를 파악할 수 있으며, 중복되는 코드가 발생할 가능성을 낮춰줍니다.