언어/java

[Java] - 클래스

니푸 2023. 10. 2. 04:20

클래스와 객체

class Animal {
} // 보통 자바에서는 따로 파일을 만들지만 가독성상 한 파일에 쓰겠음

public class Sample {
    public static void main(String[] args) {
        Animal cat = new Animal();
    }
}
  • Animal class 는 가장 간단한 클래스 형태
  • 껍데기 뿐일지라도 객체를 만드는 기능!
  • 객체는 다음과 같이 만든다.
class Animal {
}

public class Sample {
    public static void main(String[] args) {
        Animal cat = new Animal(); // 여기!
    }
}
  • new는 객체를 생성할 때 사용하는 키워드
  • cat 은 Animal 클래스의 인스턴스 이면서 하나의 객체!
  • 객체와 인스턴스의 차이는 무엇일까?

클래스에 의해서 만들어진 객체를 인스턴스라고도 한다. 그렇다면 객체와 인스턴스의 차이는 무엇일까? Animal cat = new Animal() 이렇게 만들어진 cat은 객체이다. 그리고 cat이라는 객체는 Animal의 인스턴스이다. 인스턴스라는 말은 특정 객체(여기서는 cat)가 어떤 클래스(여기서는 Animal)의 객체인지를 관계 위주로 설명할 때 사용된다. 즉, ‘cat은 인스턴스’보다는 ‘cat은 객체’라는 표현이, ‘cat은 Animal의 객체’보다는 ‘cat은 Animal의 인스턴스’라는 표현이 훨씬 잘 어울린다.

  • 비유하자면 클래스는 과자모양틀, 객체는 그렇게 찍어낸 과자!
  • 다음과 같이 무수히 많은 Animal 클래스를 만들 수 있다.
Animal cat = new Animal();
Animal dog = new Animal();
Animal horse = new Animal();
...

여기서 설명한 내용이 이해되었다면 클래스는 70% 이상 알았다 할 수 있다. 클래스는 결코 어렵지 않다.

객체 변수란?

  • 앞서 나온 Animal 클래스를 좀 더 발전시켜보자.
class Animal {
    String name;
}

public class Sample {
    public static void main(String[] args) {
        Animal cat = new Animal();
    }
}
  • Animal 클래스에 name 이라는 String 변수를 추가했다. 이렇게 클래스 내에 생성된 변수를 객체 변수(instance variable) 라고 한다.
  • 즉, 클래스에 의해 생성되는 것은 **객체**, 클래스 내에 선언된 변수는 **객체 변수**
  • 이러한 객체 변수는 변수, 멤버 변수, 속성 이라고도 부른다.
  • 이제 객체 변수를 사용해 보자. 객체 변수는 객체.객체변수 형식으로 접근할 수 있다.
  • class Animal { String name; } public class Sample { public static void main(String[] args) { Animal cat = new Animal(); System.out.println(cat.name); // 객체 변수 프린트 } } // null
  • 출력 결과 null 이 나온다. 이는 값이 할당되지 않은 상태를 뜻한다. 객체변수로 name 을 선언했지만 아무런 값도 대입하지 않았기 때문이다.

메서드란?

  • 앞서 객체 변수에 접근하는 방법을 배웠고 이제는 객체 변수에 값을 대입하는 방법에 대해 알아보자.
  • 방법은 여러가지가 있지만 여기서는 메서드를 이용하는 방법에 대해 알아본다.
  • 클래스에 선언된 변수는 객체 변수 이고, 클래스 내에 구현된 함수는 메서드이다.
class Animal {
    String name;
		
		// 메서드!
    public void setName(String name) {
        this.name = name;
    }
}

public class Sample {
    public static void main(String[] args) {
        Animal cat = new Animal();
        System.out.println(cat.name);
    }
}
  • 메서드를 호출하는 방법 역시 객체.메서드 이다.
class Animal {
    String name;

    public void setName(String name) {
        this.name = name;
    }
}

public class Sample {
    public static void main(String[] args) {
        Animal cat = new Animal();
        cat.setName("boby");  // 메서드 호출
        System.out.println(cat.name);
    }
}
  • 근데 저 this 는 무엇일까?
  • 위 코드에서 this.name = name 은 cat.name = "body" 와도 같은 뜻이다.

객체 변수는 공유되지 않는다.

class Animal {
    String name;

    public void setName(String name) {
        this.name = name;
    }
}

public class Sample {
    public static void main(String[] args) {
        Animal cat = new Animal();
        cat.setName("boby");  // 메서드 호출

        Animal dog = new Animal();
        dog.setName("happy");

        System.out.println(cat.name);
        System.out.println(dog.name);
    }
}
  • 위 코드를 출력하면 다음과 같다.
boby
happy
  • 즉, 객체 변수는 각 객체마다 독립적임을 알 수 있다.

참고: https://wikidocs.net/214