6월 3일 - 클래스와 인터페이스

Yullgiii·2024년 6월 3일
0
post-thumbnail

클래스와 인스턴스

클래스와 인스턴스는 객체 지향 프로그래밍의 기본적인 개념이다. 이 두 개념을 명확히 이해하면, 객체 지향 프로그래밍을 보다 쉽게 접근할 수 있다.

클래스

클래스는 어떤 문제를 해결하기 위한 데이터를 만들기 위해 추상화를 거쳐 집단에 속하는 속성과 행위를 변수와 메소드로 정의한 것이다. 클래스는 객체의 설계도 또는 틀이라고 할 수 있다. 클래스는 다음과 같은 요소로 구성된다:

  • 속성(필드): 클래스가 가지고 있는 데이터. 예를 들어, 사람 클래스의 경우 이름, 나이 등이 속성이 될 수 있다.
  • 행위(메소드): 클래스가 할 수 있는 동작. 예를 들어, 사람 클래스의 경우 걷기, 말하기 등이 행위가 될 수 있다.
public class Person {
    // 속성
    String name;
    int age;

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

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

인스턴스

인스턴스는 클래스에서 정의한 것을 토대로 실제 메모리 상에 할당된 것으로, 실제 프로그램에서 사용되는 데이터를 말한다. 인스턴스를 생성한다는 것은 클래스를 기반으로 객체를 만든다는 의미이다.

인스턴스는 독립된 메모리 공간에 저장된 자신만의 필드를 가질 수 있다. 하지만 해당 클래스의 모든 메소드는 해당 클래스로부터 생성된 모든 인스턴스가 하나의 메소드를 공유하게 되는 특징을 갖고 있다.

public class Main {
    public static void main(String[] args) {
        // 인스턴스 생성
        Person person1 = new Person("홍길동", 25);
        Person person2 = new Person("이순신", 30);

        // 메소드 호출
        person1.introduce();
        person2.introduce();
    }
}

위의 예제에서 Person 클래스는 사람의 속성과 행위를 정의한 클래스이다. Main 클래스에서는 Person 클래스를 기반으로 두 개의 인스턴스를 생성하였다. 각각의 인스턴스는 독립된 메모리 공간을 가지며, 자신의 필드 값을 가지고 있다. 하지만 introduce 메소드는 모든 인스턴스가 공유하게 된다.

추가 개념

클래스 변수와 인스턴스 변수

  • 클래스 변수: 클래스에 하나만 존재하며, 모든 인스턴스가 공유한다. 클래스 변수는 static 키워드를 사용하여 선언한다.
  • 인스턴스 변수: 각각의 인스턴스마다 독립적으로 존재하는 변수이다. 클래스에 선언된 일반적인 변수가 인스턴스 변수이다.
public class Counter {
    // 클래스 변수
    public static int count = 0;

    // 인스턴스 변수
    public int instanceCount = 0;

    public Counter() {
        count++;
        instanceCount++;
    }

    public static void displayCount() {
        System.out.println("총 객체 수: " + count);
    }

    public void displayInstanceCount() {
        System.out.println("인스턴스 개별 수: " + instanceCount);
    }
}

public class Main {
    public static void main(String[] args) {
        Counter counter1 = new Counter();
        Counter counter2 = new Counter();

        Counter.displayCount(); // 총 객체 수: 2
        counter1.displayInstanceCount(); // 인스턴스 개별 수: 1
        counter2.displayInstanceCount(); // 인스턴스 개별 수: 1
    }
}

위 예제에서 count는 클래스 변수로, 모든 인스턴스가 공유한다. instanceCount는 인스턴스 변수로, 각 인스턴스마다 독립적으로 존재한다.

So...

클래스는 객체의 설계도로, 속성과 행위를 정의한다. 인스턴스는 클래스에서 정의한 내용을 토대로 실제 메모리 상에 할당된 객체이다. 인스턴스는 각자 독립된 메모리 공간을 가지지만, 클래스의 메소드는 공유된다. 클래스와 인스턴스의 개념을 명확히 이해하고 활용하면 객체 지향 프로그래밍을 보다 효과적으로 사용할 수 있다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글