Java - 클래스#1

이새봄·2022년 9월 3일

Java

목록 보기
1/11

이 글은 이것이 자바다를 참고하여 작성되었습니다.

객체(Object)

: 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고 다른 것과 식별 가능한 것

  • 속성과 동작으로 구성
  • 속성 : 필드(field)
  • 동작 : 메소드(method)

Class

: 자바에서 객체를 만들기 위한 설계도

  • 인스턴스(instance) : 클래스로부터 만들어진 객체
  • 클래스로부터 객체를 생성하는 방법 : new 연산자 사용
    new 클래스();
    클래스() : 생성자
  • new 연산자는 힙 영역에 객체를 생성시킨 후 객체의 주소를 리턴하도록 되어 있다. 이 주소를 참조 타입인 클래스 변수에 저장해 두면, 변수를 통해 객체를 사용할 수 있다.
    클래스 변수 = new 클래스();
  • 클래스는 하나의 실행 클래스와 다수의 라이브러리 클래스로 이루어진다.
    • 라이브러리 클래스는 다른 클래스에서 이용할 목적으로 설계된다.
    • 실행 클래스는 프로그램의 실행 진입점인 main() 메소드를 제공하는 역할을 한다.

클래스의 구성 멤버

필드(Field)

: 객체의 데이터가 저장되는 곳

  • 변수 vs 필드
    • 변수는 생성자와 메소드 내에서만 사용되고 생성자와 메소드가 실행 종료되면 자동 소멸
    • 필드는 생성자와 메소드 전체에서 사용되며 객체가 소멸되지 않는 한 객체와 함께 존재
  • 클래스 내부에서 사용할 경우 : 필드 이름으로 읽고 변경
  • 클래스 외부에서 사용할 경우 : 클래스로부터 객체를 생성한 뒤 필드 사용
  • 필드와 매개변수의 이름이 같을 때 매개변수의 사용 우선순위가 높기때문에 필드 앞에 "this."를 붙인다.

생성자(Constructor)

: 객체 생성 시 초기화 역할 담당

클래스(객체변수선언, ...) {
    // 객체의 초기화 코드
}
  • 클래스 이름으로 되어 있고 리턴 타입이 없다.
  • 생성자를 실행시키지 않고는 클래스로부터 객체를 만들 수 없다.
  • 클래스에 명시적으로 선언한 생성자가 한 개라도 있으면 컴파일러는 기본 생성자를 추가하지 않는다.
  • 다른 생성자 호출(this())
    : 생성자 오버로딩이 많아질 경우 생성자 간의 중복된 코드가 발생할 수 있다. 이때 필드 초기화 내용을 한 생성자에만 집중적으로 작성하고 나머지 생성자는 초기화 내용을 가지고 있는 생성자를 호출하는 방법으로 개선할 수 있다.
    클래스([매개변수선언,...]) {
        this(매개변수,...,값,...); // 클래스의 다른 생성자 호출
        실행문;
    }
    this()는 반드시 생성자의 첫줄에서만 허용된다.

메소드(Method)

: 객체의 동작에 해당하는 실행 블록. 선언부와 실행 블록으로 구성된다.

리턴타입 메소드이름 ([매개변수선언,...]) {
    실행할 코드를 작성하는 곳
              :
}
  • 선언부 - 메소드 시그너처(signature)
    • 리턴 타입 : 메소드가 리턴하는 결과 타입 표시
    • 메소드 이름
    • 매개변수선언 : 메소드가 실행할 때 필요한 데이터를 받기 위한 변수
  • {} : 메소드 실행 블록

리턴 타입

  • 리턴값이 없는 메소드 : 리턴 타입 - void
    • return문을 사용하면 메서드 실행을 강제 종료시킨다.
      만약 while문을 사용할 때 뒤에 실행문이 추가적으로 더 있을 경우, return문을 이용하면 즉시 메소드가 종료되기때문에 반드시 break문을 사용해야 한다.
  • 리턴값이 있는 메소드 : 리턴 타입 - 리턴값의 타입
    • 매개변수의 수를 모를 경우 : 매개변수를 배열 타입으로 선언
      int sum1(int[] values) {}
      이 경우 메소드를 호출하기 전에 배열을 생성해야 하는 불편한 점이 있다. 그래서 배열을 생성하지 않고 값의 리스트만 넘겨주는 방법도 있다.
      int sum2(int ... values){}
      호출 시 리스트로 나열해주면 된다.
      int result = sum2(1, 2, 3);
    • 리턴 타입이 있는 메소드는 반드시 리턴(return)문을 사용해서 리턴값을 지정해야 한다. return문이 실행되면 메소드는 즉시 종료된다.

메소드 호출

  • 클래스 내부의 다른 메소드에서 호출할 경우 : 메소드 이름으로 호출
  • 클래스 외부에서 호출할 경우
    : 클래스로부터 객체를 생성한 뒤 참조 변수를 이용해서 메소드 호출
    클래스 참조변수 = new 클래스(매개값,...);
    객체가 생성되었다면 참조 변수와 함께 도트(.) 연산자를 사용해서 호출
    참조변수.메소드(매개값,...); // 리턴값이 없거나, 있어도 리턴값을 받지 않을 경우
    타입 변수 = 참조변수.메소드(매개값,...); // 리턴값이 있고, 리턴값을 받고 싶을 경우

인스턴스 멤버와 this

  • 인스턴스 멤버 : 객체(인스턴스)를 생성한 후 사용할 수 있는 필드와 메소드. 각각 인스턴스 필드, 인스턴스 메소드라고 부른다.

0개의 댓글