Class & Method 심화
GetInstance Method
package day0628;
class Test {
public Test() {
System.out.println("디폴트 생성자");
}
public static Test getInstance() {
return new Test();
}
}
public class ConstGetInstance_02 {
public static void main(String[] args) {
Test t=Test.getInstance();
}
}
- public static (class명) getInstance( ) { return new (method명) } // getInstance method 실행시 return 값의 method가 생성되며 실행
Static 변수 & 인스턴스 변수
class Test2 {
int n=0;
static int cnt=0;
public Test2() {
n++;
cnt++;
}
}
public class VarTest_03 {
public static void main(String[] args) {
Test2 t1=new Test2();
Test2 t2=new Test2();
Test2 t3=new Test2();
}
}
- 인스턴스 변수인 n은 생성 시마다 초기화 & static 변수인 cnt는 누적 후 프로그램 종료 시 초기화
멤버 변수와 출력 Method가 다른 Class에서 선언될 때
class Apple {
private String writer;
private String subject;
private static String msg="HappyDay!!";
}
public class ExObject_08 {
public static void writeApple(Apple x) {
System.out.println("작성자: "+x.getWriter());
System.out.println("제목: "+x.getSubject());
}
public static void main(String[] args) {
System.out.println(Apple.getMsg());
Apple a1=new Apple();
a1.setWriter("김은희");
a1.setSubject("악귀");
Apple a2=new Apple();
a2.setWriter("김동수");
a2.setSubject("초보 개발자의 하루");
writeApple(a1);
writeApple(a2);
}
}
- class 자체를 method의 인자값으로 가져오면 다른 class에서 출력 method를 작성 가능
배열을 이용한 멤버 변수 수정과 호출(Set & Get)
class Student {
private String sname;
private String hp;
private int grade;
public Student(String sname,String hp,int grade) {
this.sname=sname;
this.hp=hp;
this.grade=grade;
}
public void getData() {
System.out.println("이름: "+sname);
System.out.println("연락처: "+hp);
System.out.println("학년: "+grade);
}
}
public class ArrObject_09 {
public static void main(String[] args) {
Student [] stu= {
new Student("이민규", "010-8250-9354", 3),
new Student("최진평", "010-1111-2224", 1),
new Student("임형준", "010-2222-3334", 2)
};
- setter를 대신한 명시적 생성자를 배열에 넣는 두 가지 방법(생성 후 각각 초기화, 생성과 동시에 초기화)
- 배열의 각 index 값이 다른 class의 명시적 메서드이므로 매번 생성 후 메서드의 인자값 설정
for(int i=0;i<stu.length;i++)
{
Student s=stu[i];
s.getData();
}
for(Student s1:stu)
{
s1.getData();
}
}
}
- 배열의 각 index가 생성과 동시에 명시적 생성자(setter 역할)의 인자값을 대입
- for~each문으로 출력 시 자료형 대신 class명 입력
출력문 전체 제목(Static Method 이용)
class MyPersonInfo {
public static void title() {
System.out.println("--------------");
}
public class ArrObject_10 {
public static void main(String[] args) {
MyPersonInfo.title();
}
}
- 전체의 제목은 공통적 사항이므로 static method 작성 후 호출
Method의 OverLoad
public class ExOverLoading_12 {
public static int sum(int a,int b) {
return a+b;
}
public static double sum(int a,double b) {
return a+b;
}
public static double sum(double a, int b) {
return a+b;
}
public static double sum(double a,double b) {
return a+b;
}
- 위의 경우 오류가 발생하지 않는다
- 인자의 개수, 형태, 순서 중 어느 하나라도 다르면 method명이 같아도 중복 사용 가능
여러개의 Return 값을 한번에 입력
public String getData() {
String s="상품명: "+name+"\n입고일: "+inday+"\n출고일: "+outday;
return s;
}
public static int ccc(int x,int y) {
int z=x+y;
return z;
}
public int getTotalPay() {
int s=pay+getFamilySudang()+getTimeSudang();
return s;
}