본문 바로가기
Backend/Java

Java 기초 문법 : 필드(field)와 메서드(method)

by 코딩쥐 2024. 5. 21.

필드(field)

Java에서 필드는 클래스에 포함된 변수를 의미한다. 변수는 크게 클래스 변수(class variable), 인스턴스 변수(instance variable), 지역 변수(local variable)로 구분된다. 필드에 포함된 변수는 클래스 변수와 인스턴스 변수로 나뉘며, 이 두 가지는 static 키워드를 통해 구분할 수 있다.

변수의 종류 선언위치    
클래스 변수 클래스 영역 멤버변수 중 static이 붙은 변수  객체 생성 X
인스턴스 변수 멤버변수 중 static이 붙지 않은 변수 객체 생성 O
지역 변수 클래스 영역 이외의 영역 멤버변수를 제외한 나머지 변수  

* 멤버변수 = 클래스영역에 선언되어 있는 변수

* 클래스영역에서는 변수 선언 및 메서드 선언만 가능

package com.example1;

public class TV {
    // 필드(field)

    // 클래스 변수 : 모든 인스턴스가 하나의 저장공간을 공유
    static String size = "50인치"; // 모든 TV 인스턴스가 동일하게 50인치 사이즈일 때 사용
    
    // 인스턴스 변수 : 인스턴스가 생성될 때마다 각기 다른 값 생성 가능
    String color;

	// 생성자 함수
    TV(String color){
        this.color = color;
    }
}

 

변수 초기화

  • 클래스변수(cv) : 클래스가 처음 로딩될 때 한 번 초기화 된다. 
  • 인스턴스변수(iv) :인스턴스가 생성될 때 마다 초기화 된다.
  • 지역변수(lv): 사용 전에 수동 초기화를 해야한다. 
분류   설명
자동초기화     각 타입의 기본값으로 자동으로 초기화 됨
간단초기화 명시적 초기화 = 변수의 선언과 동시에 초기화 함 
복잡초기화   생성자 블럭 안에 조건문, 반복문, 예외처리구문 등을 자유롭게 사용할 수 있음. 초기화 작업이 복잡하여 명시적 초기화만으로 부족한 경우 초기화 블럭 사용함
인스턴스 초기화 블럭 {}
클래스 초기화 블럭 static{}

 

각 타입의 기본값

자료형 기본값
boolean false
char '\u0000'
byte,short,int 0
long 0L
float 0.0f
double 0.0d 또는 0.0
참조형 null
class Test{
	static int[] arr = new int[10]; //명시적 초기화, 클래스변수

	// 명시적 초기화만으로 부족하여, 클래스 초기화 블럭(static{}) 사용함
	// 배열 arr을 난수로 채우는 초기화
	static {
		for(int i=0; i<arr.length; i++) {
		arr[i] = (int)(Math.random()*10)+1;
		}
}

	class Test2{
	
		static int cv = 1; //명시적 초기화
		int iv = 1; // 명시적 초기화
		static { cv = 2 ;} // 클래스 초기화 블럭(static{})
		{ iv = 2; } // 인스턴스 초기화 블럭({})
		Test2(){ //생성자 초기화
		iv =3;
	}
	}	
}

메서드(Method)

특정 작업을 수행하는 일련의 문장들을 하나로 묶은 것으로 값을 받아서 처리하고 결과를 반환한다.

 

메서드 구성요소

메서드는 선언부(header)구현부(body)로 나눈다. 반환 값이 없을 경우 반환 타입에 void로 작성하여 구현부에서 return문을 생략할 수 있다.  

  • 반환타입 메서드이름(매개변수)
    {
    메서드 호출 시 수행될 코드 
    return 반환값;
    }

 

메서드 선언부(method declaration)

메서드의 이름은 이름만으로도 메서드의 기능을 쉽게 알 수 있도록 함축적이고 의미있는 이름을 사용해야 한다. 매개변수의 경우 메서드가 작업을 수행하는데 필요한 값들을 제공받기 위해서 사용한다. 매개변수를 작성하는 방법은 '변수타입 변수명'으로 작성하면 된다. 

 

매서드의 구현부(method body)

메서드가 수행할 실제 코드 블록으로, 중괄호 {} 내에 작성된다. 선언한 메서드 내에서만 사용할 수 있는 지역변수(local variables)를 선언할 수 있다.

 

메서드 종류

static 메서드

객체 생성 없이 '클래스이름.메서드이름()'으로 호출이 가능하다. 인스턴스 멤버와 관련 없는 작업을 하며, 메서드 내에서 인스턴스 변수를 사용할 수 없다. 

package com.example1;

public class Example2 {
    // static 메서드
    public static int add(int a, int b){
        return a+b;
    }

    public static void main(String[] args) {
        // static 메서드는 인스턴스 생성 없이 바로 사용이 가능하다.
        int sum = add(2,3);
        System.out.println(sum);// 5
    }
}

 

인스턴스 메서드

인스턴스를 생성하고 '참조변수.메서드이름()'으로 호출이 가능하다. 인스턴스 멤버와 관련된 작업을 하며, 메서드 내에서 인스턴스 변수를 사용할 수 있다. 

package com.example1;

public class Example2 {
    private int value;
    
	// 생성자 함수 
    public Example2(int value) {
        this.value = value;
    }

    // 인스턴스 메서드
    public int add(int number) {
        // 인스턴스와 관련된 작업을 수행함
        return value + number;
    }

    public static void main(String[] args) {
        Example2 example = new Example2(10); // 인스턴스 생성
        int result = example.add(5); // 인스턴스 메서드 호출
        System.out.println("결과값 : " + result); // 결과값 : 15
    }
}

 

메서드 호출

  • 메서드이름(); 
    만약 매개변수가 있을 경우에는 메서드이름(값1, 값2, ... ); 로 작성해야 한다. 각 인자의 경우에는 선언된 매개변수 타입과 일치해야 한다.

 

Rest parameter 사용

Java에서는 가변 개수의 인자를 매개변수로 받을 때 ...를 사용하여 Rest parameter를 선언할 수 있다. 이를 통해 메서드가 전달받는 인자의 개수에 구애받지 않고 유연하게 값을 받을 수 있다. 가변인자는 매개변수 중에서 제일 마지막에 선언해야 한다. 

package com.example1;

public class Example2 {
    public void method1(int a1, String ... str){
        // rest parameter의 경우 배열 형태로 들어오기 때문에 for문을 사용해야 한다.
        for (String s : str) {
            System.out.println("str의 값 : " + s);
        }
        System.out.println("a1의 값 : " + a1);
    }
    public static void main(String[] args) {
        Example2 example = new Example2();
        example.method1(5, "코딩쥐", "티스토리", "반갑습니다.");
    }
}


클래스와 객체, 변수와 메서드 요약

(최대한 이해한 것을 토대로 요약해 보았다.)