박서희연구소

[Java] 객체 지향 프로그래밍[OOP(Object-Oriented Programming)] 이란? 본문

○ Programming [Basic]/Java

[Java] 객체 지향 프로그래밍[OOP(Object-Oriented Programming)] 이란?

SEOHUI PARK 2020. 9. 16. 13:53
반응형

1. OOP(Object-Oriented Programming) 란?

객체 지향 프로그래밍은 이름에서 알 수 있듯 객체를 코드화해 프로그래밍 하는 것을 의미한다.

  • OOP  절차 지향 프로그래밍 방식에 비해 사람의 사고 방식과 더 가까우며, 객체들의 유기적인 관계를 통해서 프로스세스가 진행됨
  • 객체는 사용자들에게 보여지며 할당된 작업을 수행함
  • 상속, 숨김, 다형성 등의 실제 엔티티를 구현하는 것을 목표로 함
  • 데이터와 동작하는 함수들을 결합하여, 해당 함수를 제외한 코드의 다른 부분들이 데이터에 접근할 수 없도록 함

2. 특징

추상화(Abstraction)

데이터 추상화는 필수 세부 정보만 사용자에게 표시되는 것을 이야기 한다.

현실 세계의 예를 들면, 자동차는 개별적인 부품이 아닌 자동차로 간주된다.

한 마디로 정의하면, 객체의 필수 특성만 식별하고 관련없는 세부 사항은 무시하는 프로세스다.

 

객체의 속성과 동작이 비슷한 유형의 다른 객체와 구분되며, 분류 및 그룹화 하는데 도움을 준다.

차를 운전하는 사람을 생각해 봤을때, 엑셀을 밟으면 차의 속도가 빨라지고, 브레이크를 밟으면 차가 멈춘다는 사실은 알지만, 자동차의 내부 가속 장치와, 브레이크 장치 등의 메커니즘과 구현에 대해서 알지 못한다.

이것을 바로 추상화라고 한다.

 

캡슐화(Encapsulation)

캡슐화란 데이터를 단일의 단위로 묶는 것을 이야기 한다.

코드와 그 코드가 조작하는 데이터를 결합하는 메커니즘으로, 이러한 방법은 외부의 코드가 데이터에 액세스하는 것을 방지하는 역할을 한다

  • 캡슐화된 클래스의 변수와 데이터는 다른 클래스에서 숨겨지며, 선언된 클래스의 멤버 함수를 통해서만 접근이 가능
  • 다른 클래스로 부터 캡슐화되어 숨겨진 클래스는 data-hiding(데이터 은닉) 과 유사
  • 캡슐화는 클래스의 모든 변수를 private 으로 선언하고, 메서드를 public 으로 작성함으로써 변수의 값을 설정하고 가져올 수 있음

상속(Inheritance)

상속은 OOP 에서 굉장히 중요한 개념으로, 한 클래스가 다른 클래스의 기능(필드와 메서드)을 상속하도록 허용하는 메커니즘이다.

  • 슈퍼 클래스(Superclass) : 기능이 상속되는 클래스를 슈퍼 클래스(기본 혹은 상위 클래스라고도 함)라고 함
  • 서브 클래스(Subclass) : 다른 클래스를 상속하는 클래스를 서브 클래스(하위 또는 파생, 자식, 확장 클래스라고 도 함)라고 하며, 서브 클래스는 슈퍼 클래스에게 상속받은 필드와 메서드 외에 자체 필드 및 메서드를 추가할 수 있음
  • 재사용성(Reusability) : 상속은 재사용성의 개념을 지원하므로, 새 클래스를 만들때, 원하는 코드를 포함하는 기존의 클래스가 있다면, 새 클래스로 파생하여 사용할 수 있음

다형성(Polymorphism)

동일한 이름을 가진 엔티티를 효율적으로 구별하는 기능을 말하며, 다형성의 2가지 종류로 오버로딩(Overloading)과 Overriding(오버라이딩) 이 있다.

  • 오버라이딩(Overriding) : 슈퍼 클래스에서 상속받은 서브 클래스가 슈퍼 클래스에서 만들어진 메서드를 서브 클래스에서 자신의 입맛대로 다시 재정의해서 사용하는 것을 의미함
  • 오버로딩(Overloading) : 같은 이름의 메서드를 사용하지만 메서드마다 다른 용도로 사용되며 그 결과물도 다르게 구현할 수 있게 만드는 개념(오버로딩이 가능하려면 메서드끼리 이름은 같으나 매개변수의 갯수나 데이터 타입이 다름, 메서드 이름 같아도 문제 없음)
// Superclass(Overriding) 
public class Employee {
    public String name;
    public int age;
    
    public void print() {
        System.out.println("사원의 이름 = " + this.name + ", 나이 = " + this.age);
    }
}

// Subclass(Overriding)
public class Manager extends Employee {
    String jobOfManage;
    
    // pirnt() method overriding
    public void print() {
        System.out.println("사원의 이름 = "+this.name+", 나이 = " + this.age);
        System.out.println("관리자 " + this.name + "은 " + this.jobOfManage + " 담당입니다.");
    }
}

// Overloading
public class OverloadingTest {
    public void test() {
        System.out.println("사용자 없음");
    }
  
	public void test(String name) {
		System.out.println("사용자 이름 = " + name);
	}
    
    public void test(String name, int money) {
        System.out.println("사용자 이름 = " + name + ", 사용료 = " + money);
    }
}

 

- 끝 -

반응형

'○ Programming [Basic] > Java' 카테고리의 다른 글

[Java] List  (0) 2022.12.26
[Java] Stream  (0) 2022.09.06
[Java] Optional  (0) 2022.09.05
[Java] Lambda Expression  (0) 2022.09.05
[Java] EnumSet  (0) 2022.09.02
Comments