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

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

반응형

객체지향 프로그래밍이란?

  • 부품에 해당하는 객체들을 먼저 만들고, 프로그램을 객체로 구성하는 것
  • 프로그램 규모가 커지면서 생각한 해결책이 '프로그램을 작게 나눠서 만들고, 합치자!'이다.
  • 각각의 객체는 맡은 작은 기능을 수행하고, 서로 협력해 큰 규모의 프로그램이 되는 것이다.
  • 이 과정에서 굉장히 많은 객체가 존재할 수 있기 때문에 객체를 서로 구분해야 한다.
  • 결국, 각 객체들에게 기능을 제공하는데 어떤 책임을 부여하고 어떻게 협력을 할지 정하는 것이 객체지향 프로그래밍이다!

 

객체란?

  • 자신의 속성을 가지고 있고 다른 친구들과 식별 가능한 것으로 작은 기능을 수행한다.
  • 프로그램을 만들 때 객체를 서로 구분해야 하는데, type(형)으로 구분한다.
  • 타입을 만든다는 것은 클래스를 만드는 것과 같다.
  • ex) String s = "STR"; : String type이다.

 

 

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

1. 캡슐화(Encapsulation)

  • 맡은 역할을 수행하기 위한 데이터와 기능을 묶는 것
  • 객체들이 동작하는데 안정성이 필요해 등장함
  • 객체는 스스로 캡슐링 되어서 기능을 수행하는 단위로 완전함을 가짐
  • 정보가 은닉되어 있어서 외부에서는 접근할 수 없음
  • 노출 시 잘못 사용해 객체에 영향 끼치는 것을 방지하기 위해 사용
  • 접근 권한을 통해 제공되는데 public, private, protected와 같은 내용에 의해서 구현된다.
  • ex) 컴퓨터의 부품이 노출되어 있으면 고장 날 수 있음

 

2. 상속(Inheritance)

  • 부모 객체의 필드나 메서드를 자식에게 물려주는 것으로 상위 객체를 재사용함
  • 부모(추상) -> 자식(구체) 사이에서 상속 관계가 맺어짐
  • 객체를 빠르게 설계할 수 있고, 코드 중복을 줄려 준다.
  • 자바에서 상속은 클래스의 단일 상속만 지원하지만, 횟수에는 제한이 없다.
  • 모든 클래스는 Object클래스를 상속받아 기능을 물려받아 사용 중이다.
  • ex) 음식 -> 한식 -> 김치찌개

상속 관계

 

3. 추상화(Abstraction)

  • 객체들의 공통적인 특징을 뽑아내는 것
  • 이 뽑아낸 특징을 상속받아 하위 클래스들이 정의해 사용할 텐데 이 과정에서 추상체와 구상체가 구분됨
  • 객체 간의 관계에서 상위에 있는 것이 항상 하위보다 추상적이어야 함
  • 사용자에게 세부 사항은 감추고 작동되는 기능만 제공하려는 목적
  • 즉, 사용자는 객체가 무엇을 하는지 알 수 있지만, 어떻게 하는지는 알 수 없다.

 

4. 다형성(Polymorphism)

  • 같은 타입이지만 실행 결과가 다른 객체를 이용하는 것
  • type을 여러 가지로 표현할 수 있음
  • 상속받는 상위 클래스는 동일하지만, 그것을 상속한 하위 클래스나 객체에 따라 다르게 작동할 수 있음
  • 아래처럼 하나의 타입에 여러 객체를 대입해서 다양한 기능으로 이용이 가능하다.
interface Move {
    void move() {}
}

class Go implements Move {
    void go() {}
    @Override
    void move() {}
}

class Stop implements Move {
    void stop() {}
    @Override
    void stop() {}
}


Move move = new Move();
Move move = new Go();
Move move = new Stop();

 

 

* 오버로딩 : 같은 이름이지만, 서로 다른 매개변수를 가지고 있는 메서드를 여러 개 정의하는 것.

* 오버라이딩 : 상위 클래스가 가지고 있는 메서드를 하위 클래스에서 재정의 하는 것.

 

 

 

출처

https://coding-factory.tistory.com/328

https://catsriding.dev/dev/oop/

https://richong.tistory.com/122

https://sesok808.tistory.com/31

https://gre-eny.tistory.com/269

반응형