/ LECTURE

Java - Clone

이 페이지는 다음에 대한 공부 기록입니다

JAVA(자바), Python(파이썬) 기반의

AI 활용 응용 소프트웨어 개발자 양성 과정

2021.11.10. ~ 2022.05.18.

찾으시는 정보가 있으시다면
주제별reference를 이용하시거나
우측 상단에 있는 검색기능을 이용해주세요

25일차 수업

========복습========

API

Application Programming Interface

자바 기본 API, 라이브러리

개발에 자주 사용하는 클래스나 인터페이스들의 모음

======== 끝 ========

25일차 수업

Wrapper class

각각 자료형에 대해서 값의 범위, 정의가 변경되지 않음

String 자료형을 int로 변경해야할 때 등등

자료형을 인스턴스(객체)처럼 사용해야할 때가 있지만

Object클래스를 상속받은게 아님

wrapper class로 boxing 필요함, 기본자료형을 감싸줌

Boolean B = true;
Double d = 1.2;
int a = Integer.parseInt(String b);	//자바가 좋아져서 unboxing 자동으로 해줌

Object

모든 자바 클래스의 최고 조상 클래스

상속이 없는 클래스는 기본적으로 Object를 상속받고 있음

clone

Object 클래스의 메소드중 인스턴스를 복제하여 새로만들어서 반환해주는 기능

무분별하게 작성되면 데이터의 정합성, 보호문제로 인해 문제 발생할 수 있음

그래서 인터페이스 Cloneable을 구현한 클래스만 복제가 되게 끔 제한을 걸어놈

class Car implements Cloneable {
	String model;
	private ArrayList<String> owner = new ArrayList<String>();

	public ArrayList<String> getOwner() {
		return owner;
	}

	public void setOwner(ArrayList<String> owner) {
		this.owner = owner;
	}

	public Object clone() {
	// 오버라이딩이 필수! 접근제어자가 protected고, 오류를 throws 하고 있어서 try catch도 사용해줘야하고
		try {
			Car cloneCar = (Car)super.clone();
			cloneCar.owner = (ArrayList<String>)owner.clone();
			// 내용도 복제해주는 과정이 필요함
			return cloneCar;
		}catch(CloneNotSupportedException e) {
			return null;
		}
	}

	public void setOwner(String string) {
		this.owner.add(string);

	}
}

public class Ex04_object2 {

	public static void main(String[] args) {
		Car c1 = new Car();
		c1.model = "투싼";
		c1.setOwner("홍길동");
		System.out.println("c1 : " + c1.model + " " + c1.getOwner());

		Car c2 = (Car)c1.clone();
		c2.setOwner("임꺽정");
		System.out.println("c1 : " + c1.model + " " + c1.getOwner());
		System.out.println("c2 : " + c2.model + " " + c2.getOwner());
	}
}

Math

수학에서 자주 사용하는 상수, 함수 등등을 담은 클래스

모두 static으로 선언되어있어 객체를 생성하지않고 사용가능

String

String은 참조객체!

불변성을 가짐, 한번 생성되면 그 값은 읽기만 할 수 있고, 변경할 수 없음

변수를 만들어도 항상 주소를 같이 참조하고 있음(변수공간, 문자열 공간)

  • 문자열 공간 heap에 동일한 대상이 있는지 파악, 있으면 연결, 없으면 생성

  • heap 메모리에서 공간을 가장 많이 사용한다

StringBuffer

String 클래스의 방식에서 공간을 차지하는 경우를 줄임

StringBuffer str2 = new StringBuffer(안녕);
str2.append(하세요);
str2.capacity(); // buffer의 크기를 확인해주는 메소드, StringBuffer은 기본공간을 16칸으로 여유를 줌으로
		문자열 연산 등의 과정에서 추가로 공간을 생성하는 경우를 줄였다
str2.deleteCharAt(1);	// 해딩 인덱스의 string 삭제
str2.delete(1,2);		// 해당 범위의 string 삭제
str2.insert(1,);	// 해당 인덱스에 string 삽입

Buffer

cpu와 하드디스크의 정보처리 속도의 차이가 발생

버퍼라는 임시공간을 두어 속도의 격차를 효율적으로 운용

Arrays

java.lang.* : 기본동작들을 담당하는 클래스들의 집합, 자동 import 되어있음

java.util.* : 개발하면서 사용하는 유용한 기능을 담당하는 클래스들의 집합, import 해줘야함

java.util.Arrays : 배열을 다루기 위한 기능이 들어있는 클래스

Arrays.copyOf(arr, 3); // 대상배열, 복사할 크기 입력
Arrays.copyOfRange(arr,2,4); // 대상배열, 복사할 범위
Arrays.fill(arr,9); // 대상배열, 초기화할 값
Arrays.sort(arr); // 대상배열
Arrays.sort(arr,1,3); // 대상배열, 정렬할 범위
Arrays.toString(arr);
Arrays.deepToString(arr); // 다차원 배열을 문자열의 형태로 보여주는 메소드

Calendar

날짜와 시간을 담당하는 추상 클래스 : 나라마다 다르니, 재정의가 필요함

GregorianCalendar : 구현된 기본 클래스

// 실행시키는 시점의 컴퓨터의 날짜와 시간정보
Calendar time = Calendar.getInstance(); // 추상클래스여서 인스턴스를 인스턴스를 만들 수 없기 때문에 메소드 이용
time.getTime();
time.add(Calendar.SECOND, 180); // 해당 시간, 추가할 시간
time.get(Calendar.YEAR); // get할 시간단위
time.before(180); // 기준시간에 대한 전후 관계를 보고 boolean 반환해주는 메소드
time.after(180);
time.set(Calendar.YEAR, 2030); // 시간단위, set값