[Java]클래스와 인스턴스

Euiyeon Park·2024년 9월 1일
0

Java

목록 보기
6/16
post-thumbnail

🏫 클래스(Class)

클래스(Class)는 객체 지향 프로그램의 기본 단위로,
객체를 생성하기 위해 객체를 정의하는 템플릿이다.

필드(데이터)메소드(동작)을 포함하며, 이를 통해 객체의 상태와 행동을 정의한다.
즉, 클래스는 객체의 속성(필드)와 동작(메소드)를 묶어놓은 설계도와 같다.

🏫 클래스의 구성요소

✏️ 1. 필드(Field)

필드(Field)는 클래스 내에서 정의된 변수로, 객체의 상태를 나타낸다.
각 인스턴스(객체)마다 독립된 값을 가진다.

필드는 변수와 관련이 있지만 엄연히 다르다.

🪄 필드(Field)

  • 클래스나 객체의 속성을 나타내는 멤버 변수
  • 클래스 내에서 선언되며 객체의 상태를 저장
  • 생성자와 메소드 전체에서 사용되며, 객체가 소멸되지 않는 한 객체와 함께 존재

🪄 필드의 종류

  1. 인스턴스 필드
    클래스의 각 인스턴스(객체)에 속하며, 객체마다 개별적으로 존재
    인스턴스 멤버인 인스턴스 필드와 메소드는 객체에 소속된 멤버로,
    객체 없이는 사용할 수 없다.

  2. 클래스 필드(정적 필드)
    static으로 선언되며, 클래스에 속한다.
    모든 인스턴스가 공유하는 단일 필드
    정적 필드와 정적 메소드는 클래스에 고정된 멤버로,
    객체 생성 없이 사용할 수 있다.

🪄 변수(Variable)

  • 데이터를 저장하기 위한 이름이 있는 저장 공간
  • 특정 유형(타입)의 데이터를 저장하며, 값이 변경될 수 있다.

🪄 변수의 종류

  1. 로컬 변수(Local Variable)
    메소드나 생성자 내에서 언언
    메소드나 생성자가 실행되는 동안 유효, 블록을 벗어나면 소멸

  2. 매개변수(Parameter)
    메소드나 생성자에 전달되는 값을 담기위해 선언된 변수

  3. 필드(Field)
    클래스의 속성을 나타내는 멤버 변수
    인스턴스 필드와 클래스 필드가 있다.

🪄 필드와 변수의 차이점

  1. 선언 위치와 사용 범위
  • 필드 : 클래스 내에서 선언, 클래스 전체에서 사용
  • 변수 : 주로 메소드 내에서 선언, 해당 메소드 내에서만 사용
  1. 초기화 시점
  • 필드 : 객체가 생성될 때 자동으로 초기화
  • (로컬)변수 : 반드시 명시적으로 초기화해야 하고, 초기화하지 않고 사용하면 컴파일 에러
  1. 수명
  • 필드 : 객체가 메모리에서 해제될 때까지 존재
  • (로컬)변수 : 메소드나 블록의 실행이 끝나면 메모리에서 소멸

✏️ 2. 생성자(Constructor)

생성자(Constructor)는 클래스의 인스턴스를 초기화하는 특별한 메소드다.
객체가 생성될 때 호출되며, 객체 생성 시 초기화를 담당한다.
생성자는 클래스 이름과 동일해야 하며 반환 타입이 없다.

✏️ 3. 메소드(Method)

메소드(Method)는 클래스 내에서 정의된 함수로, 객체의 동작을 정의한다.
객체의 상태(필드)를 변경하거나 특정 작업을 수행하는데 사용된다.

  • 필드를 읽고 수정하는 역할과 다른 객체를 생성해서 다양한 기능을 수행
  • 객체 간의 데이터를 전달하는 수단
  • 외부로부터 매개값을 받아 실행에 이용하고, 실행 후 결과값을 외부로 리턴

🏫 인스턴스(Instance)

인스턴스(Instance)클래스를 기반으로 생성된 실제 객체를 의미한다.
클래스가 설계도라면, 인스턴스는 그 설계도를 바탕으로 만들어진 실제 건물이다.
인스턴스는 메모리에 존재하며 클래스에서 정의한 필드와 메소드를 사용해 동작한다.

  • 인스턴스는 생성되면 메모리에 할당되고, 인스턴스마다 독립된 메모리 공간을 가진다.
  • 인스턴스가 생성될 때 해당 인스턴스의 필드가 메모리에 할당되고 초기화된다.
  • 인스턴스는 new 키워드를 사용해 생성된다.
    • new 는 클래스의 생성자를 호출해 객체를 생성하고,
      그 객체의 메모리 주소를 반환한다.

🏫 객체 생성과 클래스 변수

클래스로부터 객체를 생성하려면 new 키워드(연산자)를 사용한다.
new 키워드 뒤에는 생성자가 오는데, 생성자는 클래스() 형태를 가진다.
생성된 객체는 메모리 Heap영역에 생성된다.

메모리 내에서 생성된 객체의 위치를 모르면 객체를 사용할 수 없다.
그래서 new 연산자는 Heap 영역에 객체를 생성시킨 뒤 객체의 메모리 주소를 리턴한다.

이 메모리 주소를 참조 타입인 클래스 변수에 저장변수를 통해 객체를 사용(참조)한다.

MyClass myClass = new MyClass();
profile
"개발자는 해결사이자 발견자이다✨" - Michael C. Feathers

0개의 댓글