제주 탈출 일지

패스트캠퍼스 챌린지 14일차 본문

패스트캠퍼스 챌린지!

패스트캠퍼스 챌린지 14일차

귀건 2021. 9. 19. 22:13
728x90
반응형

오늘은 한주를 마무리하는 일요일. 오늘 설문지 제출은 까먹지 않을거에요,,

 

19. 복습해봅시다 (static과 싱글톤 패턴)

 

자동차 공장이 있습니다. 자동차 공장은 유일한 객체이고, 이 공장에서 생산되는 자동차는 제작될 때마다 고유의 번호가 부여됩니다. 자동차 번호가 10001부터 시작되어 자동차가 생산될 때마다 10002, 10003 이렇게 번호가 붙도록 자동차 공장 클래스, 자동차 클래스를 구현하세요. 다음 CarFactoryTest.java 테스트 코드가 수행 되도록 합니다.

 

CarFactoryTest.java

package ch19;

public class CarFactoryTest {

	public static void main(String[] args) {
		
		CarFactory factory = CarFactory.getInstance();
		Car mySonata = factory.createCar();
		Car yourSonata = factory.createCar();
		
		System.out.println(mySonata.getCarNum()); // 10001 출력
		System.out.println(yourSonata.getCarNum()); // 10002 출력
		
	}

}

CarFactory.java

package ch19;

public class CarFactory {
	
	private static CarFactory carfactory = new CarFactory();
	private static int CarNumber = 10001;
	
	private CarFactory() {
		
	}
	
	public static CarFactory getInstance() {
		return carfactory;
	}

	public Car createCar() {
		
		Car car = new Car(CarNumber);
		this.CarNumber++;
		return car;
	}
}

Car

package ch19;

public class Car {
	
	
	private int carNumber;
	
	public Car(int carNumber) {
		
		this.carNumber = carNumber;
	}

	public int getCarNum() {
		return carNumber;
	}

}

나름 고민하면서 짰는데, 답에서는 CarFactory에  CarNumber(SerialNumber)가 있는게 아닌 , Car 클래스에 있었다.

그러니까 나는 CarFactory에서 Car 인스턴스를 생성 -> Car 생성자에 SerialNumber를 넘겨주는 형태로 코딩했으나,

답은 SerialNumber 자체는 Car안에 있고, CarFactory는 단순히 인스턴스 생성만 하는 그런 용도로 createCar메소드가 이루어져 있었다.

 

20. 자료를 순차적으로 한꺼번에 관리하는 방법 - 배열(array)

동일한 자료형의 순차적 자료 구조.

물리적 위치가 논리적 위치가 동일하다. (A->B와 A 다음 메모리의 값이 B 인것이 동일)

 

배열의 경우 중간에 데이터가 삽입되거나 삭제될때 수행시간이 어느정도 걸린다. (O(n))

기본 자료형, 참조 자료형 의 배열을 확인해볼 것이다.

 

배열에는 length 속성이 있다. 배열이름.length

new를 통해 배열을 만들면 초기화가 된다.

package ch20;

public class ArrayTest {

	public static void main(String[] args) {
		
		int[] arr = new int[] {1,2,3,4,5,6,7,8,9,10} ;
		int total = 0;
		
//		for(int i = 0, num = 1; i < arr.length; i++) {
//			arr[i] = num++;
//		}
		
		for(int num : arr) {
			total += num;
		}
		
		System.out.println(total);
		
	}

}
package ch20;

public class CharArrayTest {

	public static void main(String[] args) {
		
		char[] alphabets = new char[26];
		char ch = 'A';
		
		for(int i = 0 ; i < alphabets.length; i++) {
			alphabets[i] = ch++;
		}
		
		for(char alpha : alphabets) {
			System.out.println(alpha + ", " + (int)alpha);
		}
	}

}

배열 순회에는 length 속성을 사용하여 끝까지 순회하는 방법과 향상된 for문을 이용하여 순회하는 방법 2가지가 존재한다. 향상된 for문은 python 좀 해본 사람이면 오히려 편하게 느껴질 듯 하다.

for ( 자료형 변수명 : 순회할 자료구조) 이런 형식

다음 강의에서는 참조 자료형에 대한 배열을 알아볼 것이다.

 

21. 객체 배열 사용하기

객체의 주소를 저장할 공간이 잡힌다. 객체는 null로 초기화 된다.

따라서 객체를 만들어서 배열에 넣어야 한다.

이렇게 배열에 각각 new 한 인스턴스를 넣어주고 향상 for로 각 인자를 println 해보면 주소가 찍히는 것을 확인할 수 있다.

System.arrayCopy(src, srcPos, dest, destPos, length)

src 배열에서 src의 어떤 Pos부터 dest 배열의 destPos의 복사할 위치의 length길이만큼 복사해주는 static 메소드

(System 클래스에서 바로 호출하기 때문)

package ch21;

public class ObjectCopyTest {

	public static void main(String[] args) {

		Book[] library = new Book[5];
		Book[] copyLibrary = new Book[5];

		library[0] = new Book("태백산맥1" , "조정래");
		library[1] = new Book("태백산맥2" , "조정래");
		library[2] = new Book("태백산맥3" , "조정래");
		library[3] = new Book("태백산맥4" , "조정래");
		library[4] = new Book("태백산맥5" , "조정래");
		
		System.arraycopy(library, 0, copyLibrary, 0, 5);
		
		System.out.println("== library == ");
		for(Book book : library) {
			System.out.println(book);
			book.showInfo();
		}
		
		System.out.println("== copy library ==");
		for(Book book : copyLibrary) {
			System.out.println(book);
			book.showInfo();
		}
		// 일부 내용을 수정해보기.
		library[0].setAuthor("박완서");
		library[0].setTitle("나목");
		
		System.out.println("== library == ");
		for(Book book : library) {
			System.out.println(book);
			book.showInfo();
		}
		
		System.out.println("== copy library ==");
		for(Book book : copyLibrary) {
			System.out.println(book);
			book.showInfo();
		}
		
	}

}

library를 copylibrary 배열에 복사를 하면, 주소가 복사가 되기 떄문에 library의 일부 내용을 수정하더라도 copy library 또한 동일한 주소이기 때문에 변화가 반영이 된다.(얕은 복사)

 

강한 복사를 위해서는 새로운 배열을 만들고, 그 배열에 새로운 객체를 담는다. 그 후 복사하고 싶은 객체의 내용을 새로운 객체에 담는다. 

 

강한 복사

package ch21;

public class ObjectCopyTest {

	public static void main(String[] args) {

		Book[] library = new Book[5];
		Book[] copyLibrary = new Book[5];

		library[0] = new Book("태백산맥1" , "조정래");
		library[1] = new Book("태백산맥2" , "조정래");
		library[2] = new Book("태백산맥3" , "조정래");
		library[3] = new Book("태백산맥4" , "조정래");
		library[4] = new Book("태백산맥5" , "조정래");
		
		copyLibrary[0] = new Book();
		copyLibrary[1] = new Book();
		copyLibrary[2] = new Book();
		copyLibrary[3] = new Book();
		copyLibrary[4] = new Book();
		
		for(int i = 0; i < library.length; i++) {
			copyLibrary[i].setAuthor(library[i].getAuthor());
			copyLibrary[i].setTitle(library[i].getTitle());
		}
		
		
		
		System.out.println("== library == ");
		for(Book book : library) {
			System.out.println(book);
			book.showInfo();
		}
		
		System.out.println("== copy library ==");
		for(Book book : copyLibrary) {
			System.out.println(book);
			book.showInfo();
		}
		
		
		
	}

}

 

일단은 여기까지.

내일 추석연휴인데 모두 행복한 한가위 되었으면 좋겠다.

물론 나도 .ㅎ

 

그럼 안녕

 

 

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

728x90
반응형
Comments