14일차 공부 String, 서식, StringBuilder, Generic, Array, Bubble sort, 정렬
1 교시
**java.lang.String
static String format(String format,Object data...)
=> 서식에 맞추어서 데이터를 문자열로 만들어서 리턴해주는 메소드
=> System.out.printf 와 사용방법이 동일한테 printf는 화면에 출력을 해주는 메소드이고 format은 문자열을 만들어서 리턴해주는 메소드
=> GUI(Graphic User Interface - 화면에 있는 인터페이스 : Mac OS, Linux, Windows, Android, iOS 등) 프로그래밍의 화면에 보여지는 클래스들은 문자열이나 이미지만 출력할 수 있다.
문자열이 아닌 데이터들은 문자열로 변환을 해야만 출력이 가능
=> 문자열이 아닌 데이터 1개를 숫자로 변환 : toString 메소드
=> 문자열과 문자열을 + 하면 문자열을 결합해서 리턴
=> 문자열과 숫자 데이터를 + 하면 숫자 데이터를 문자열로 만들어서 결합한 후 리턴
위의 3가지 방식으로 문자열을 만들어도 되지만 위으 방식들은 서식을 설정하지 못한다.
서식에는 자릿수 확보 그리고 맞춤 그리고 숫자 데이터의 경우 빈 자리에 0을 추가하는 것 등이다.
이 메소드 이외의 방법으로 자바에서는 java.text 패키지에 있는 Format클래스를 이용하면 된다.
=> 서식 : %다음에 수샂와 영문자 1개로 설정
%숫자d : 정수를 숫자만큼의 자리로 생성
%숫자f : 실수
%숫자b : boolean
%숫자c : char
%숫자s : String - 인스턴스 이름으로 매핑하면 toString 호출해서 매칭
기본적으로 숫자는 오른쪽 맞춤을 하고 문자열은 왼쪽 맞춤을 한다.
데이터의 길이보다 작은 숫자를 설정하면 설정한 숫자는 무시된다.
정수 데이터의 경우 숫자앞에 0을 붙이면 앞에 빈자리에 0을 추가해준다.
%03d -> 12 는 012로 출력
실수 데이터의 경우는 전체자리수.소수자리수 형태로 설정하는 것이 가능
소수 자리수보다 아래 자리에서는 반올림한다. 기본은 소수 6자리 이다.
%10.3f : 2.87667 -> 2.877
전체 자릿수를 생략하고 .소수자리수 만 입력하기도 한다.
지금은 콘솔에 출력하기 때문에 printf를 이용하지만 GUI 프로그램에서는 뷰에 텍스트를 설정하기 때문에 문자열 데이터를 대입하는 구조로 출력을 한다.
2. Encoding
=> Encoding : 데이터가 메모리에 저장되는 형태로 변환하는 것
=> Decoding : 메모리에 저장된 값들을 사용하기 위해서 변환하는 것
'A' -> 65 : Encoding (암호화라고 변역하기도 함)
65 -> 'A' : Decoding (해독화라고 번역하기도 함)
=> 영문과 숫자 그리고 키보드에 있는 특수문자는 전 세계 모든 운영체제에서 인코딩과 디코딩하는 방법이 같다.
한글처럼 영문이 아닌 문자들은 인코딩 방식이 여러 개 존재할 수 있다.
인코딩 방식이 다르면 해석할 때 다른 문자로 해석을 해서 글자가 깨진다.
=> byte [] getBytes() : 문자열을 byte 배열로 리턴해주는 메소드
이 메소드에 문자열로 인코딩방식을 대입하면 인코딩 방식으로 바이트 배열을 생성해서 리턴
=> byte 배열을 가지고 문자열을 생성 -new String(byte [] bytes. String enctype)
3. StringBuilder
=> String의 문제점을 해결하기 위해서 등장한 클래스
=> String에 Literal을 저장하면 데이터가 static 영역에 저장된다.
static영역의 데이터는 변경이 안된다.
+ 연산을 이용해서 결합을 하게되면 복사작업이 발생한다.
메모리 낭비가 발생할 수 있다.
=> 메모리 낭비를 줄이기 위해서 등장한 클래스가 StringBuilder
=> 이 메소드는 여분의 공간을 가지고 인스턴스가 만들어져서 문자열을 추가할 때 복사작업을 하지 않는다.
=> 문자열을 추가할 때는 void append(String str)을 이용한다.
=> 다시 원래의 문자열을 되돌릴 때는 toString()을 호출한다.
=> 최근의 자바버전에서는 String을 사용해도 StringBuilder 처럼 동작하기 때문에 StringBuilder를 이용하지 않아도 된다.
4 교시
**Generics
=> 자료형을 미리 지정하지 않고 인스턴스를 만들 때 지정해서 사용하는 것으로 템플릿 프로그램밍이라고 한다.
=> 동일한 알고리즘을 사용하는 경우에 데이터의 종류 때문에 별도의 메소드를 만드는 번거로움을 없애기 위해서 사용
최근에 등장하는 언어에서는 거의 대부분 지원
=> 자료구조 클래스에 이용되는 경우가 많다.
1. 클래스 생성
class 클래스이름 <미지정자료형이름 나열>{
클래스 내용
미지정 자료형 사용
}
2. 인스턴스 생성
클래스 이름 <실제 자료형> 변수 = new 클래스이름 <실제 자료형>();
1.7 버전부터는 인스턴스를 만들 때 자료형 생략이 가능
new 클래스이름<>();
3. 인스턴스를 생성할 때 실제 자료형을 기재하지 않으면 Object로 간주한다.
4. 실제 자료형은 기본형은 안되고 참조형만 가능하다.
boolean, byte, short, char, int, long, float, double은 안된다
Boolean, Byte, Short, Char, Int, Long, Float, Double 로 설정해야 한다.
수정
** java.util 패키지
=> Data Structure (자료구조) : 여러 개의 데이터를 저장할 때 어떤 방법으로 저장하고 사용할 것인가 하는 것.
자료구조를 제대로 선택하지 않으면 알고리즘도 제대로 동작을 하지 못한다.
=> 자료구조는 List, Set, Map(Dictionary)으로 구분
=> Java에서는 자주 사용하는 자료구조는 클래스나 인터페이스 형태로 제공을 하기 때문에 각 자료구조의 특성을 아는 것이 중요하다.
장점보다는 단점을 기억해야 한다.
=> 코딩 테스트를 하는 기업을 지원할려고 하면 자료구조는 학습을 더 많이 해야한다.
=> List : 배열(Array - Dense List), Vector(Array List), LinkedList, Stack, Queue, Deque 등
=> Set : 데이터를 중복없이 해싱을 이용해서 저장
=> Map : 데이터를 Key(Name)와 Value쌍으로 저장
1. 배열(Array)
=> 동일한 자료형으로 만들어진 데이터들의 연속적인 모임
=> 한 번 생성되면 크기 변경이 안됨
1) 장점
=> 메모리 낭비가 없다.
2) 단점
=> 데이터를 삽입하거나 삭제할 때 복사 작업을 이용해서 수행한다. (크기변경이 안되기 때문)
=> 연속된 빈 공간이 없으면 생성할 수 없다.
3) 배열 생성
=> 처음부터 데이터가 존재하는 경우 - 공부할 때만 사용
자료형 [ ] 배열이름 = {데이터 나열};
=> 데이터를 다른 곳에서 가져와서 생성
자료형 [ ] 배열이름 = new 자료형[데이터 개수];
배열이름[인덱스] = 데이터;
4) 배열의 데이터 접근
=> 배열이름[인덱스] //읽기
=> 배열이름[인덱스] = 데이터 //데이터를 변경
인덱스는 0부터 시작하고 개수-1 까지 이다.
인덱스가 잘못되면 ArrayOutOfBoundsException이 발생한다.
5) 배열의 데이터 개수
배열이름.length
6) 배열의 데이터를 전체 접근
int [ ] ar = {10, 20, 30};
=> 일반적인 반복문을 이용
int size = ar.length;
for(int i=0; i<size; i+i+1) {
ar[i];
}
=> 빠른 열거 이용 - 대부분 이 방법 이용하고 for ~ each 라고도 한다.
for(int temp : ar) {
temp;
}
5 교시
2. java.util.Arrays 클래스
=> 배열과 관련된 작업을 위한 메소드를 소유한 클래스
1) sort : 정렬을 해주는 메소드
=> 정렬 : 데이터를 순서대로 나열하는 것
=> 정렬방식 : 오름차순(ascending - 작은 것에서 큰 것 순으로 배치, 기본)과 내림차순(descending - 큰것에서 작은것 순으로 배치)
정렬 알고리즘 : 정렬하는 방법에 따른 분류
- selection sort : 선택방법
- bubble sort : 버블정렬 서로 인접한 두 원소를 검사하여 정렬하는 알고리즘
인접한 2개의 레코드를 비교하여 크기가 순서대로 되어 있지 않으면 서로 교환한다.
버블 정렬은 첫 번째 자료와 두 번째 자료를, 두 번째 자료와 세 번째 자료를, 세 번째와 네 번째를, … 이런 식으로 (마지막-1)번째 자료와 마지막 자료를 비교하여 교환하면서 자료를 정렬한다.
1회전을 수행하고 나면 가장 큰 자료가 맨 뒤로 이동하므로 2회전에서는 맨 끝에 있는 자료는 정렬에서 제외되고, 2회전을 수행하고 나면 끝에서 두 번째 자료까지는 정렬에서 제외된다. 이렇게 정렬을 1회전 수행할 때마다 정렬에서 제외되는 데이터가 하나씩 늘어난다.
https://gmlwjd9405.github.io/2018/05/06/algorithm-bubble-sort.html
=> 여기까지는 제어문 연습을 위해서 수행
- 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, Comparator <> comp) 메소드를 이용
Comparator 인터페이스를 implements 한 클래스의 인스턴스를 매개변수로 1개 더 대입하면 된다.
Comparator 인터페이스를 가지고 인스턴스를 만들 때 1개의 자료형을 설정해야 하고 메소드에 양수를 리턴하면 앞의 데이터를 뒤로 배치하고 음수를 리턴하면 앞의 데이터를 앞에 배치해야 한다.
숫자 데이터는 뺄셈을 이용하고 String과 Date는 compareTo라는 메소드를 이용한다.
2) binarySearch : 이분검색을 수행해주는 메소드
6 교시
잘안됨.
7 교시
노트필기
검색
8 교시