자바 스터디

클래스

jedge11 2023. 10. 15. 22:16

클래스 정의하는 방법


  1. 기본 구조
    public class ClassName {
     // 필드 (멤버 변수)
     // 생성자
     // 메서드 (함수)
    }

<예시>

  • 클래스의 이름은 대문자로 시작
  • 필드는 대부분 private으로 선언하여 외부에서 직접 접근하는 것을 제한
  • 필드에 접근하거나 값을 변경하려면 gettersetter 메서드를 사용
  • 생성자는 객체를 초기화하는 데 사용되며, 클래스 이름과 동일한 이름을 가져야 함

객체 만드는 방법 (new 키워드 이해하기)


  1. 기본 내용
    • new 키워드는 자바에서 객체를 생성하는 데 사용
    • new를 사용하여 객체를 생성하면 메모리의 힙(heap) 영역에 인스턴스가 할당됨
    • 이때 생성된 객체의 주소를 참조하는 참조 변수가 필요
    • 이 참조 변수는 스택(stack) 영역에 저장

<예시>

  • new 키워드는 객체를 생성하고 해당 객체를 초기화하기 위해 생성자를 호출하는 데 사용
  • 생성된 객체의 주소는 참조 변수에 저장되며, 이 참조 변수를 통해 객체의 메서드나 필드에 접근할 수 있음
  1. 중요 내용
    • new는 동적으로 메모리를 할당합니다. 즉, 프로그램 실행 중에 메모리가 할당됨
    • new로 생성된 객체는 힙 영역에 저장되며, 가비지 컬렉터에 의해 자동으로 메모리가 관리
    • 객체에 더 이상 참조가 없으면 가비지 컬렉터에 의해 삭제

메소드 정의하는 방법


  1. 기본 구조
    [접근 제어자] [기타 수식어] 반환타입 메서드이름(매개변수목록) {
     // 메서드의 본문
     // ...
     return 반환값; // 반환타입이 void가 아닌 경우
    }
  • 접근 제어자 : public, protected, private, default(아무것도 지정 x)
  • 기타 수식어 : static, final, abstract
  • 반환 타입 : 기본 데이터 타입, 참조 데이터 타입, void(아무것도 반환 x, 제네릭 타입 등
  • 메서드 이름 : 메서드 호출 시 사용하는 이름 ex) 스택의 push 함수
  • 매개변수목록 : 메서드 호출 시 전달하는 값의 타입과 변수명 ex) 스택의 push(int value)
  • 메서드 본문 : 중괄호 {} 안에 작성되며, 실행될 코드

<예시>

  • 멤버 변수를 setter 함수를 통해서 초기화

하지만, 멤버 변수를 초기화 하는 또 다른 방법은 없을까..?

생성자 정의하는 방법


있다!! 함수 말고 생성자를 사용해서도 멤버 변수 초기화가 가능

<예시>

  • 생성자의 이름은 클래스의 이름과 동일
  • 생성자는 반환 타입을 가지지 않습니다. 즉, 반환값이 없는 메서드
  • 생성자는 new 키워드를 사용하여 객체를 생성할 때 자동으로 호출
  • 클래스 내부에 생성자를 정의하지 않으면 컴파일러는 기본 생성자를 제공

this 키워드 이해하기


  • 객체 변수와 로컬 변수의 충돌 해결

  • 생성자에서 다른 생성자 호출

    public class MyClass {
      private int value;
    
      public MyClass() {
          this(0); // 다른 생성자를 호출하여 초기화
      }
    
      public MyClass(int value) {
          this.value = value;
      }
    }
  • 함수에서 현재 객체를 반환

    public class MyClass {
      private int value;
    
      public MyClass setValue(int value) {
          this.value = value;
          return this; // 현재 객체를 반환하여 메서드 체이닝 가능
      }
    }