백엔드/Java의 정석

TIL 정리_12

ran4 2022. 2. 27. 21:51

 

 

 

 

공변 반환타입 (JDK1.5 추가)

오버라이딩할 때 조상 메서드의 반환타입을 자손 클래스의 타입으로 변경을 허용하는 것이다.

Point copy = (Point)original.clone(); ---> Point copy= original.clone();

 

clone()을 이용한 배열 복사

int[] arr = {1,2,3,4,5};
int[] arrClone = arr.clone();
int[] arr = {1,2,3,4,5};
int[] arrClone = new int{arr.length};
System.arraycopy(arr, 0, arrClone, 0, arr.length);

두 코드는 같은 결과를 얻는다

 

java.util 패키지의 다른 클래스들도 이와 같은 방식으로 복제가 가능하다

(Vector, ArrayList, LinkedList, HashSet, TreeSet, HashMap, TreeMap, Calendar, Date)

ArrayList list = new ArrayList();

ArrayList list2 = (ArrayList)list.clone(); 

 

clone()의 얕은 복사와 깊은 복사

얕은 복사 : 객체에 저장된 값을 복제(참조하고 있는 객체 복제X)

깊은 복사 : 원본이 참조하고 있는 객체까지 복제

 

getClass()

자신이 속한 클래스의 Class객체를 반환하는 메서드

파일형태로 저장되어 있는 클래스를 읽어서 Class클래스에 정의된 형식으로 변환하는 것

 

String 클래스

기존의 다른 언어에서는 문자열을 char형으로 다뤘지만 자바에서는 String클래스를 제공한다

문자열을 읽을수는 있지만, 내용변경이 불가능한 불변클래스이다

덧셈 연산자(+)를 이용한 문자열 결합은 성능이 떨어지기 때문에, 

문자열의 결합이나 변경이 잦다면, 내용을 변경가능한 StringBuffer를 사용해야한다

 

문자열의 비교

String str = “abc”;String str = new String(“abc”)의 비교

문자열 리터럴을 만들면 하나의 생성자를 공유하지만, new String();을 사용하면 

항상 새로운 문자열이 만들어진다

등가비교 연산자는 주소비교이기 떄문에 String클래스에서는 equals를 이용해야 한다

 

문자열 리터럴

문자열 리터럴은 프로그램 실행 시 자동으로 생성된다

같은 내용의 문자열 리터럴은 하나만 만들어진다.

 

빈 문자열("", empty string)

내용이 없는 문자열. 크기가 0char형 배열을 저장하는 문자열

String str = “”;

**크기가 0인 배열을 생성하는것은 어느 타입이나 가능하다

 

문자(char)와 문자열(String)의 초기화

String s = “”; //빈 문자열로 초기화

char c = ‘ ’;//공백으로 초기화

 

좋은 코드 나쁜 코드
String str1 = “”;
String str2 = “”;
String str3 = “”;
String str4 = new string(“”);
String str5 = new string(“”);
String str6 = new string(“”);

 

join()과 Stringjoiner

join()은 여러 문자열 사이에 구분자를 넣어서 결합한다

구분자로 문자열을 자르는 split()와 반대의 작업을 한다

String animals = “dog,cat,bear”; 

String[] arr = animals.split(“,”); //문자열을 ‘,’구분자로 나눠서 배열에 저장

String str = String.join(“-”,arr); //배열의 문자열을 '-'로 구분해서 결함 

 

String.format

format()은 형식화된 문자열을 만들어내는 간단한 방법이다

String str = String.format();

System.out.println(str);

 

 

'백엔드 > Java의 정석' 카테고리의 다른 글

TIL 정리_14  (0) 2022.03.01
TIL 정리_13  (0) 2022.02.28
TIL 정리_11  (0) 2022.02.26
TIL 정리_10  (0) 2022.02.25
TIL 정리_09  (0) 2022.02.24