[JAVA기초] 메서드

포키·2022년 10월 12일
0

국비과정

목록 보기
14/73

변수 처리는 중복이 있을 때만!!!!!

클래스 간의 순서는 없다
자바 코드에서 순서는 오직 '메서드 안'에만 존재한다!

기초 변수와 참조 변수의 차이 - 값을 직접 가져오거나, 주소를 들고오거나(=참조하거나)

int n = 5;
int i = 5;				//	n도 i도 5의 값을 갖는다
n == i;					//	true
Some s1 = new Some();
Some s2 = new Some();	//	s1과 s2 인스턴스는 각각 생성된다
s1 == s2;				//	false
s1 = s2;				//	s1 변수에 s2 인스턴스를 담는다면
s1 == s2;				//	true

↓↓ 두번째 코드 풀이 ↓↓

class MyObj {
}
class UseMyObj {
	public static void main(String[] args) {
		MyObj o = new MyObj();
		System.out.println(o);
		MyObj o2 = new MyObj();
		System.out.println(o2);
		System.out.println(o == o2);
		o = o2;
		System.out.println(o);
		System.out.println(o2);
		System.out.println(o == o2);
	}
}

메서드 (method)

  • 중복 제거 방법
  1. 값 중복 -> 변수 처리
  2. 규칙있고 연속적인 연산 중복 -> 반복문 처리
  3. 연속적이지 않은 연산 중복 -> 메소드 처리
  • 함수와 자바의 메소드의 차이는 '주체(소유자)'의 유무.
    (method는 class에 속해있음?)

parameter와 argument 차이

p. 150 예제

class DeskLamp {
	private boolean isOn;
	public void turnOn(){
		isOn = true;
	}
	public void turnOff(){
		isOn = false;
	}
	public String toString(){
		return "현재 상태는 " + (isOn ? "켜짐" : "꺼짐");
	}
}
class DeskLampTest {
	public static void main(String[] args) {
		DeskLamp myLamp = new DeskLamp();
		myLamp.turnOn();
		System.out.println(myLamp);		// myLamp -> 문자열로 -> toString()
		myLamp.turnOff();
		System.out.println(myLamp);
	}
}

  • 메서드 사용(호출)과 반환
class Some {
	int add2(int num) {
		int result = num + 2;
		return result;
	}
	void printHello(){
		System.out.println("Hello");
		boolean flag = true;
		if(flag){
				return;								// 메소드 종료
		}
		System.out.println("end of printHello");	// 출력되지 않음
	}
}
class UseSome {
	public static void main(String[] args) {
		//	객체 생성 -> 내부의 멤버변수, 메소드를 사용할 준비 완료
		Some s = new Some();		
		/*	
        s.add2의 호출-반환이 일어나는 줄
		s.add2(5)는 연산을 마치고 7이 되어 돌아온다
		(이때 요구하는 parameter를 반드시 넣어줘야 함)
        */
		int addResult = s.add2(5);					
		System.out.println(addResult);
		s.printHello();
	}
}

  • 메서드로 중복을 줄이는 법
class Human {
	String name;
	int age;
	void printInfo(){
		System.out.println("이름: " + name + ", 나이: " + age);
	}
}
class UseHuman {
	public static void main(String[] args) {
		Human h1 = new Human();
		h1.name = "아이유";
		h1.age = 29;
		h1.printInfo();
		//System.out.println(h1.name + "(" + h1.age + ")");
		Human h2 = new Human();
		h2.name = "정해인";
		h2.age = 35;
		h2.printInfo();
		//System.out.println(h2.name + "(" + h2.age + ")");
		Human h3 = new Human();
		h3.name = "윤아";
		h3.age = 29;
		h3.printInfo();
		//System.out.println(h3.name + "(" + h3.age + ")");
	}
}

메소드에서 h1.이 들어가지 않은 이유는 자기 자신을 3인칭으로 말하지 않는 이유와 같음

toString 메서드

참고

	public String toString(){
    }
  • 객체 참조값 -> String 반환 메서드
    (객체를 넣으면 toString 메서드를 이용해 문자열로 변환하여 내보내기로 약속되어있다.)
    (toString을 바꾸는 것으로 반환값이 바뀜)
    • 객체명을 넣으면 toString 메서드의 return값을 반환한다. (외우기!!)
class MyObj {
}								// toString 기본 메소드가 존재 (보이지 않음)
class MyObj2 {
	public String toString(){
		return "hi~";
	}
}								// toString을 따로 정의함 (정의한대로 return값이 반환됨)
class UseMyObj {
	public static void main(String[] args) {
		MyObj o = new MyObj();
		System.out.println(o);		// -> 주소 반환
        MyObj2 o2 = new MyObj2();
		System.out.println(o2);		// -> return 반환
	}
}

'약속'의 의미 - 통일하는 것으로 시간·비용 절약
우리는 더 큰 약속을 '표준'이라 한다.

  • 객체가 유지되는 한 객체 안의 멤버변수(상태)도 유지된다

Quiz1. 직사각형을 나타내는 클래스 Rectangle

사각형은 가로 (w)와 세로(h)를 가지며, 사각형의 넓이를 반환하는 area(), 사각형의 둘레를 반환하는 perimeter() 등의 메서드를 가진다. Rectangle 클래스를 작성하고 객체를 생성하여 테스트하라.

class Rectangle {
	int w;
	int h;
	int area(){
		return w * h;	// 중복(재사용) 있을 때에만 변수로 처리해줌!
	}
	int perimeter(){
		return (w + h) * 2;
	}
	public String toString(){
		String info = "가로: " + w + "\n세로: " + h + "\n넓이: " + area() + "\n둘레: " + perimeter();
		return info;
	}
}
class UseRectangle {
	public static void main(String[] args) {
		Rectangle r = new Rectangle();
		r.w = 10;
		r.h = 20;
		System.out.println(r);
	}
}

Quiz2. Movie 클래스

Movie 클래스는 영화 제목, 평점, 감독, 발표된 연도등의 멤버변수를 가진다. 영화의 모든 정보를 화면에 출력하는 print() 라는 메서드를 구현하라. Movie 클래스를 작성하고 객체를 생성하여서 테스트하라

class Movie {
	String title;
	double score;
	String director;
	int year;
	void print(){
		System.out.println("title: " + title + "\nscore: " + score + "\ndirector: " + director + "\nyear: " + year);
	}
}
class UseMovie {
	public static void main(String[] args) {
		Movie m = new Movie();
		m.title = "트루먼 쇼";
		m.score = 9.49;
		m.director = "피터 위어";
		m.year = 1998;
		m.print();
	}
}

profile
welcome

0개의 댓글