본문 바로가기
학습/JAVA

6. 클래스(메소드, 인스턴스 멤버와 this)

by Elfen Lied 2022. 10. 6.
반응형

- 메소드

  • 객체의 동작(기능)
  • 호출해서 실행할 수 있는 중괄호 { } 블록
  • 메소드 호출하면 중괄호 { } 블록에 있는 모든 코드들이 일괄 실행

 

- 메소드 이름

  • 자바 식별자 규칙에 맞게 작성
  • 변수명과 동일
    • 일반적으로 변수명은 명사
    • 메소드명은 동사 또는 동사+명사 형태

 

- 메소드 호출

  • 메소드는 클래스 내, 외부의 호출에 의해 실행
    • 클래스 내부: 메소드 이름으로 호출
    • 클래스 외부: 객체 생성 후, 참조 변수를 이용해 호출

 

- 리턴(return) 문

  • 메소드 실행을 중지하고 리턴값 지정하는 역할
  • 리턴값이 있는 메소드는 반드시 리턴(return) 사용해 리턴값 지정해야함
  • 리턴문 뒤에 실행문 올수 없다.
  • 메소드 실행을 강제 종료 시키는 역할
public class Car {

	// 인스턴스 메소드, 비정적 메소드
	// non-static 메소드
	// 객체의 개별적인 동작
	// 객체 생성 후 호출 된다.
	// 참초변수를 통해 호출 - car.run()
	int run(String message) {
		System.out.println("run메소드 실행");
		System.out.println("전달된 매개값 : " + message);
		return message.length();
	}
	
	void stop() {
		System.out.println("stop메소드 실행");
	}
	
	void sound() {
		System.out.println("sound메소드 실행");
	}
	
	// static 메소드 - (정적 메소드)
	// 객체 생성 유무와 관계 없이 사용 가능
	// 클래스명.메소드명 - Car.isLeftGas
	static void isLeftGas() {
		System.out.println("isLeftGas");
	}
}

==============================================================

public class CarDemo {
	public static void main(String[] args) {
		
		Car.isLeftGas();
		
		Car car = new Car();
		int strSize = car.run("Hello");
		System.out.println("strSize : " + strSize);
		car.stop();
		car.sound();
		
		System.out.println();
		
		// static메소드 호출
		Car.isLeftGas();
		// 참조변수를 통한 호출 (권장X)
		car.isLeftGas();
	}
}

non-static 메소드는 객체 생성후 호출해야하지만,

static은 객체 생성 유무와 관계 없이 사용 가능

 

 

 

- 메소드 오버로딩

  • 클래스 내에 같은 이름의 메소드를 여러 개 선언하는 것
  • 메소드 이름만 같을 뿐 서로 동일한 메소드가 아니다.
  • 메소드 오버로딩의 조건
    • 메소드 이름이 동일해야 한다.
    • 매개변수의 개수, 매개변수의 타입, 매개변수 타입의 순서가 달라야 한다.
    • 반환 타입은 메소드 오버로딩과 무관하다.
    • 매개변수의 이름은 메소드 오버로딩과 무관하다.

 

 

- 문자열 계산기 (간단한 예외처리까지)

public class StringCalculator {
	int add(int a, int b) {
		return a + b;
	}

	int add(String a, String b) {
		int num1 = 0;
		int num2 = 0;

		try {
			num1 = Integer.parseInt(a);
			num2 = Integer.parseInt(b);
		} catch (Exception e) {
			System.out.println("올바른 값을 입력하세요");
		}
		return num1 + num2;
	}

	public int add(String a, int b) {
		int num1 = 0;
		try {
			num1 = Integer.parseInt(a);
		} catch (NumberFormatException e) {
			System.out.println("올바른 값을 입력하세요");
			return 0;
		}
		return num1 + b;
	}

	public int add(int a, String b) {
		int num1 = 0;
		try {
			num1  = Integer.parseInt(b);
		} catch (NumberFormatException e) {
			System.out.println("올바른 값을 입력하세요");
			return 0;
		}
		return a + num1;
	}
}

==============================================

public class StringCalculatorEx {
	public static void main(String[] args) {
		StringCalculator calculator = new StringCalculator();
		
		int result1 = calculator.add(10, 2);
		System.out.println(result1);
		
		int result2 = calculator.add("10", "2");
		System.out.println(result2);
	
		int result3 = calculator.add("10", 2);
		System.out.println(result3);
		
		int result4 = calculator.add(10, "2"); 
		System.out.println(result4);
		
		// 잘못된 매개값 전달
		calculator.add("aaaa", "2");
	}
}

오류메세지 - 매개값 잘못 전달시

메인 메소드를 실행하면 숫자타입으로 변환할 수 없는 경우

catch 구문이 실행되며 결과값으로 0을 반환한다.

 

 

 

- 인스턴스 멤버와 this

- 인스턴스 멤버

  • 객체(인스턴스) 마다 가지고 있는 필드와 메소드
    • 이들을 각각 인스턴스 필드, 인스턴스 메소드라고 부름
  • 인스턴스 멤버는 객체 소속된 멤버이기 때문에 객체가 없이 사용불가

 

- this

  • 객체(인스턴스) 자신의 참조(번지)를 가지고 있는 키워드
  • 객체 내부에서 인스턴스 멤버임을 명확히 하기 위해 this. 사용
  • 매개변수와 필드명이 동일할 때 인스턴스 필드임을 명확히 하기 위해 사용

 

반응형

댓글