Javajungsuk6 / 6-26 ~ 6-37
package javajungsuk6_10;
public class Ch06_26a29 {
public static void main(String[] args) {
// 6-26 ~ 6-29 static메서드와 인스턴스 메서드
// 인스턴스 메서드 : 객체생성을 하고 '참조변수.메서드이름()'으로 호툴 / 메서드 내에서 iv 사용가능
// static 메서드(클래스 메서드) : 객체생성없이 '클래스이름.메서드이름()'으로 호출 / 메서드 내에서 iv 사용불가
// static을 언제 붙여야 할까?
System.out.println("중요 : 속성(멤버 변수) 중에서 공통 속성에 붙이기");
System.out.println("중요 : 인스턴스 멤버(iv, im)을 사용하지 않는 메서드에 붙인다."); // 메서드는 명령묶음
} // main의 끝
}
class MyMethod {
long a, b;
// 인스턴스 변수
long add() {
return a + b;
}
// 지역 변수
static long add(long a, long b){
return a + b;
}
} // class의 끝
class TsetClass {
int iv; // 인스턴스 변수 / 객체 생성 후 사용가능
static int cv; // 클래스 변수 / 언제든 사용가능
void ivtest() {
System.out.println(iv); // 객체 생성 후 호출가능
System.out.println(cv); // 언제든 호출가능
}
static void cvtest() {
// System.out.println(iv); static메서드 내에서는 iv를 사용할 수 없다. 객체생성을 하지 않기 때문이고 iv는 객체생성이 꼭 필요하다.
System.out.println(cv);
System.out.println("중요 : static내에서 iv를 호출할 수 없는 이유는 객체가 있을지 없을지 모르기 때문에 에러가 난다.");
}
}
package javajungsuk6_10;
public class Ch06_30a31 {
public static void main(String[] args) {
// 6-30 ~ 6-31 오버로딩(overloading)
// 오버로딩(overloading) : 한 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것 / 과적하다.
// 오버로딩이 성립하기 위한 조건 3가지
System.out.println("메서드 이름이 동일해야 한다.");
System.out.println("매개변수의 개수 or 타입이 달라야 한다."); // 매개변수는 다르지만 같은 의미의 수행을 해야한다. / 메서드 이름이 같다는 것 = 작업이 같다.
System.out.println("반환타입은 영향없다.");
Over over = new Over(); // 객체생성
long result = over.add(3, 3L); // add(3, 3);으로 호출을 해버리면 어떤 메소드를 호출해야 할지 모르기 때문에 정확하게 3, 3L로 써야한다.
System.out.println(result);
// long result = over.add(3, 3); The method add(int, long) is ambiguous for the type Over
// ambiguous : 모호하다. 명확하지 않다. / 에러
} // main의 끝
}
class Over {
// 오버로딩의 예시
long add(int a, long b) {
return a + b;
}
long add(long a, int b) {
return a + b;
}
}
package javajungsuk6_10;
public class Ch06_32a35 {
public static void main(String[] args) {
// 6-32 ~ 6-35 생성자, 기본 생성자
// 인스턴스가 생성될 때마다 호출되는 '인스턴스(iv) 초기화 메서드'다.
// 인스턴스 생성 시 수행할 작업(iv 초기화)에 사용
// 이름이 클래스 이름과 같아야 한다.
// return값이 없다.(void 안붙임) / 결과를 반환할 게 없는 것은 대입만 하면 되기때문이다.
// 반환값이 없는 메서드는 void를 붙이지만 생성자에는 붙이지 않는 규칙이 있다. 규칙이라서 이유를 알 필요가 없다.
// 객체 생성
// Time t = new Time(); // 기본 생성자(매개변수가 없는 생성자) : 생성자가 하나도 없을 때에만 추가로 컴파일러가 기본 생성자를 추가해주는 것이다. / Time(){}
// Data d = new Data(); // 기본생성자를 추가 하지 않으면 컴파일 에러 : 이름에 문제, 못 찾겠다. / 생성자가 1개 있기 때문에 우리가 추가해줘야 한다.
// 초기화
// t.hour = 12;
// t.minute = 34;
// t.second = 56;
// 한줄로 초기화
Time t = new Time(12, 34, 56); // 생성자 호출
System.out.println(t.hour+ " " + t.minute + " " + t.second);
} // main의 끝
}
class Time {
int hour;
int minute;
int second;
Time(int h, int m, int s){
hour = h;
minute = m;
second = s;
}
} // class의 끝
class Data {
int value;
Data(){}
Data(int x) { // 매개변수가 있는 생성자
value = x;
}
}
package javajungsuk6_10;
public class Ch06_36a37 {
public static void main(String[] args) {
// 6-36 ~ 6-37 생성자 this(), 참조변수 this
// this : 인스턴스 자신을 가리키는 참조변수, 인스턴스 주소가 저장되어 있다. / 같은 클래스 안에서는 this를 생략할 수 있다.
// this(), this(매개변수) : 생성자에서 다른 생성자를 호출할 때 사용한다.
// 생성자 this()는 코드의 중복을 제거하려고 서로 호출하는 일이 많다. / 클래스 이름대신 this를 붙여서 호출
System.out.println("포인트 : this / this(), this(매개변수)는 완전히 다른 것이다. 참조변수 / 생성자이다.");
System.out.println("포인트 : static(클래스) 메서드에서는 참조변수 this, 생성자 this() 사용불가다.");
System.out.println("this는 지역변수(lv)와 인스턴스변수(iv)를 구별할 때 많이 사용한다.");
System.out.println("생성자 this(), this(매개변수)는 다른 생성자를 호출할 때 사용하고 첫줄에서만 사용이 가능하다."); // 첫줄이 아니라면 에러
} // main의 끝
}
class Car {
String color; // 색깔
String gearType; // 기어타입
int door; // 문 개수
// 코드중복 예시
// Car() {
// color = "white";
// gearType = "auto";
// door =4;
// }
// 중복제거 예시 : this()
Car() {
this("white", "auto", 4); // 첫줄 호출
}
// this를 쓰지 않아도 되는 예시 : 진짜이름은 참조변수 this를 붙인 것
// Car(String c, String g, int d) {
// color = c;
// gearType = g;
// door = d;
// }
// iv와 lv를 구별해야 될 때의 예시 : iv와 매개변수의 이름이 같을 때 사용
Car(String color, String gearType, int door) {
// 참조변수를 붙인 것은 iv 자신을 의미 / 매개변수는 지역변수(lv)
this.color = color;
this.gearType = gearType;
this.door = door;
}
} // class의 끝
Comments