Java를 배워보자/3. 객체 지향 프로그래밍 (OOP)

자바 OOP 클래스와 객체

_Blue_Sky_ 2024. 9. 26. 16:38
728x90

자바 객체지향 프로그래밍(OOP)의 핵심: 클래스와 객체 심층 분석

객체지향 프로그래밍이란?

객체지향 프로그래밍(Object-Oriented Programming, OOP)은 현실 세계의 개념을 프로그램 안에 그대로 반영하여 프로그램을 더욱 직관적이고 관리하기 쉽게 만들어주는 프로그래밍 패러다임입니다. 자바는 대표적인 객체지향 프로그래밍 언어로, 클래스와 객체라는 두 가지 핵심 개념을 중심으로 프로그램을 구성합니다.

클래스: 객체의 설계도

  • 정의: 클래스는 객체를 생성하기 위한 틀이나 설계도와 같습니다. 즉, 어떤 종류의 객체를 만들 것인지에 대한 정보를 담고 있습니다.
  • 구성 요소:
    • 필드(Field): 객체의 속성(attribute)을 나타내는 변수입니다. 예를 들어, 사람이라는 객체의 경우 이름, 나이, 성별 등이 필드가 될 수 있습니다.
    • 메소드(Method): 객체가 수행할 수 있는 행위를 나타내는 함수입니다. 예를 들어, 사람이라는 객체의 경우 걷기, 말하기, 먹기 등이 메소드가 될 수 있습니다.
  • 예시:
class Person {
    String name;
    int age;

    void speak() {
        System.out.println("안녕하세요, 저는 " + name + "입니다.");
    }
}
 

객체: 클래스의 인스턴스

  • 정의: 객체는 클래스를 기반으로 생성된 실제적인 존재입니다. 클래스의 설계도를 이용하여 메모리에 할당된 실체입니다.
  • 생성: new 키워드를 사용하여 클래스의 생성자를 호출하면 객체가 생성됩니다.
  • 예시:
Person person1 = new Person();
person1.name = "홍길동";
person1.age = 20;
person1.speak();

클래스와 객체의 관계

  • 클래스는 객체를 생성하기 위한 틀이고, 객체는 클래스를 통해 만들어진 실제적인 존재입니다.
  • 클래스는 설계도이고, 객체는 그 설계도를 바탕으로 만들어진 건축물과 같습니다.
  • 클래스는 여러 개의 객체를 생성할 수 있는 템플릿입니다.

객체지향 프로그래밍의 핵심 개념

  • 캡슐화(Encapsulation): 데이터(필드)와 메소드를 하나의 단위로 묶어 보호하고, 외부에서의 직접적인 접근을 제한하는 것을 의미합니다.
    • 장점: 데이터의 무결성을 유지하고, 코드의 복잡성을 줄이며, 재사용성을 높입니다.
  • 상속(Inheritance): 기존 클래스의 특징을 그대로 물려받아 새로운 클래스를 정의하는 것을 의미합니다.
    • 장점: 코드의 재사용성을 높이고, 계층적인 클래스 구조를 만들 수 있습니다.
  • 다형성(Polymorphism): 같은 이름의 메소드가 클래스마다 다르게 동작할 수 있도록 하는 것을 의미합니다.
    • 장점: 유연한 프로그래밍이 가능하고, 코드의 확장성을 높입니다.

왜 객체지향 프로그래밍을 사용하는가?

  • 현실 세계 모델링: 현실 세계의 개념을 프로그램에 직관적으로 반영할 수 있습니다.
  • 코드 재사용성: 클래스를 상속하고 다형성을 활용하여 코드를 재사용할 수 있습니다.
  • 유지보수성: 코드의 구조가 명확하고, 모듈화되어 있어 유지보수가 용이합니다.
  • 협업: 여러 개발자가 함께 작업하기 쉽도록 코드를 모듈화할 수 있습니다.

결론

자바의 클래스와 객체는 객체지향 프로그래밍의 핵심 개념입니다. 클래스를 통해 객체를 생성하고, 객체의 속성과 행위를 정의하여 복잡한 프로그램을 효과적으로 구현할 수 있습니다. 객체지향 프로그래밍의 핵심 개념인 캡슐화, 상속, 다형성을 이해하고 활용하면 더욱 유연하고 확장성 있는 프로그램을 개발할 수 있습니다.

추가적으로 알아두면 좋은 것들

  • 생성자(Constructor): 객체가 생성될 때 자동으로 호출되는 메소드입니다.
  • 메소드 오버로딩(Method Overloading): 같은 이름의 메소드를 매개변수의 개수나 타입이 다르게 정의하는 것입니다.
  • 메소드 오버라이딩(Method Overriding): 부모 클래스의 메소드를 자식 클래스에서 재정의하는 것입니다.
  • 추상 클래스(Abstract Class): 추상 메소드를 포함하는 클래스로, 객체를 생성할 수 없습니다.
  • 인터페이스(Interface): 모든 메소드가 추상 메소드인 특수한 종류의 클래스입니다.
  • 접근 제한자(Access Modifier): 클래스, 필드, 메소드에 대한 접근 권한을 제어하는 키워드입니다. (public, private, protected)

 

728x90