본문 바로가기
IT/JAVA

JAVA - 필드(Field)와 메서드(Method)

by 삐약 개발자 2024. 11. 26.
반응형

필드란?

필드는 클래스에 포함된 변수를 의미함.

객체의 속성을 정의할때 사용함.

 

자바에서의 변수는 크게 세가지로 구분됨

- 클래스 변수

- 인스턴스 변수

- 지역변수 

 

보통 필드라고 부르는 것은 클래스변수와 인스턴지 변수이며 

이 둘은 다시 static 키원드의 유무로 구분할수 있음.

 

좀더 구체적으로 static 키워드가 함께 선언된 것은 클래스 변수 그렇지 않은것은 인스턴스 변수라고 함

class Example { // => 클래스 영역
	int instanceVariable; // 인스턴스 변수
	static int classVariable; // 클래스 변수(static 변수, 공유변수)

	void method() { // => 메서드 영역
		int localVariable = 0; // 지역 변수. {}블록 안에서만 유효
	}
}

 

static 키워드 - 다시 공부하기(실습도 해보기)

정적 메서드 → 어딘가에 고정되어 있다

클래스 변수는 static 에 붙어 있기에 클래스에 고정값

static 이 붙으면 new 를 통해서 만들지 않아도 사용 가능?

static 이 붙으면 메서드든 필드든 객체를 만들지 않아도 클래스에서 접근 가능

static 이 붙은건 예외임

 

public class StaticExampleV1 {
    // Static, 정적, 모든 객체와 메모리를 공유

    public String instanceVariable = "저는 인스턴스 변수입니다.";
    public static String classVariable = "저는 클래스 변수입니다.";

    public static void classMethod() {
        System.out.println(instanceVariable); --> 오류남 왜?
        System.out.println(classVariable);
    }

    public void instanceMethod() {
        System.out.println(instanceVariable);
        System.out.println(classVariable);
    }
}

오류가 나는 이유는?

 

 

중요한점

적 필드는 객체 간 공유 변수의 성질이 있다는 점

정적 메서드의 경우 인스턴스 변수 또는 인스턴스 메서드를 사용할 수 없다는 것

 

메서드(Method)

특정 작업을 수행하는 일련의 명령문들의 집합을 의미함.

void 가 없다면 return 필요!!!!!

void printHello() { // 반환타입이 void인 메서드
	System.out.println("hello!");
}
int getNumSeven() { // 매개변수가 없는 메서드
	return 7;
}

 

메서드의 호출

 

메서드이름(매개변수1, 매개변수2, ...); // 메서드 호출방법. 매개 변수가 없을 수도 있음.

printHello(); // 위의 코드 예제 호출
getNumSeven();
multiply(4, 4.0);

//출력값
hello!
7
16.0

메서드 호출 시 괄호() 안에 넣어주는 입력 값을 우리는 ‘인자(argument)’라고 하는데, 인자의 개수와 순서는 반드시 메서드를 정의할 때 선언된 매개변수와 일치되어야함

 

 

메서드 오버로딩

메서드 오버로딩이란 하나의 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것

(하나의 메서드가 보통은 한개의 기능만 정의?)

메서드 오버로딩. 같은 이름의 메서드를 다양하게 정의 가능.

public class Overloading {
    public static void main(String[] args) {
        Shape s = new Shape(); // 객체 생성

        s.area(); // 메서드 호출
        s.area(5);
        s.area(10,10);
        s.area(6.0, 12.0);
    }
}

class Shape {
    public void area() { // 메서드 오버로딩. 같은 이름의 메서드 4개.
        System.out.println("넓이");
    }
    public void area(int r) {
        System.out.println("원 넓이 = " + 3.14 * r * r);
    }

    public void area(int w, int l) {
        System.out.println("직사각형 넓이 = " + w * l);
    }

    public void area(double b, double h) {
        System.out.println("삼각형 넓이 = " + 0.5 * b * h);
    }
}

//출력값
넓이
원 넓이 = 78.5
직사각형 넓이 = 100
삼각형 넓이 = 36.0

모든 메서드들이 area()라는 메서드면니 같음에도 불구하고 각기 다른 출력값을 리턴하는것을 확인가능.

무조건 같은 메서드명을 사용한다고 해서 오버로딩이 되는것은 아니라는 것!!

 

오버로딩이 성립하기 위해서는 두가지의 조건이 성립되어햐 함

같은 이름의 메서드명을 써줘야 하며 매게변수의 개수나 타입이 다르게 정의되어야 한다.

   - 이 조건이 하나라도 충족이 되지 않는다면 중복 정의로 간주되어 컴파일 에러가 발생

 

오버로딩의 장점은?

하나의 메서드로 여러 경우의 수를 해결할수 있다는 점.

 

return 타입 신경쓰지 않음

//예시 위에껄로 만들어보기

 

각각의 타입별로 오버로딩 만들어보기 (수업시간 실)

public class test {
    public static void main(String[] args) {
        //객체 생성
        SumType s = new SumType();

        //메서드 호출
        s.sum(1,2);
        s.sum(1,2,3,4);

        int [] arr = {1,2,3,4,5};
        s.sum(arr);

        //출력
        System.out.println(s.sum(1,2));
        System.out.println(s.sum(1,2,3,4));
        System.out.println(s.sum(arr));
    }
}

class SumType {
   public int sum(int num1, int num2){
       return num1 + num2;
   }
   public int sum(int num1, int num2, int num3, int num4){
       return num1 + num2 + num3 + num4;
   }
   public int sum(int [] arr){
       int result = 0;
       for(int i = 0; i < arr.length; i++){
           result += arr[i];
       }
       return result;
   }
}

 

 

 

반응형

'IT > JAVA' 카테고리의 다른 글

JAVA - 내부 클래스  (0) 2024.11.27
JAVA - 생성자(Constructor)  (1) 2024.11.26
JAVA - OOP , 클래스와 객체  (1) 2024.11.26
Java - 배열  (0) 2024.11.22
JAVA - 반복문 문제풀이  (0) 2024.11.22