객체지향적인 특징이 강한 Java
**Java는 다른 언어들보다 유독 객체지향적인 특징이 강한 언어**입니다. Java는 **객체지향 프로그래밍(Object-Oriented Programming, OOP)** 원칙을 철저하게 따르도록 설계된 언어입니다.
아래에서 **Java가 객체지향적인 이유**와 **다른 언어들과의 차이점**을 정리해 보겠습니다. 🚀
* * * * *
**1\. Java가 유독 객체지향적인 이유**
==========================
**1.1 모든 것이 객체다 (Everything is an Object)**
-------------------------------------------
- **기본 자료형을 제외한 모든 것이 객체**입니다. (`int`, `double` 등은 기본 자료형이지만, 이를 감싸는 `Integer`, `Double` 같은 래퍼 클래스가 존재)
- Java 프로그램은 **클래스(Class)**와 **객체(Object)**를 중심으로 설계됩니다.
```
// 객체를 기반으로 동작
class Car {
String brand;
public void drive() {
System.out.println(brand + " is driving!");
}
}
public class Main {
public static void main(String[] args) {
Car myCar = new Car();
myCar.brand = "Tesla";
myCar.drive(); // Tesla is driving!
}
}
```
* * * * *
**1.2 100% 클래스 기반**
-------------------
- Java에서는 **함수(Function) 단독 사용이 불가능**하고, 반드시 **클래스(Class) 내부에 메서드(Method)로 정의**해야 합니다.
- 예를 들어, Python과 Java를 비교하면 차이가 보입니다.
### **Python (객체지향 + 절차지향 혼합)**
```
def greet():
print("Hello, World!")
greet() # 가능! (클래스 없이 함수 사용 가능)
```
### **Java (무조건 클래스 내부)**
```
public class Main {
public static void greet() {
System.out.println("Hello, World!");
}
public static void main(String[] args) {
greet(); // 반드시 클래스 내부에서 실행
}
}
```
- Java는 **클래스 없이 코드 실행이 불가능**하기 때문에, OOP(객체지향)가 강제됩니다.
* * * * *
**1.3 객체지향의 4대 원칙 완벽 준수**
-------------------------
Java는 **객체지향 4대 원칙(OOP 4대 특성)**을 강력하게 지원합니다.
### **(1) 캡슐화 (Encapsulation)**
- **데이터를 숨기고(`private`) 메서드로 접근**하도록 강제하여 **보안성과 유지보수성을 높임**.
```
class BankAccount {
private int balance = 1000; // 외부에서 직접 접근 불가
public int getBalance() { // 공개 메서드를 통해 접근
return balance;
}
}
```
* * * * *
### **(2) 상속 (Inheritance)**
- **부모 클래스의 속성과 메서드를 자식 클래스가 물려받음** (재사용성 증가).
```
class Animal {
void sound() { System.out.println("Some sound..."); }
}
class Dog extends Animal {
void sound() { System.out.println("Bark!"); }
}
```
* * * * *
### **(3) 다형성 (Polymorphism)**
- **하나의 객체가 여러 타입을 가질 수 있음** (동적 바인딩 가능).
```
class Animal {
void makeSound() { System.out.println("Animal sound!"); }
}
class Dog extends Animal {
void makeSound() { System.out.println("Bark!"); }
}
public class Main {
public static void main(String[] args) {
Animal myPet = new Dog(); // 부모 타입으로 선언 가능 (업캐스팅)
myPet.makeSound(); // Bark! (오버라이딩된 메서드 실행)
}
}
```
* * * * *
### **(4) 추상화 (Abstraction)**
- **불필요한 세부 정보를 숨기고, 필요한 기능만 노출** (추상 클래스, 인터페이스 활용).
```
abstract class Animal {
abstract void makeSound(); // 구체적인 구현 X
}
class Cat extends Animal {
void makeSound() { System.out.println("Meow!"); }
}
```
- `abstract` 키워드로 **필요한 기능만 정의하고, 구현은 자식 클래스가 담당**.
* * * * *
**2\. Java와 다른 언어들의 비교 (객체지향성 측면)**
-----------------------------------
| **언어** | **객체지향 특징** | **비고** |
| --- | --- | --- |
| **Java** | ✅ 강제적 OOP | 100% 클래스 기반 |
| **Python** | ✅ OOP + 절차지향 혼합 | 클래스 없이 함수 작성 가능 |
| **C++** | ✅ OOP 지원 | 절차지향도 가능 |
| **C** | ❌ OOP 지원 X | 함수 기반 |
| **JavaScript** | ✅ 프로토타입 기반 OOP | 클래스 기반 아님 (ES6부터 `class` 도입) |
- **Java는 C++과 달리 100% 객체지향을 지향**합니다.
- **Python과 JavaScript는 OOP를 지원하지만, 클래스 없이도 함수 사용이 가능**합니다.
* * * * *
**3\. Java의 객체지향적 특징이 강한 이유**
-----------------------------
1. **모든 코드가 클래스 내부에서 실행되어야 함.**
2. **객체 없이 실행 가능한 독립 함수가 없음.**
3. **OOP의 4대 원칙(캡슐화, 상속, 다형성, 추상화)을 강력히 지원.**
4. **Java는 다형성과 인터페이스 기반의 설계를 많이 활용.**
5. **상속과 오버라이딩을 쉽게 구현할 수 있도록 설계됨.**
* * * * *
**결론**
------
Java는 **객체지향적인 특징이 강하게 반영된 언어**이며, **클래스를 중심으로 코드가 작성되도록 강제되는 특징**을 가집니다.\
다른 언어들은 절차지향적인 방식과 혼합해서 사용할 수 있지만, **Java는 객체지향을 기반으로 설계된 언어**입니다.
이제 객체지향 개념을 익히면서, **Java의 "객체 중심" 코딩 스타일**을 자연스럽게 익히면 좋을 것 같습니다. 😊
* * * * *
### **📌 다음 학습 추천**
객체지향 개념을 확실히 익히려면 다음 개념을 공부하면 좋습니다:
- **클래스와 객체 생성**
- **생성자와 오버로딩**
- **상속과 다형성**
- **인터페이스와 추상 클래스**
- **Java의 디자인 패턴 (Singleton, Factory 등)**
더 궁금한 점이 있으면 질문 주세요! 🚀🔥
댓글
댓글 쓰기