Spring/Java

[Java - OOP 기초2] 필드와 메서드

jungha_k 2022. 9. 7. 00:18

👩‍💻변수 

클래스 변수 / 인스턴스 변수 / 지역 변수   

      (=멤버변수, 필드)          메서드 내에 포함된 모든 변수

 

 

✨클래스 변수, 인스턴스 변수 차이점 : static있으면 클래스 변수, static없으면 인스턴스 변수

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

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

 

인스턴스 변수 : new 로 생성됨, 각각의 고유한 속성

클래스 변수 : static 키워드로 선언됨, 공통된 저장공간 공유

 

손가락 수(5), 발가락 수(5) 같이 모든 사람이 공유하는 특성? → 클래스 변수(static) 선언

 

인스턴스 변수 : 선언하지 않고도 클래스명.클래스변수명 으로 사용 가능

↕️ 차이점 : 초기값(필드 변수 - 강제로 초기화 이뤄짐, 지역변수 - 초기화 필수)

지역변수 : 메서드 내에 선언, 스택 메모리에 저장 (메서드 종료와 함께 소멸)


 

✨Static? : 모든 객체와 메모리를 공유

  1. 인스턴스, 클래스 변수 구분점
  2. 클래스 멤버(필드, 메서드, 이너클래스)에 사용 가능 (정적멤버)
  3. 인스턴스 생성 없이도 클래스명.멤버명 으로 사용 가능
  4. 객체 생성 이후 참조변수 통해 사용 가능, but ‘정적 멤버’ 표시 위해 클래스.멤버명 권장

  1. 정적 필드는 객체간 공유 변수의 성질이 있음 - 모든 인스턴스에 공통적용 값 공유
  2. 정적 메서드의 경우 인스턴스 변수, 인스턴스 메서드 사용 불가 (인스턴스 생성 없이 호출 가능하기 때문에)

 

✨메서드 : 특정 작업을 수행하는 일련의 명령문들의 집합

자바제어자     반환타입 메서드명  매개변수
public static  int    add(int x, int y) { // 메서드 시그니처
	int result = x + y; // 메서드 바디
	return result;
}

메서드 시그니처와 메서드 바디로 이루어져 있다.

 

반환 타입 : 메서드가 어떤 타입을 반환하는지

메서드명 : 메서드 이름

매개변수 : 작업을 수행하기 위해 어떤 재료들이 필요한지

  1. 반환타입이 void 가 아닌경우 메서드내 return문 필수
  2. 결과값 : 반환타입과 일치, 자동형변환 가능한 것

✨메서드 호출 : 클래스 외부에서 메서드 사용시 인스턴스 생성 해야함

인스턴스 생성 후 : ‘.’ 포인트 연산자 통해 메서드 호출 가능

 

인자 : 메서드 호출 시 괄호 안에 넣어주는 입력값

ex)

Double multiply(int x, double y) { // 매개변수가 있는 메서드
	double result = x * y;
	return result;
}

Double multiply(4, 4.0);

인자의 갯수와 순서 : 메서드 정의시 선언된 매개변수와 일치해야 함

 

 

✨메서드 오버로딩 : 하나의 클래스 안에 같은 이름의 메서드를 여러개 정의하는 것 (!= 오버라이딩)

 

장점 : 하나의 메서드로 여러 경우의 수를 해결할 수 있다(일일히 메서드 정의 안해도 됨)

 

오버로딩 성립 조건 :

  1. 같은 이름의 메서드명 사용
  2. 매개변수의 개수, 타입 다르게 정의되어야함
  3. *반환 타입은 오버로딩 성립하는데에 영향 X

ex)

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