**java.lang.String
1. static String format(String format, Object data...)
=> 서식에 맞추어 데이터를 문자열로 만들어 리턴해주는 메소드
=> System.out.printf와 사용법이 동일(printf : 화면에 출력, format : 문자열을 만들어서 리턴 해주는 메소드)
=> GUI(graphic User Interface - 화면이 있는 인터페이스 : Mac OS, Linux, Windows, Android, iOS등)
- 프로그래밍의 화면에 보여지는 클래스들은 문자열이나 이미지만 출력할 수 있음
- 문자열이 아닌 데이터들은 문자열로 변환을 해야만 출력이 가능
=> 문자열이 아닌 데이터 1개를 숫자로 변환 : toString메소드
=> 문자열 + 문자열 = 문자열문자열 -> "ab" + "gh" = "abgf";
=> 문자열 + 숫자 = 문자열숫자(문자열) -> "gg" + 5 = "gg5";
- 위 3가지 방식으로 문자열을 만들수 있지만 위의 방식은 서식설정 불가
- 서식에는 자릿수 확보, 맞춤, 숫자데이터의 경우 빈자리에 0을 추가해 주는 것등이 있음
- 이 메소드 이외의 방법으로 자바에서는 java.text 패키지에 있는 Format클래스를 이용
=> 서식 : %다음에 숫자와 영문자 1개로 설정
%숫자d : 정수를 숫자 만큼의 자리로 생성(f: 실수, b: boolean, c: char, s: String - 인스턴스명 매핑시 toString 호출
- default : 숫자는 오른쪽 맞춤, 문자열은 왼쪽 맞춤
- 데이터의 길이보다 작은 숫자를 설정시 설정된 숫자는 무시
- 정수 데이터의 경우 숫자 앞에 0을 붙이면 앞 빈자리에 0을 추가( %03d -> 12 : 012)
- 소수 자릿수보다 아래자리에서는 반올림(default : 소수 6째자리)
- 전체 자릿수를 생략하고 .소수 자릿수만 입력하기도 함
2. Encoding
=> Encoding : 데이터가 메모리에 저장되는 형태로 변환하는 것
=> Decoding : 메모리에 저장된 값들을 사용하기 위해서 변환하는 것
- 'A' -> 65 : Encoding(암호화라고 번역하기도 함)
- 65 -> 'A' : Decoding(복호화라고 번역하기도 함)
=> 영문, 숫자, 키보드내 특수문자는 전세계 모든 운영체제에서 인코딩, 디코딩 방식이 동일
- 한글같이 영문이 아닌 문자들은 인코딩 방식이 여러개 존재 할 수 있음
- 인코딩 방식이 다르면 해석시 다른문자로 해석(출력시 글자가 깨짐)
=> 한글 인코딩 방식 : Ms949(cp949 - MS-Window), EUC-KR : web에서 한글 표션, UTF-8 : 전세계 모든 문자 표현,
iso-8859-1(iso-latin-1):서유럽
=> byte[] getBytes() : 문자열을 byte 배열로 리턴 해주는 메소드
- 이 메소드에 문자열로 인코딩 방식을 대입하면 인코딩 방식으로 바이트 배열을 생성하여 리턴
=> byte 배열을 가지고 문자열을 생성 - new String(byte[] bytes, String enctype)
//면접전에 읽어볼거(call by value, call by referance 차이 / StringBuilder / 다형성 등)
3. StringBuilder
=> String의 문제점을 해결하기 위해서 등장한 클래스(메모리 낭비 절감)
=> String에 Literal을 저장하면 데이터가 static 영역에 저장됨(static영역의 데이터는 변경 불가)
- '+'연산을 이용해 결합시 복사 작업이 발생(메모리 낭비)
=> 해당 메소드는 여분의 공간을 가지고 인스턴스가 만들어져 문자열 추가시 복사작업을 하지 않음
=> 문자열 추가시 void append(String str)을 이용
=> 다시 원래의 문자열로 되돌릴때는 toString()을 호출
=> 최근의 자바버전에서는 String사용시, StringBuilder처럼 동작하기 때문에 StringBuilder를 이용하지 않아도 됨
**Generics
=> 자료형을 미리 지정하지 않고 인스턴스를 만들때 지정하여 사용하는 것(==템플릿프로그래밍)
=> 동일 알고리즘을 사용하는 경우, 데이터의 종류로 인해 별도의 메소드를 만드는 번거로움을 없애기 위해 사용
(최근 등장하는 언어의 경우 대부분 지원)
=> 자료구조 클래스에 이용되는 경우가 많음
1. 클래스 생성
=> 형식 : class 클래스명 <미지정 자료형명 나열>{ (클래스 내용) (미지정 자료형 사용) }
2. 인스턴스 생성
=> 형식 : 클래스명 <실제 자료형> 변수 = new 클래스명 <실제 자료형>();
(v1.7 부터는 인스턴스 생성시 자료형 생략 가능 - new 클래스명<>();)
3. 인스턴스 생성시 실제 자료형 미기재시 Object로 간주
4. 실제 자료형은 참조형만 가능(기본형 X)
=> boolean, byte, short, char, int, long, float, double는 안됨
(Boolean, Byte, Short, Character, Integer, Long, Float, Double로 설정)
**java.util 패키지
=> Data Structure(자료구조) : 여러개의 데이터 저장시, 어떤 방법으로 저장 및 사용할 것인지
- 자료구조를 제대로 선택하지 않으면 알고리즘도 제대로 동작하지 못함
=> 자료구조는 List, Set, Map(Dictionary)로 구분
=> Java에서는 자주 사용하는 자료구조를 클래스나 인터페이스 형태로 제공(각 구조의 특성 이해가 필요)
- 장점보다는 단점을 기억하여 선택하는 것이 용이
=> 코딩테스트를 하는 기업지원시 자료구조는 학습이 마아아않이 필요!
=> List : 배열(Array-Dense List), Vector(ArrayList), LinkedList, Stack, Queue, Deque 등
=> Set : 데이터를 중복없이 해싱을 이용하여 저장
=> Map : 데이터를 Key(Name)와 Value쌍으로 저장
1. 배열(Array)
=> 동일한 자료형으로 만들어진 데이터들의 연속적인 모임
=> 한번 생성시 크기 변경 불가
1) 장점 : 메모리 낭비가 없음
2) 단점
=> 데이터를 삽입, 삭제시 복사 작업을 이용하여 수행
=> 연속된 빈 공간이 없으면 생성 불가
3) 생성
=> 처음부터 데이터가 존재하는 경우 - 공부할때만 사용
자료형[] 배열명 = {데이터 나열};
=> 데이터를 다른 곳에서 가져와서 생성
자료형[] 배열명 = new 자료형[데이터 개수];
배열명[인덱스] = 데이터;
4) 배열의 데이터 접근
=> 배열명[인덱스] //읽기
=> 배열명[인덱스] = 데이터 //데이터 변경
=> 인덱스는 0부터 시작하고 갯수-1까지, 인덱스가 잘못되면 ArrayOutOfBoundsExecption발생
5) 배열의 데이터 갯수 : 배열명.length
6) 배열 데이터를 전체 접근
=> 일반 반복문 사용 : for(int i = 0; i<size; i+=1){ ar[i]; }
=> 빠른 열거 이용 - 대부분 이 방법 사용 for-each라고도 함
for(int temp : ar){ temp; }
2. java.util.Arrays
=> 배열과 관련된 작업을 위한 메소드를 소유한 클래스
1) sort : 정렬을 해주는 메소드
=> 정렬 : 데이터를 순서대로 나열
=> 정렬 방식 : 오름차순(ascending - 작은것에서 큰 것 순으로 배치, 기본)
내림차순(descending - 큰 것에서 작은것 순으로 배치)
=> 정렬 알고리즘 : 정렬 방법에 따른 분류
- selectionsort : 선택정렬
- bubble sort : 버블 정렬
==> 여기까지는 제어문 연습을 위해 수행
- insertion sort : 삽입 정렬
- quick sort
==> 면접 보러갈때는 여기 정도까지
- heap sort
- merge sort
- radix sort
=> 정렬의 목적 : 데이터를 순서대로 나열하여 검색을 빠르게 하기 위해
=> static void sort(Object[] ar) : Comparable 인터페이스를 implements한 데이터의 배열이어야 함
(Comparable : 크기비교가 가능한 메소드를 소유한 인터페이스)
- Comparable 인터페이스를 implements 하지 않은 클래스의 인스턴스 배열 정렬을 위해서는
static void sort(Object[] ar, Comparable <> comp) 메소드를 이용
- Comparator 인터페이스를 implements한 클래스의 인스턴스를 매개변수로 1개 더 대입하면 됨
- Comparator 인터페이스를 가지고 인스턴스를 만들때 1개의 자료형을 설정해야 하고 메소드에 양수를 리턴하
면 앞의 데이터를 뒤로 배치하고 음수를 리턴하면 앞의 데이터를 앞에 배치
- 숫자데이터는 뺄셈을 이용하고 String과 Data는 compareTo 메소드를 이용하여 크기를 비교함
1. 순차 검색(sequential search) : 처음부터 끝까지 조회
2. 제어 검색() : 데이터 정렬후 검색(없을 경우 음수 반환)
1) binarySearch(이분 검색) : 작으면 왼쪽, 크면 오른쪽(중앙과 비교)
2) Fibonacci search(피보나치 검색) :
3) 보간 검색 : 데이터가 균등하지 않으면 별로 안좋음
4) binaryTree 검색 : 작으면 왼쪽 트리, 크면 오른쪽 트리
3. 블럭 검색 : 블럭은 정렬이 되어있지만 내부는 안되있음
4. 해싱(hashing) : 위의 방식들은 찾는 시간이 자료에따라 제각각이지만 이 방식은 모든 접근시간이 같음(가장 빠른 방식)
'수업 정리' 카테고리의 다른 글
16일차 수업정리(Set, Map) (0) | 2020.04.28 |
---|---|
15일차 수업 정리(ArrayList, LinkedList, 자료구조) (0) | 2020.04.27 |
13일차 수업정리(java.lang 패키지) (0) | 2020.04.23 |
12일차 수업 정리(Exception, Debug, try~catch) (0) | 2020.04.22 |
11일차 수업 정리(Nested Class, Singleton, Sort) (0) | 2020.04.21 |