develop/Java

[Java] 클래스/객체/메서드

devdw 2021. 8. 21. 16:30

객체지향언어의 특징

  • 코드의 재사용성이 높음
    • 새 코드 작성 시 기존 코드를 이용하여 쉽게 작성할 수 있음
  • 코드의 관리가 용이함
    • 코드간 관계를 이용하여 적은 노력으로 쉽게 코드 변경이 가능
  • 신뢰성 높은 프로그래밍 가능
    • 제어자와 메서드를 이용하여 데이터를 보호하고 올바른 값을 유지하도록함
    • 코드의 중복을 제거하여 코드 불일치로 인한 오동작을 방지함

클래스와 객체

클래스

객체를 정의하여 객체 생성 시 사용 → 틀

객체

정의한 클래스로 만든 속성과 기능의 집합 → 실체

  • 속성 : 멤버 변수 (상태, 값)
  • 기능 : 메서드 (동작)

인스턴스

클래스로부터 만들어진 객체

변수

  • 클래스 변수
    : 멤버변수 중 static이 붙은 변수
    • 클래스 영역에 선언
    • 클래스가 메모리에 올라갈 때 생성
    • 모든 인스턴스가 공통된 값을 유지해야하는 속성인 경우 사용
    • 인스턴스를 생성하지 않고도 사용 가능
    • 초기화 블럭
      : 클래스변수의 복잡한 초기화에 사용
      class Example {
        static { } // 초기화블럭
      }
  • 인스턴스 변수
    : 멤버변수 중 static이 붙지 않은 변수
    • 클래스 영역에 선언
    • 인스턴스 생성될 때 생성
    • 인스턴스마다 고유한 상태를 유지해야하는 속성인 경우 사용
    • 초기화 블럭
      : 인스턴스 변수의 복잡한 초기화에 사용
      ```java
      class Example {
      { } // 초기화블럭
      }
  • 지역변수
    : 멤버변수를 제외한 나머지 변수들
    • 클래스 영역 이외의 영역에 선언 (메서드, 생성자, 초기화 블럭 내부)
    • 변수 선언문이 수행되었을 때 생성
    • 사용하기 전 반드시 초기화를 해주어야 함
class Test {
  int iv; // 인스턴스 변수
  static int cv; // 클래스 변수(static 변수, 공유 변수)

  void method() {
    int lv = 0; // 지역 변수
  }
}

생성자

인스턴스 초기화 메서드

  • 클래스 내에 선언됨
  • 리턴 값이 없음
  • 하나의 클래스에 여러 개의 생성자가 존재할 수 있음
  • 생성자 이름은 클래스의 이름과 같아야 함
  • 클래스에는 반드시 하나 이상의 생성자가 정의되어있어야 함
기본 생성자 (default constructor)
  • 매개변수가 없는 생성자
  • 클래스 정의 시 생성자를 만들지 않으면 자동으로 추가해 컴파일함
    class Card {
    Card() { //default constructor
    }
    }
    매개변수가 있는 생성자
  • 생성자 호출 시 값을 넘겨받아 인스턴스를 초기화할 수 있는 생성자
    class Card {
    int v1;
    Card(int v1) {
      v1 = v1;
    }
    }
    생성자에서 다른 생성자 호출하기
  • 생성자 이름 대신 this로 호출해야함
  • 반드시 생성자의 첫 줄에서만 호출 가능

메서드

특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것

특징

  • 높은 재사용성
    : 한 번 만들어 놓은 함수는 여러 번 사용 가능
  • 중복된 코드 제거
  • 프로그램 구조화메서드 종류
  • 클래스 메서드 (static method)
    • 인스턴스 생성하지 않고 사용 가능
    • 인스턴스와 관계없는 (인스턴스 변수를 사용하지 않는) 메서드
  • 인스턴스 메서드
    • 인스턴스 생성 후 사용 가능
    • 인스턴스 변수와 관련된 작업하는 메서드 (인스턴스 변수를 사용)