변수 처리는 중복이 있을 때만!!!!!
클래스 간의 순서는 없다
자바 코드에서 순서는 오직 '메서드 안'에만 존재한다!
기초 변수와 참조 변수의 차이 - 값을 직접 가져오거나, 주소를 들고오거나(=참조하거나)
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); } }
- 중복 제거 방법
- 값 중복 -> 변수 처리
- 규칙있고 연속적인 연산 중복 -> 반복문 처리
- 연속적이지 않은 연산 중복 -> 메소드 처리
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인칭으로 말하지 않는 이유와 같음
public String 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 반환
}
}
'약속'의 의미 - 통일하는 것으로 시간·비용 절약
우리는 더 큰 약속을 '표준'이라 한다.
- 객체가 유지되는 한 객체 안의 멤버변수(상태)도 유지된다
사각형은 가로 (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);
}
}
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();
}
}