본문 바로가기

JAVA

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

객체 지향 프로그래밍이란? 객체(Object)를 생성하는 것을 의미한다.

 

객체지향 프로그래밍에는 4가지의 큰 특징이 존재한다.

 

1. 추상화(Abstraction) 

객체의 공통적인 특징(기능, 속성)을 추출해서 정의하는 것. 객체지향 관점에서 추상화란, 클래스를 정의하는 것이다.

 

2. 캡슐화(Encapsulation) 

변수와 함수를 하나의 클래스로 묶고, 외부에서 쉽게 접근할 수 없도록 은닉한다.

이때 외부에서 내부로 접근하는 것을 제한하기 위해서 접근 제한자를 사용한다.

 

접근 제한자의 종류

  • Public : 모든 접근을 허용함.
  • Private : 현재 객체 내에서만 접근 가능함.
  • Default : 같은 패키지 내의 객체만 접근 가능함.
  • Protected : 상속 관계거나 같은 패키지 내의 객체만 접근 가능함.
  • 여기서 Default는 클래스같은 것들 정의시에 앞에 접근제한자 안쓰면 기본값으로 들어가는 제한자임.

3. 상속성(Inheritance)

이미 정의된 상위 클래스(부모 클래스)의 모든 속성과 연산을 하위 클래스(자식 클래스)가 물려 받는 것.

기존 코드를 재활용해서 사용하기 때문에 코드의 생산성을 높여준다.

하지만 상속 자체를 코드 재사용의 개념으로 이해하면 안된다. 클래스 간의 결합도가 과도하게 높아지면 장점이었던 유지보수가 어려워진다. 그러니까 반드시 기능 확장의 관점에서 포함 관계일 때에만 사용해야 한다.

  • IS-A : 부모 - 자식클래스의 관계처럼 포함 관계를 의미한다.
  • HAS-A : 한 객체가 다른 객체에 속하는 구성 관계를 의미한다.

4. 다형성(Polymorphism)

하나의 변수 또는 함수가 명령을 받았을 때, 상황에 따라서 서로 다른 방식으로 동작하는 것을 의미한다.

예시로 오버라이딩과 오버로딩이 있다.

  • 오버라이딩(Overriding) : 부모 클래스의 메소드와 같은 이름을 사용하고 매개변수도 같지만 내부 소스를 재정의하는 것이다.
  • 오버로딩(Overloading) : 같은 이름의 함수를 여러 개 정의하지만, 매개변수를 다르게 해서 같은 이름을 경우에 따라서 호출해서 사용한다.

다형성은 상속과 함께 사용하면 시너지 효과가 있다. 상속을 통해서 기능을 확장하고, 변경할 수 있으며 같은 클래스 내의 코드를 간결하게 해준다.

'JAVA' 카테고리의 다른 글

[JAVA] 패키지란?  (0) 2025.09.13
[JAVA] 가비지 컬렉션(GC)와 NPE  (0) 2025.09.13
[JAVA] 변수와 초기화  (0) 2025.09.13
[JAVA] 배열과 기본형, 참조형이란?  (0) 2025.09.13
[JAVA] 클래스, 객체, 인스턴스란?  (0) 2025.09.13