자바 선행학습 5일차 (마지막) - class 생성 예시

728x90

테스트 예시 만들기

  • 1개의 Test의 class 생성
  • Test값을 받는 리스트 생성
  • 리스트를 출력하는 Main class 생성

 

1. 테스트의 class 는 전 글에서 복붙하여 사용

 - 이유: 귀찮음

import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test {
//	테스트 1개의 정보를 입력

	private static int count;
	private int index;
	private String TestName;
	private boolean isResult;
	private int TestPrice;
	private Date date;

	
// 생성자 입력
public Test(String testName, boolean isResult, int TestPrice, Date date) {
	this.index = count;
	++count;
	this.TestName = testName;
	this.isResult = isResult;
	this.TestPrice = TestPrice;
	this.date = date;
	date.setYear(date.getYear()-1900);
	date.setMonth(date.getMonth()-1);
	}

// getter setter 생성
public int getIndex() {
	return index;
}


public void setIndex(int index) {
	this.index = index;
}


public String getTestName() {
	return TestName;
}


public void setTestName(String testName) {
	TestName = testName;
}


public boolean isResult() {
	return isResult;
}


public void setResult(boolean isResult) {
	this.isResult = isResult;
}


public int getTestPrice() {
	return TestPrice;
}


public void setTestPrice(int testPrice) {
	TestPrice = testPrice;
}


public Date getDate() {
	return date;
}


public void setDate(Date date) {
	this.date = date;
}

@Override
public String toString() {
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd E요일");
	DecimalFormat df = new DecimalFormat("₩#,##0");
	return "test [index=" + index + ", TestName=" + TestName + ", 결과=" + isResult + 
			", 가격=" + df.format(TestPrice) + ", 날짜=" + sdf.format(date)+ "]";
}

}

 

2. ArrayList class 만들기

  1. ArrayList 배열을 생성함

이때 제네릭안에는 클래스형 일반연산자를 쓰는 대신에 일반연산자 타입을 대신할 수 있는 Test를 써서 타입을 대체

public class TestList {
// 테스트의 리스트를 만듬
	private ArrayList<Test> testlist = new ArrayList<>();

 

   2. class 객체 추가

리스트에 추가를 해줘야하기 때문에 그 목적에 맞는 동작을 하는 객체 생성

리턴값을 주지않고 동작만 하기 때문에 void를 씀

 * 가끔씩 static 붙여나오는데 꼭 지워줘야 오류발생하지 않음 > 저장공간을 공유하지 않는 개별 메모리

형식:

public void [변수 이름 지정] (쓰일 변수 이름 + 그 변수를 대변할 변수이름)

현재 클래스의 이름 + 조건을 실행할 지역변수 입력 (그 변수를 대변할 변수이름)

	public void testadd(Test testn) {
    //Test class에서 testn이라는 변수를 받아옴
		testlist.add(testn);
    // testlist.add함수를 써서 괄호안에 있는 지정된 testn이라는 변수를 더한다는 의미

 

   3. 생성자 추가

생성자를 추가함으로써 다른 class 파일에서 이 class를 선언할 수 있고, 선언함으로써 위에 추가한 void 객체를 실행할 수 있음

	public TestList() {
	}
    
    public TestList(ArrayList<Test> testlist) {
	this.testlist = testlist;
	}

 

   4. getters setters 생성

Alt Shift s > r

생성함으로서 private arraylist class 안의 데이터를 출력하거나 입력할 수 있음

	public ArrayList<Test> getTestlist() {
		return testlist;
	}

	public void setTestlist(ArrayList<Test> testlist) {
		this.testlist = testlist;
	}

 

  5. toString 생성

toString을 선언함으로서 데이터의 서식을 지정하여 출력할 수 있음

다만 arraylist를 저장한 모든 값을 한줄씩 띄어쓴 후 출력해야 하기 때문에 아래와 같이 return 값을 변경하여 사용

  • String을 null 말고 공백으로 선언
  • 향상된 for문을 사용해서 testlist에 저장된 모든 Test 값을 String 공백 값 안에 저장
    • Test class를 ts로 정의한 후 testlist에 저장된 모든 값을 ts로 받아온다.
    • 그 후에 str += ts로 str에 모든 값을 저장하고 \n을 통해 한줄씩 띄어쓰는 조건문을 만듬
	@Override
	public String toString() {
		String str = "";
		for(Test ts : testlist)
			str += ts + "\n";
		return str;
	}

 

코드 완성본

import java.util.ArrayList;

public class TestList {
	
	ArrayList<Test> testlist = new ArrayList<>();
//	클래스 선언
	public TestList() {
	}

//	생성자 선언
	public TestList(ArrayList<Test> testlist) {
		this.testlist = testlist;
	}
	
//	getter & setter
	public ArrayList<Test> getTestlist() {
		return testlist;
	}
	public void setTestlist(ArrayList<Test> testlist) {
		this.testlist = testlist;
	}

//	toString
	@Override
	public String toString() {
		String str = "";
		for(Test ts : testlist)
			str += ts + "\n";
		return str;
	}

//	생성자 조건문
	public void testadd(Test testn) {
		testlist.add(testn);
	}
}

3. Main Class 선언

import java.util.Date;

public class test3 {
	public static void main(String[] args) {

		TestList testlist = new TestList();
		
		Test t = new Test("테스트", false, 30000, new Date(2022, 1, 22));
		Test t2 = new Test("테스트", false, 30000, new Date(2022, 1, 22));
		Test t3 = new Test("테스트", false, 30000, new Date(2022, 1, 22));
		
		testlist.testadd(t);
		testlist.testadd(t2);
		testlist.testadd(t3);
		
		System.out.println(testlist);
	}
}

출력문

test [index=1, TestName=테스트, 결과=false, 가격=₩30,000, 날짜=2022.01.22 토요일]
test [index=2, TestName=테스트, 결과=false, 가격=₩30,000, 날짜=2022.01.22 토요일]
test [index=3, TestName=테스트, 결과=false, 가격=₩30,000, 날짜=2022.01.22 토요일]

728x90