객체, 객체 지향 프로그래밍
객체란 의사나 행위가 미치는 대상
객체는 주문, 학생, 관리 등처럼 눈에 보이는 사물은 모두 객체라 할 수 있고 눈에 보이지 않는 것 또한 객체가 될 수 있다. 그리고 이러한 객체는 각각 어떤 특성과 행위들을 가지고 그것들을 코드로 구현한 것을 클래스라고 한다. 그리고 클래스를 기반으로 프로그래밍한 것을 객체 지향 프로그래밍(Object Oriented Programming)이라 하고 4가지의 특징이 있다.
객체 지향의 4가지 특징
상속 (Inheritance)
객체지향 프로그래밍(OOP)에서는 유지보수가 편리하고, 프로그램을 수정하거나 새로운 기능을 추가하는 것이 유연하다. 이러한 특징을 가능하게 하는 핵심 기술 중 하나가 상속(Inheritance)이다.
상속이란 기존 클래스(A 클래스)의 속성과 메서드를 새로운 클래스(B 클래스)에서 물려받아 재사용하는 개념이다. 이를 통해 코드의 중복을 줄이고, 공통 기능을 한 곳에서 관리할 수 있어 유지보수성을 높일 수 있다. 또한, 부모 클래스의 기능을 확장하거나 재정의(오버라이딩)하여 유연하게 변경할 수도 있다.
추상화 (Abstractization)
추상화(Abstractization)란 객체의 본질적이고 공통적인 특징을 추출하고, 불필요한 부분을 제거하여 단순화하는 과정이다. 이를 통해 객체의 핵심적인 속성과 동작만을 남길 수 있다. 객체지향 프로그래밍(OOP)에서 추상화를 구현하는 대표적인 방법으로 추상 클래스(Abstract Class)와 인터페이스(Interface)가 있다.
추상 클래스는 일부 메서드의 구현을 포함할 수 있지만, 인터페이스는 오직 메서드의 명세만 정의하고 구현은 포함하지 않는다. 이를 활용하면 코드의 재사용성과 유지보수성을 높일 수 있다.
다형성 (Polymorphism)
다형성(Polymorphism)이란 ‘여러 개의 형태를 갖는다’는 의미로, 하나의 행동이 여러 가지 방식으로 실행될 수 있는 개념이다. 상속을 이용한 핵심 기술 중 하나로 부모 타입으로 선언된 객체 변수를 사용하여 여러 가지 자식 객체를 동일한 방식으로 다룰 수 있도록 한다. 즉, 같은 메서드 호출이 객체의 타입에 따라 다르게 동작할 수 있으며, 이는 코드의 유연성과 확장성을 높여 유지보수를 용이하게 만든다. 대표적인 방식으로 메서드 오버라이딩(Method Overriding)이 있다.
캡슐화 (Encapsulation)
캡슐화(Encapsulation)란 객체의 속성과 기능을 외부에서 직접 접근하지 못하도록 보호하고, 필요한 정보와 기능만 외부에 공개하는 원칙이다. 대부분의 멤버 변수는 숨기고(private), 외부에서는 정해진 인터페이스(public 메서드)를 통해서만 접근하도록 제한한다.
이렇게 하면 다음과 같은 장점이 있다.
- 데이터 보호: 외부에서 객체의 내부 상태를 임의로 변경할 수 없도록 하여 데이터 무결성을 유지할 수 있다.
- 일관된 기능 제공: 외부에서는 정해진 메서드를 통해서만 객체를 조작할 수 있기 때문에 일관된 동작이 보장된다.
- 유지보수성 향상: 내부 구현을 변경하더라도 외부 코드에는 영향을 주지 않으므로 업그레이드와 유지보수가 용이하다.
- 디버깅과 오류 감지 용이: 오류 발생 시 객체 내부에서 직접 감지하고 처리할 수 있어 클라이언트 코드에서 불필요한 예외 처리를 줄일 수 있다.
결과적으로, 캡슐화가 잘된 객체는 외부에서 사용할 API가 한정적이므로 예측 가능한 방식으로 동작하며, 안정적인 서비스 제공이 가능하다.
'Java' 카테고리의 다른 글
[JAVA] 자바의 입출력스트림 (0) | 2025.02.17 |
---|---|
[JAVA] 자바 - 추상 클래스란? (0) | 2025.02.14 |
[JAVA] 자바 - 객체 간의 상속의 의미 (0) | 2025.02.11 |
[JAVA] Java의 특징과 장단점 (1) | 2025.01.23 |
[Java] JDK 17설치 및 환경변수 설정 (0) | 2023.11.06 |