객체지향적인 특징이 강한 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 등)**


더 궁금한 점이 있으면 질문 주세요! 🚀🔥

댓글

이 블로그의 인기 게시물

js 스트링에서 요소 갯수 세기

STUDY

javascript cheatsheet