-
Java는 왜 Pure OOP가 아닐까?Java 2022. 5. 10. 00:38
Pure OOP란?
말 그대로 순수하게 완전히 OOP를 지향하고 관련 기능을 지원하는 언어를 말합니다.
프로그래밍 언어가 Pure OOP를 지원하기 위해서는 7가지 특성이 충족되어야 합니다.
- Encapsulation/Data Hiding(캡슐화/은닉화)
- Inheritance(상속)
- Polymorphism(다형성)
- Abstraction(추상화)
- All predefined types are objects (이미정의 된 타입들은 모두 객체여야 한다)
- All user defined types are objects (사용자가 정의한 타입들은 모두 객체여야 한다.)
- All operations performed on objects must be only through methods exposed at the objects. (객체의 모든 연산들은 메서드를 통해서 이루어져야 한다.)
자바는 객체지향 언어라고 불리는데 위의 특성에서 어떤 것을 어기고 있을까요?
자바는 캡슐화/은닉화/상속/다형성/주상화/사용자가 정의한 타입들은 모두 객체와 같은 특성들을 잘 지키고 있습니다.
즉, 1번 2번 3번 4번 6번 같은 경우에는 잘 지켜지고 있습니다.
하지만 5번과 7번이 지켜지지 않았습니다.
바로 자바에는 참조형 변수와 기본형 변수가 존재합니다.
여기에 있는 기본형변수가 객체가 아니기 때문에 5번이 지켜지지 않습니다.
1. 기본형 타입 변수의 존재
int, long, boolean, double, float, char 등과 같은 기본형 자료 타입이 존재하고 이는 객체로 표현되지 않았습니다.
2. Wrapper 클래스의 한계
자바는 래퍼 클래스를 통해 기본형을 객체로 객체를 기본형으로 변환하는 메커니즘을 제공합니다.
하지만 이때 내부적으로 boxing과 unboxing이 수행되기 때문에 순수한 OOP가 되지는 않습니다.
예를 들어 다음과 같은 코드가 순수 OOP로 동작하지 않는 2가지 문제가 있습니다.
public class BoxingExample { public static void main(String[] args) { Integer i = new Integer(10); Integer j = new Integer(20); Integer k = new Integer(i.intValue() + j.intValue()); System.out.println("Output: "+ k); } }
1. Integer 클래스를 생성하는 동안 기본 타입인 int형인 10,20을 이용하고 있습니다.
2. 더하는 동안 기본형인 int를 사용합니다.
이러한 이유들 때문에 Java는 Pure OOP가 아닙니다.
출처
https://www.geeksforgeeks.org/java-not-purely-object-oriented-language/
'Java' 카테고리의 다른 글
Java에 원시타입(primitive type)이 존재하는 이유 (0) 2022.05.28 전략 패턴이란? (0) 2022.05.25 객체지향 5원칙 : SOLID (0) 2022.04.22 [Java] 빌더 패턴 (0) 2022.04.09 [Java] 프록시 패턴이란? (0) 2022.04.08