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(); //n=1, cnt=1
		
		Test2 t2=new Test2(); //n=1, cnt=2
		
		Test2 t3=new Test2(); //n=1, cnt=3
	}
}
  • 인스턴스 변수인 n은 생성 시마다 초기화 & static 변수인 cnt는 누적 후 프로그램 종료 시 초기화

멤버 변수와 출력 Method가 다른 Class에서 선언될 때

class Apple {
	private String writer;
	private String subject;
	private static String msg="HappyDay!!";
	
	//각각의 setter,getter
}
///////////////////////
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()); //HappyDay!!
		
		Apple a1=new Apple();
		a1.setWriter("김은희");
		a1.setSubject("악귀");
		
		Apple a2=new Apple();
		a2.setWriter("김동수");
		a2.setSubject("초보 개발자의 하루");
		
		//writeApple 호출
		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);
	}
}
  • 명시적 생성자로 setter 대체
public class ArrObject_09 {

	public static void main(String[] args) {

		/*Student[] stu=new Student[3];
		
		stu[0]=new Student("이민규", "010-8250-9354", 3);
		stu[1]=new Student("최진평", "010-1111-2224", 1);
		stu[2]=new Student("임형준", "010-2222-3334", 2);*/
		
		//생성하면서 바로 초기화
		Student [] stu= {
				new Student("이민규", "010-8250-9354", 3),
				new Student("최진평", "010-1111-2224", 1),
				new Student("임형준", "010-2222-3334", 2)
				};
  • setter를 대신한 명시적 생성자를 배열에 넣는 두 가지 방법(생성 후 각각 초기화, 생성과 동시에 초기화)
  • 배열의 각 index 값이 다른 class의 명시적 메서드이므로 매번 생성 후 메서드의 인자값 설정
//출력#1
		for(int i=0;i<stu.length;i++)
		{
			//stu[i].getData();
			Student s=stu[i];
			s.getData();
		}
		
		//출력#2
		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;
	}
  • 문자열로 형변환하여 return
public static int ccc(int x,int y) {
		//return x+y;

		int z=x+y;
		return z;
	}
  • 인자값을 계산하여 return
public int getTotalPay() {
		int s=pay+getFamilySudang()+getTimeSudang();
		
		return s;
	}
  • 멤버 변수 등의 변수를 계산하여 return
profile
초보개발자

0개의 댓글