멀티캠퍼스/Spring

20230810 (목)

세크레투스 2023. 8. 10. 17:53
반응형
SMALL

<지난 주 복습>

- 상속

- 인터페이스

* OCP (Open Close Principle)

- 예외처리 : 자바는 예외처리가 강제화.

- 사용자 정의 예외 :

XXX extends Exception {

    XXX (String ~~~) {

        super(~~~); // 여기에 예외 넣어줌.

        withdraw(); // umm..?

    }

}

 

<Object 클래스>

1. Object 클래스

- 자바의 최상위 부모 클래스

- 다른 클래스 상속하지 않으면 java.lang.Object 클래스 상속 암시

 

2. 객체 비교(equals() 메소드)

public boolean equals(Object obj)

- Object 클래스의 equals 메서드는 == 연산자와 동일

* 물리적 동등성 비교(번지 비교)

Object obj1 = new Object();

Object obj2 = new Object();

boolean result = obj1.equals(obj2);

boolean......

 

3. 객체 해시코드(hashCode())

- 객체를 식별할 하나의 정수값을 리턴

* 디폴트는 객체의 메모리 번지를 이용해 해시코드 리턴

** 개별 객체는 해시코드가 모두 다름

- 논리적 동등 비교시 hashCode() 재정의 필요

* 컬렉션의 Set, Map

** 객체(또는 Key)의 중복 저장 불허

** 논리적 동등성으로 중복 여부 판단

- Hash : 구분 이라는 의미.. (작은 조각으로써 정보를 식별하기 위한..)

- 여기서 나온 정수를 코드라고 함. 그래서 hashCode라고 부름.

- 자바스크립트에서 Object를 관리할 때, hashcode 별로 key값을 지정해서 데이터를 관리해줌.

 

4. 객체 복제(clone())

- 원본 객체의 필드 값과 동일한 값을 가지는 새로운 객체를 생성

- 복제의 종류

* 얕은 복제(thin clone) - 디폴트

** 필드 값만 복제(기본 타입은 값이 복사, 참조 타입은 참조 값이 복사-공유)

* 깊은 복제(depp clone)

** 참조의 대상까지 복제

얕은 복사(Shallow copy)는 참조 타입 데이터가 저장한 '메모리 주소 값'을 복사한 것을 의미한다. 반대로 깊은 복사(Deep copy)는 새로운 메모리 공간을 확보해 완전히 복사하는 것을 의미한다. 또한 아래와 같이 얕은 복사 시 원본이 변경되지 않도록 주의해야 한다.

Objectclone() 메서드
동일한 필드 갑을 가지는 얕은 복제된 객체 리턴

따로 clone() 메서드를 재정의할 필요는 없음
java.lang.Cloneable 인터페이스 구현 객체만 복제 가능

인텊이스 구현없이 clone() 호출시 CloneNotSupportedException 발생 clone() 메서드 호출시 예외처리 필수

try {
    Object obj = clone();
} catch(CloneNotSupportedException e) {
    //예외처리
}

깊은 복제가 필요한 경우 clone() 메서드 재정의 참조 객체도 복제

 

5. 객체 소멸자(finalize()) -> 별로 안중요한지 금방 지나가셨음..

- GC는 객체를 소멸하기 직전 객체 소멸자(finalize()) 실행

- Object의 finalize()는 기본적으로 실행 내용이 없음

- 객체가 소멸되기 전에 실행된 코드가 있다면? : Object의 finalize() 재정의

- 될 수 있으면 소멸자는 사용하지 말 것 :

* GC는 메모리의 모든 쓰레기 객체를 소멸하지 않음

* GC의 구동 시점이 일정하지 않음.

 

<Object 설명을 보기에 유용한 링크>

https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html

 

Object (Java Platform SE 8 )

Called by the garbage collector on an object when garbage collection determines that there are no more references to the object. A subclass overrides the finalize method to dispose of system resources or to perform other cleanup. The general contract of fi

docs.oracle.com

 

<System 클래스>

1. System 클래스 용도

- 운영체제의 기능 일부 이용 가능

* 프로그램 종료, 키보드로부터 입력, 모니터 출력, 메모리 정리, 

 

2. 프로그램 종료 (exit())

- 기능 : 강제적으로 JVM 종료

System.exit(0);

* int 매개값을 지정하도록 : 종료 상태 값

** 정상 종료일 경우 0, 비정상 종료일 경우 0 이외의 다른 값

** 어떤 값 주더라도 종료

 

* 만약 특정 상태 값이 입력되엇을 경우에만 종료하고 싶다면?

** 자바의 보안 관리자 설정

 

3. System 클래스

- 쓰레기 수집기 실행 요청(gc())

* System.gc(); -> "야 가비지! 청소해줘" 이런 의미... -> 하지만 우리가 직접 쓸 일은 없음..

 

- 현재 시각 읽기

* 현재 시간을 읽어 밀리 세컨드(currentTimeMillis() -> 1/1000초) 와 나노세컨드(nanoTime() -> 1/10의 9승 초) 단위의 long 값 리턴

long time = System.currentTimeMillis();
long time = System.nanoTime();

* 주로 프로그램 실행 소요 시간 구할 때 이용

 

4. 시스템 프로퍼티 읽기(getProperty())

- 시스템 프로퍼티란?

* JVM이 시작할 때 자동 설정되는 시스템의 속성

 

5. String 클래스

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html

 

String (Java SE 11 & JDK 11 )

Compares two strings lexicographically. The comparison is based on the Unicode value of each character in the strings. The character sequence represented by this String object is compared lexicographically to the character sequence represented by the argum

docs.oracle.com

- byte[] 배열을 문자열로 변환하는 생성자

* 파일의 내용을 읽거나, 네트워크를 통해 받은 데이터 -> byte[] (통신할 때 많이 쓰임)

* String charsetName : 문자 셋 지정(UTF-8, ECU-KR 등..)

* 배열의 offset 인덱스 위치부터 length 개 만큼 String 객체 생성 (int offset, int length)

readByteNo-2 : 마지막 2글자는 제외해달라 (윈도우만 됨)

readByteNo-1 : 마지막 1글자는 제외해달라 (맥)

 

- String -> byte[] : 인코딩

- byte[] -> String : 디코딩

- 이 개념은 나랑 다른 언어로 만들어진 소프트웨어랑 소통할때 자주 쓰임.

- indexOf(String str) : 검색, 내가 찾고자 하는 문자열의 시작 위치를 찾아줌. 만약에 내가 찾고자 하는 문자열이 없다면 -1을 리턴함.

- length() : 문자열의 길이 리턴

- replace(CharSequence target, CharSequence replacement) : target -> replacement로 대치한 새로운 문자열을 리턴.

- 자바의 String 클래스는 불변객체여서 replace()를 사용해서 변경해줘야 함. (하지만 원본은 변경되지 않는다.)

- substring(int beginIndex, int endIndex) : beginIndex 위치에서 endIndex 전까지 잘라낸 새로운 문자열을 리턴

- trim() : 앞뒤 공백을 제거한 새로운 문자열을 리턴

- valueOf(int i), valueOf(double d) .. : 유일한 static 타입, 기본 타입값을 문자열로 리턴.

- startsWith(" ") : " "로 시작하는 문자열이냐, boolean으로 리턴.

- endsWith(" ") : " "로 끝나는 문자열이냐, boolean으로 리턴.

 

- 주민등록번호를 저장할 때는 String으로 저장하는 것이 좋다. 진짜 숫자를 의미하는 것이 아닌, 일종의 코드같은 의미이기 때문이다.

6. 문자열 찾기 (indexOf(), lastIndexOf())

- 매개값으로 주어진 문자열이 시작되는 인덱스 리턴

- 주어진 문자열이 포함되어 있지 않으면 -1 리턴

 

- 만약에 String 안에 같은 글자가 중복되면 앞에서 먼저 찾은 글자만 리턴해준다. 뒤에 같은 글자는 리턴하지 않음.

 

7. 문자열 대치 (이따가 교재 보고 적자..)

 

8. 문자열 잘라내기(substring())

- substring(int beginIndex, int endIndex)

* 주어진 시작과 끝 인덱스 사이의 문자열 추출

- substring(int beginIndex)

* 주어진 인덱스 이후부터 끝까지 문자열 추출

 

package java_study.chapter11.sec06;

public class StringSubstringExample {

	public static void main(String[] args) {
		String ssn = "880815-1234567";

		String firstNum = ssn.substring(0, 6);
		System.out.println(firstNum);

		String secondNum = ssn.substring(7);
		System.out.println(secondNum);

		// 하나의 예시임.파일명이 있는데 뭔지 모르는 상황..!
		// 파일의 확장명을 추출하세요.
		// 확장명의 글자 갯수가 3개라고 확정지으면 안됨. (3, 4, 5 글자일 수도 있음..)
		String fileName = "Hello.World.mp3";
		// 마지막에 위치한 '.'의 위치를 알아내면 됨.
		// lastIndexOf()를 사용한다.
		int ix = fileName.lastIndexOf('.');
		if (ix != -1) {
			String ext = fileName.substring(ix); // '.'을 제외하려면 ix+1을 매개변수로 넣어준다.
			System.out.println(ext);
		}
		// 확장명을 제외한 파일명만 추출하세요.
		int fileNameLength = fileName.length();
		int jum = fileName.lastIndexOf('.');
		if (jum != -1) {
			String str = new String();
			String jumjum = fileName.substring(0, jum);
			System.out.println(jumjum);
		}
	}

}

9. 문자열 앞뒤 공백 잘라내기(trim())

10. 문자열 변환(valueOf()) : 기본 타입 값을 문자열로 변환

11. 특정 문자열로 시작하는지, 끝나는지

- boolean startsWith(String) : URL에서 프로토콜 확인 및 서버 주소 확인시 사용 가능

- boolean endsWith(String) : 파일 확장명 판단시(알고있으면..) 사용 가능

==> 위의 내용은 반드시 교재로 다시 복습하자.. 제대로 못들음..ㅠㅠ 외워야할게 많다..ㅠ

 

 

<Array 클래스>

1. Array

- 배열 조작 기능을 가지고 있는 클래스 : 배열 복사, 항목 정렬, 항목 검색

- 제공하는 정적 메소드(static)

2. 배열 복사

- copyOfRange(원본 배열, 시작 인덱스, 끝 인덱스)

- System.arraycopy()

- Arrays.toString(arr2) -> 엘리먼트 출력(배열 복사, 타입@주소 의 형식으로 나옴.)

 

3. 배열 항목 정렬 (유심히 봐야 함) : 정렬, 검색

- Arrays.sort(배열) - 항목 오름차 순으로 정렬

* 기본 타입이거나 String 배열 자동 정렬

- 사용자 정의 클래스 배열은 Comparable 인터페이스를 구현해야만 정렬

--> 배열 1억개 중에서 일치하는 1개를 찾아내야 함..? : for문으로 다 돌려봐야함. --> 운이 안좋으면 1억개를 다 돌려봐야 할 수도 있음.

 

--> 100개 중 1개의 데이터를 찾아라

--> 보통은 가운데를 기점으로 뭐보다 크고 작은지를 비교해서 찾음.

--> 이렇게 하면 최소 7번만에 찾을 수 있음.

--> 2의 n승으로 찾아낼 수 있음.

 

--> 1억개 중 1개의 데이터를 찾을 때 위의 방법을 이용하면 27번만에 찾을 수 있다고 함. (2의 32승이 40억..)

 

--> 이렇게 사용하기 위해서는 전제조건이 있음. : 정렬이 되어있어야 함.

 

--> 검색속도를 향상시키기 위해서는 정렬이 되어있어야 함!

 

--> 그래서 검색과 정렬을 바로 Array에서 지원을 해줌.

 

<CPU는 크기비교를 어떻게 하나?>

2진수로

숫자1 - 숫자2 => 이렇게 빼기를 한다.

값이 0 : 같음

값이 양수 : 숫자1이 더 큼

값이 음수 : 숫자2가 더 큼

 

implements comparable

int compareTo() ->

this1 - this2

같음 : 0

숫자1이 더 큼 : 1

숫자2가 더 큼 : 2

이렇게 됨

 

4. Arrays 클래스

1. 배열 항목 검색

 

<Wrapper 클래스>

1. 포장(Wrapper) 객체란?

- 기본 타입(byte, char, short, int, long, float, double, boolean) 값을 내부에 두고 포장하는 객체

- 기본 타입의 값은 외부에서 변경 불가

- 포장클래스 : 객체, 기본데이터 타입을 포장하는 형태.

 

2. 박싱(Boxing)과 언박싱(Unboxing)

- 박싱(Boxing) : 기본 타입의 값을 포장 객체로 만드는 과정

- 언박싱(Unboxing) : 포장 객체에서 기본 타입의 값을 얻어내는 과정

 

3. 박싱하는 방법

- 생성자 이용 :  외울 필요는 없음.

- 각 Wrapper 클래스의 valueOf() 메소드 이용

 

4. 자동박싱과 언박싱

- 자동박싱 : 포장 클래스 타입에 기본값이 대입될 경우 발생

- 자동 언박싱 : 기본 타입에 포장객체가 대입될 경우 발생

 

5. 문자열을 기본 타입값으로 변환

- parse + 기본타입명 -> 정적 메소드

Integer.parseInt();

Double.parseDouble();

==> 이거 2가지는 꼭 외우자.

 

Wrapper의 목적

- 제너릭, Collection에서 이 개념이 필요함.

- primitive 데이터 타입을 Reference 데이터 타입으로 운영할때.

 

<Math, Random 클래스>

1. Math 클래스

- 수학 계산에 사용할 수 있는 정적 메소드 제공

 ceil, floor, round 3가지는 기억하자.

-> 언제 써먹을 수 있을까?

-> 게시판을 만들때 게시글이 96개가 있을 때..?

--> 1페이지당 게시글 10개 있을때 총 페이지수 구할때 많이 사용됨.

--> 올림인 Math.ceil()을 쓰면 됨..!

 

<Date, Calendar 클래스>

1. Date 클래스

- 날짜를 표현하는 클래스

- 날짜 정보를 객체간에 주고받을 때 주로 사용

SimpleDateFormat 중요함!!!! 꼭 기억..!!!

--> M은 한개면 홀수 달에는 숫자 1개만 나오고, MM이면 홀수달에 앞에 0이 붙음. (ex: M-9, MM-09)

 

2. Calendar 클래스

- 달력을 표현한 추상 클래스

- OS 에 설정된 시간대(TimeZone) 기준의 Calendar 객체 얻기

Calendar now = Calendar.getInstance(); //Factory Method

- 날짜 및 시간 정보 얻기

int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH);

 

<제네릭 (Generic) -> 오늘 배운 내용 중 가장 중요한 내용임.>

1. 제네릭(Generic) 타입이란?

- '컴파일단계' 에서 '잘못된 타입 사용될 수 있는 문제' 제거 가능

- 타입을 고정시키지 않겠다는 뜻..!

- Object로 줌..

- UpCasting은 상관이 없지만, DownCasting은 에러가 남.

2. 제네릭 타입 사용 여부에 따른 비교

- 제네릭 타입 사용한 경우

* 클래스 선언할 때 타입 파라미터 사용

* 컴파일 시 타입 파라미터가 구체적인 클래스로 변경

 

==> 참조타입만 가능함..! , 그래서 Wrapper 클래스로 구현해야 함

 

- 제너릭의 뜻은 타입을 고정시키지 않고 일반화 시켰다는 뜻임.

- 제너릭을 모르면 API 도큐먼트 해석 어려우므로 학습 필요

- 제너릭 타입은 두 개 이상의 타입 파라미터 사용 가능

 

<제너릭 메소드>

1. 제너릭 메소드

- 매개변수 타입과 리턴 타입으로 타입 파라미터를 갖는 메소드

- 제네릭 메소드 선언 방법

*

*

 

....

 

<컬렉션 프레임워크>

1. 컬렉션 프레임워크(Collection Framework)

- 컬렉션

* 사전적 의미로 요소(객체)를 수집해 저장하는 것

 

- 배열의 문제점

* 저장할 수 있는 객체 수가 배열을 생성할때 결정

->불특정 다수의 객체를 저장하기에는 문제

 

* 객체 삭제했을 때 해당 인덱스가 비게 됨

-> 낱알 빠진 옥수수...

 

 

<List 컬렉션>

아...

00. List 컬렉션의 주요 메소드

- E는 Element

boolean contains(Object o)

boolean remove(Objcet o)

equals, hashcode가 정의된 상태에서 해준다고..? 뭐...?

 

1. ArrayList (제일 많이 쓰임)

- 저장용량(capacity)

* 초키 용량: 10 (따로 지정 가능)

* 저장 용량을 초과한 객체들이 들어오면 자동적으로 늘어남. 고정도 가능

List<String> list = new ArrayList<String>();

 

list<String> list= new ArrayList<String>(); <- 왼쪽은 인터페이스 타입, 

 

- 객체 제거 : 바로 뒤

 

데이터 목록을 만들어야 할 때 거의 ArrayList 를 쓸거임.

 

 

와... 오늘 역대급으로 집중도 안되고... 수업 내용 다놓쳤네 그냥 고진규한테 카톡하지 말걸... 아 짜증나...

아 ㄹㅇ 진짜 개짜증나 뭐 어쩌라금ㅇ나러;민아ㅓㄹㅁ;ㅣㅇ너ㅗ리ㅑ볻라몽;ㅏㅣㄴ러;미ㅏ언라ㅣㅂ쟈디뢰먄이ㅏㅁ;ㅓㄴㅇㄹㅁㄴ이ㅏ;ㅓㄹㅇㄴ머ㅏㅣㅣㅏ;ㅗㅁㄹㄴ아ㅣㅗ;ㅁㄴ어ㅏㅣ;ㄹㄴ이ㅓㅏ;ㅁㅇㄹ나ㅣㅓ;ㅇㄹ마ㅣ;ㅗㄴㅇ리ㅏ;ㅇ러마ㅣ;ㄴ이라ㅓ뱌정랴모니라ㅗ만이러;미ㅗ댱롭지아롬ㄴ;ㅗ리ㅏㅁ놀;ㅣ;ㅓㅏ

반응형
LIST