Class (java와 python비교)

혜쿰·2023년 10월 12일
0
post-thumbnail

클래스는 프로그램 작성을 위해 꼭 필요한 요소는 아니다.
하지만 프로그램을 작성할 때 클래스를 적재적소에 사용하면 프로그래머가 얻을 수 있는 이익은 많다.

📗 클래스란?

클래스는 객체 지향 프로그래밍(OOP)에서 중요한 개념 중 하나로, 비슷한 특성과 행동을 가지는 객체들을 추상화하고 그 객체들을 생성하기 위한 청사진(blueprint)이나 템플릿으로 볼 수 있다. 클래스는 데이터(속성)와 메서드(동작)의 조합으로 이루어져 있으며, 속성은 객체의 상태를 나타내고, 메서드는 객체의 동작을 정의한다.

  1. 객체(Object):

    • 클래스의 인스턴스로, 클래스의 정의를 기반으로 생성된 실제 데이터 요소이다. 예를 들어, '자동차' 클래스의 객체는 실제 자동차를 나타낸다.
  2. 속성(Attributes):

    • 클래스의 속성은 객체의 상태나 특성을 나타내는 변수이다. 이러한 변수는 클래스 내부에 정의되며, 각 객체는 이러한 속성 값을 가질 수 있다. 예를 들어, '자동차' 클래스의 속성은 '색상', '속도', '모델' 등이 될 수 있다.
  3. 메서드(Methods):

    • 메서드는 클래스가 수행할 수 있는 동작이나 함수로, 클래스의 행동을 정의한다. 메서드는 객체가 속성을 조작하거나 다른 객체와 상호 작용하는 방법을 제공한다. 예를 들어, '자동차' 클래스의 메서드는 '가속', '제동', '시동' 등이 될 수 있다.
  4. 생성자(Constructor):

    • 생성자는 객체를 초기화하기 위한 특별한 메서드로, 클래스의 인스턴스를 생성할 때 호출된다. 주로 객체의 초기 속성 값을 설정하는 데 사용된다. 생성자 메서드의 이름은 언어에 따라 다를 수 있지만, 일반적으로 클래스의 이름과 동일한 메서드이다.
  5. 상속(Inheritance):

    • 상속은 기존 클래스를 기반으로 새로운 클래스를 정의하는 메커니즘이다. 이를 통해 코드의 재사용과 클래스 계층 구조를 구축할 수 있다. 파생 클래스는 부모 클래스의 속성과 메서드를 상속받아 사용하거나 수정할 수 있다.
  6. 다형성(Polymorphism):

    • 다형성은 여러 객체가 동일한 메서드 호출로 다양한 방식으로 응답할 수 있는 기능이다. 이는 메서드 오버라이딩(Overriding)과 인터페이스 구현을 통해 구현된다.
  7. 캡슐화(Encapsulation):

    • 캡슐화는 객체의 내부 상태를 외부로부터 숨기는 것을 의미한다. 이를 통해 객체의 데이터와 메서드에 대한 접근을 제어할 수 있으며, 데이터의 무결성을 보장할 수 있다.

클래스는 소프트웨어 개발에서 모듈화와 추상화를 촉진하며, 코드의 가독성을 향상시키고 유지보수를 용이하게 한다. 객체 지향 프로그래밍 패러다임을 따르는 언어들은 대부분 클래스와 객체를 지원하므로 클래스의 개념을 이해하는 것은 프로그래밍의 기본 요소 중 하나다.


📗 Java vs Python

자바와 파이썬은 둘 다 객체지향 프로그래밍 언어이며 클래스를 사용하여 객체를 정의하는 데 공통점이 있지만, 그들의 클래스 정의와 사용 방법에는 몇 가지 차이가 있다.

  1. 언어의 타입 시스템:

    • 자바: 자바는 정적 타입 언어다. 클래스의 변수와 메서드는 컴파일 시간에 타입이 결정됩니다. 변수의 타입은 선언 시에 명시해야 한다.
    • 파이썬: 파이썬은 동적 타입 언어다. 변수의 타입은 실행 시간에 자동으로 결정되며, 개발자가 타입을 명시적으로 선언할 필요가 없다.
  2. 메서드 정의:

    • 자바: 메서드 정의 시 반환 타입을 명시해야 한다. 또한 public, private, protected 등과 같은 접근 제어 지시어를 사용하여 메서드의 가시성을 제어한다.
    • 파이썬: 반환 타입을 명시적으로 지정하지 않는다. 메서드의 가시성을 제어하기 위해 특별한 접근 제어 지시어가 없으며, 보통 언더스코어(_)로 시작하는 이름을 사용하여 메서드를 비공개로 표시한다.
  3. 상속과 다중 상속:

    • 자바: 자바는 단일 상속만을 지원한다. 클래스는 하나의 클래스만 상속할 수 있다.
    • 파이썬: 파이썬은 다중 상속을 지원한다. 클래스는 여러 개의 클래스로부터 상속받을 수 있다.
  4. 인터페이스:

    • 자바: 인터페이스는 추상 메서드의 집합으로 구성되며, 클래스가 여러 인터페이스를 구현할 수 있다.
    • 파이썬: 파이썬은 인터페이스와 관련된 엄격한 규칙이 없지만, 추상 베이스 클래스(Abstract Base Class)를 사용하여 비슷한 기능을 구현할 수 있다.
  5. 생성자:

    • 자바: 클래스는 생성자(constructor)를 사용하여 객체를 초기화한다. 생성자는 클래스 이름과 동일한 메서드로 정의된다.
    • 파이썬: 파이썬에서는 __init__ 메서드를 사용하여 초기화 작업을 수행한다. 생성자의 이름은 특별한 이름인 __init__이며, 클래스 내에 정의된다.
  6. 명시적 상속:

    • 자바: 자바에서는 클래스가 반드시 어떤 클래스를 상속해야 한다. extends 키워드를 사용하여 부모 클래스를 명시적으로 지정한다.
    • 파이썬: 파이썬에서는 클래스가 명시적으로 어떤 클래스를 상속받아도 되며, 상속을 받지 않는 경우 object 클래스를 암묵적으로 상속받는다.

    이러한 차이로 인해 자바와 파이썬의 클래스 정의 및 사용법이 서로 다를 수 있으며, 개발자가 어떤 언어를 사용하느냐에 따라 적합한 클래스 설계 및 객체 지향 프로그래밍 방식을 선택할 수 있다.

🖍 Java

 public class Person {
    // 속성(멤버 변수)
    private String name;
    private int age;

    // 생성자
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 메서드
    public void sayHello() {
        System.out.println("안녕하세요, 제 이름은 " + name + "이고, 나이는 " + age + "세입니다.");
    }

    public static void main(String[] args) {
        // 클래스를 이용한 객체 생성
        Person person1 = new Person("Alice", 30);
        Person person2 = new Person("Bob", 25);

        // 객체의 메서드 호출
        person1.sayHello();
        person2.sayHello();
    }
}

🖍 Python

class Person:
    # 생성자
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 메서드
    def say_hello(self):
        print(f"안녕하세요, 제 이름은 {self.name}이고, 나이는 {self.age}세입니다.")

# 클래스를 이용한 객체 생성
person1 = Person("Alice", 30)
person2 = Person("Bob", 25)

# 객체의 메서드 호출
person1.say_hello()
person2.say_hello()

0개의 댓글