필드(field)와 메서드(method)

김수민·2023년 3월 9일
0

백엔드 부트캠프

목록 보기
10/52

필드

필드(Field) 

필드: '클래스에 포함된 변수'를 의미하는 것으로 객체의 속성을 정의할 때 사용됨
클래스 변수(cv, class variable), 인스턴스 변수(iv, instance variable), 지역 변수(lv, local variable) 세가지로 구분됨
필드라고 부르는 것은 클래스 변수와 인스턴스 변수. 이 둘은 다시 static 키워드의 유무로 구분됨.
static 키워드가 함께 선언된 것은 클래스 변수, 그렇지 않은 것은 인스턴스 변수
지역 변수: 이 두가지 변수 유형에 포함되지 않고 메서드 내에 포함된 모든 변수

class Example { // => 클래스 영역
	int instanceVariable; // 인스턴스 변수
    static int classVariable; // 클래스 변수(static 변수, 공유변수)
    
    void method() { // => 메서드 영역
    	int localVariable = 0; // 지역 변수, {}블록 안에서만 유효
    }
}
  • 인스턴스 변수(iv)
    - 인스턴스가 가지는 가각의 고유한 속성을 저장하기 위한 변수로, new 생성자()를 통해 인스턴스가 생성될 때 만들어짐

  • 클래스 변수(cv)
    - static 키워드를 통해 선언
    - 공통된 저장 공간을 공유
    - 한 클래스로부터 생성되는 모든 인스턴스들이 특정한 값을 공유해야하는 경우에 주로 static 키워드를 사용해서 클래스 변수를 선언
    - 인스턴스 변수와 달리 인스턴스를 따로 생성하지 않고도 언제라도 클래스명.클래스변수명을 통해 사용 가능 (클래스 영역에 저장되어 그 값을 공유하기 때문)

  • 지역변수(lv)
    - 메서드 내에 선언되며 메서드 내({} 블록)에서만 사용가능한 변수
    - 멤버 변수와는 다르게 스택 메모리에 저장되어 메서드가 종료되는 것과 동시에 함께 소멸되어 더이상 사용할 수 없음
    - 직접 초기화하지 않으면 값을 출력할 대 오류가 발생

  • 필드변수(인스턴스 변수 & 클래스 변수)
    - 직접적으로 초기화를 실행하지 않더라도 강제로 초기화가 이루어짐

static 키워드

static : 클래스 멤버(필드, 메서드, 이너 클래스)에 사용하는 키워드
static 키워드가 붙어있는 멤버는 '정적 멤버(static member)'라고 부름
static이 붙어있지 않은 인스턴스 변수와 구분

인스턴스 멤버는 반드시 객체를 생성한 이후에 변수와 메서드에 접근하여 해당 멤버를 사용가능한 반면, static 키워드로 정의되어 있는 클래스 멤버들은 인스턴스의 생성 없이도 클래스명.멤버명만으로도 사용이 가능함. (클래스 내부에 저장 공간을 가지고 있기 때문에 객체 생성없이 곧바로 사용)

  • 정적 필드는 객체 간 공유 변수의 성질이 있음. 일반적인 메서드 앞에 static 키워드를 사용하면 해당 메서드는 정적 메서드가 됨. 정적 메서드도 정적 필드와 마찬가지로 클래스명만으로 바로 접근이 가능함.
  • 정적 메서드의 경우 인스턴스 변수 또는 인스턴스 메서드를 사요할 수 없음. 정적 메서드는 인스턴스 생성 없이 호출이 가능하기 때문에 정적 메서드가 호출되었을 때 인스턴스가 존재하지 않을 수 있기 때문.

메서드

메서드(Method)

메서드: 특정 작업을 수행하는 일련의 명령문들의 집합
머리에 해당하는 메서드 시그니처(method signature) 와 몸통에 해당하는 메서드 바디(method body로 구분됨

자바제어자 반환타입 메서드명(매개 변수) { //메서드 시그니처
	메서드 내용 // 메서드 바디
}
  • 메서드 시그니처: 해당 메서드가 어떤 타입을 반환하는가(반환 타입), 메서드 이름이 무엇(메서드명)이며 해당 작업을 수행하기 위해서 어떤 재료들이 필요한지(매개 변수)에 대한 정보를 포함
  • 메서드 바디: 괄호({})안에 해당 메서드가 호출되었을 때 수행되어야하는 일련의 작업들을 표시함. 메서드명은 관례적으로 소문자로 표시.
  • 메서드의 반환 타입이 void가 아닌 경우에는 메서드 바디({})안에 반드시 return문이 존재해야 함 리턴문은 작업을 수행한 결과값을 호출한 메서드로 전달함. 결과값은 반드시 반환타입과 일치하거나 적어도 자동 형변환이 가능한 것이어야 함.

메서드의 호출

  • 메서드도 클래스의 멤버이므로 클래스 외부에서 메서드를 사용하기 위해서는 먼저 인스턴스를 생성해야함.
  • 포인트 연산자(.)를 통해 메서드를 호출.
  • 클래스 내부에 있는 메서드끼리는 따로 객체를 생성하지 않고도 서로를 호출할 수 있음.

메서드 오버로딩

메서드 오버로딩 (method overloading)

  • 메서드 오버로딩: 하나의 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것
  • 무조건 같은 메서드명을 사용한다고 해서 오버로딩이 되는 것은 아님
  • 오버로딩이 성립하기 위한 조건
    1. 같은 이름의 메서드명을 써줘야함
    1. 매개변수의 개수나 타입이 다르게 정의되어야 함
  • 하나라도 충족되지 않으면 중복 정의로 간주되어 컴파일 에러 발생
  • 반환 타입은 오버로딩이 성립하는데 영향을 주지 못함
  • 장점: 하나의 메서드로 여러 경우의 수를 해결할 수 있음

0개의 댓글