일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- gradle
- lightsail
- vue
- Docker
- 알고리즘
- REACT
- 맥길대학교
- 에러
- jsp
- nginx
- 메서드
- 현장학습
- ES6
- 스프링
- jQuery
- spring
- SpringBoot
- arraylist
- jpa
- 자바스크립트
- aws
- 글로벌
- vue.js
- Keycloak 17.0.1
- JavaScript
- java
- keycloak
- 인텔리제이
- json
- Flutter
- Today
- Total
korean IT student
JAVA-요약 본문
JAVA
클래스
인스턴스
클래스 메서드(static 메서드) 와 인스턴스 메서드
오버로딩(하나의 클래스에 같은 이름의 메서드를 여러 개 정의하는 것)
- 메서드 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
상속(inheritance)-기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다,
오버라이딩(overriding)-조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것
super()- 조상 클래스의 생성자를 호출
instanceof연산자
-참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 instanceof연산자를 사용한다.
제어자(modifier-클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다.)
접근 제어자 -public, protected(자손클래스까지), private(같은클래스), default(같은클래스, 같은 패키지)
static- static메서드 내에서는 인스턴스멤버들을 직접 사용할 수 없다.
final- 변수에 사용되면 값을 변경할 수 없는 상수가 되며, 메서드에 사용되면 오버라이딩을 할 수 없게 되고 클래스에 사용되면
자신을 확장하는 자손클래스를 정의하지 못하게 된다.
다형성(polymorphism)-조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 하였다.
반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수는 없다.
추상클래스(abstract class)- 강제로 부모클래스에서 자식클래스에게 메소드를 강제로 재정의(override) 하게 할수 있다.
-추상메소드가 많으면 클래스명위에 ctrl +1 하면 자동으로 오버라이드가 된다
abstract가 사용될 수 있는 곳-클래스,메서드
instanceof연산자-참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 사용한다
여러 종류의 객체를 배열로 다루기-
vector()-10개의 객체를 저장할 수 있는 vector인스턴스를 생성한다. 10개 이상의 인스턴스가 저장되면, 자동적으로 크기가 증가
인터페이스(interface)-오직 추상메서드와 상수만을 멤버로 가질 수 있다, 다중상속 implements
class 대신 interface 사용, 클래스와 같이 접근제어자로 public or default를 사용할 수 있다.
익명 클래스(anonymous class)-이름이 없는 클래스
예외처리(exception handling)-프로그램 실행 시 발생할 수 있는 예기치 못한 예외의 발생에 대비한 코드를 작성하는 것, 갑작스런 비정상 종료를 막고, 정상적인 실행상태를 유지할 수 있도록 하는 것
try ~catch
finally -무조권 실행
throws-예외를 발생시킨 호출 쪽으로 예외를 던져버리는 방식 ex) interface throws Exception ,void method throws Exception
e.getMessage() -어떠한 오류가 있는지 나타낸다.
e.printstacktrace()
java.lang패키지
Object 클래스
-equals(Object obj) -매개변수로 객체의 참조변수를 받아서 비교하여 그 결과를 boolean값으로 알려 주는 역할을 한다.
두 개의 참조변수가 같은 객체를 참조하고 있는지, 즉 두 참조변수에 저장된 값(주소값)이 같은지를 판단하는
기능밖에 할 수 없다
-hashCode()- 해싱기법에 사용되는 해시함수를 구현한 것이다.
-toString()- 인스턴스에 대한 정보를 문자열(String)로 제공할 목적으로 정의한 것이다. 적절한 오버라이딩이 필요하다.
public String toString(){
return
}
-clone()-단순히 인스턴스변수의 값만을 복사 shallow copy, deep copy
-getClass() - class객체를 이용해서 객체 생성 ex) Card c =Card.class.newInstance(); 예외처리가 필요하다.
String클래스
-string의 경우만 객체데이터 이지만, 기초데이터처럼 사용할 수 있다. String string ="hi"; String string = new String("hi");
-str1.concat(str2) :문자열 연결, substring(3):문자열 자르기, length():문자열 길이, toUpperCase():대문자로 만들기,
toLowerCase(): 소문자로 만들기,charAt(3):특정위치의 글자 찾기,indexOf('c'):특정문자열의 위치, equals(str2): 문자열 비교,
trim(): 문자열 공백제거, replace('a,z'): 특정문자 변경
-string의 문제점- 메모리를 과소비 한다. 처음 초기화된 데이터에 변화가 생기면 기존 것을 재활용 하기보다는 새것을 찾는다.
속도적인 측면에서 더욱 개선된 StringBuffer와 StringBuilder 둘다 같다 bulider 속도 면에서 좀 더빠르다.
인스턴스를 생성할 때 지정된 문자열을 변경할 수 있다.
생성법: StringBuilder stringbuilder =new StringBuilder("abcde");
stringbuilder.append():문자열 추가, insert(3,'aaa'): 특정 위치에 문자열 추가, delete(3,5):문자열삭제,
deleteCharAt(10): 특정 문자 하나 삭제
래퍼(wrapper)클래스 -기본형 변수도로 객체로 다뤄야 하는 경우
오토 박싱 (autoboxint) 과 언박싱(unboxing) -기본형 값을 래퍼 클래스의 객체로 자동 형변환 해주는것
컬렉션 프레임웍(Collection Framework)
-데이터 군을 저장하는 클래스들을 표준화한 설계
-자료구조,배열
Collection인터페이스(List와 Set의 조상)
-컬렉션 클래스에 저장된 데이터를 읽고, 추가하고 삭제하는 등 컬렉션을 다루는데 가장 기본적인 메서드들을 정의
List인터페이스
-중복을 허용하면서 저장순서가 유지되는 컬렉션을 구현하는데 사용된다
Set인터페이스
-중복을 허용하지 않고 저장순서가 유지되지 않는 컬렉션 클래스를 구현 (HashSet,TreeSet)
Map인터페이스
-키와 값을 하나의 쌍으로 묶어서 저장하는 컬렉션 클래스를 구현하는 데 사용된다.
-Map.Entry는 Map인터페이스의 내부 인터페이스이다.
Map에 저장되는 key-value쌍을 다루기 위해 내부적으로 Entry인터페이스를 정의되어 있다. 객체지향적으로 설계하도록 유도하기 위한 것으로 Map인터페이스를 구현하는 클래스에서는 Map.Entry인터페이스도 함께 구현해야한다.
ArrayList
-List인터페이스를 구현하기 때문에 데이터 저장순서가 유지되고 중복을 허용한다는 특징을 갖는다.
LinkedList
-데이터를 읽어오는데 걸리는 시간이 가장 빠르다.
-크기를 변경할 수 없다.(새로운 배열을 생성해서 데이터를 복사하는 작업이 필요, 메모리 낭비가 있다.
-비순차적인 데이터의 추가 또는 삭제에 시간이 많이 걸린다.
-링크그 리스트는 이동방향이 단방향이기 때문에 다음 요소에 접근은 쉽지만 이전요소에 대한 접근이 어렵다. 이 점을
보완한 것이 더블 링크드 리스트(double linked list) 단순히 링크드 리스트에 참조변수를 하나 더 추가하여 이전 요소에 대한 참조가
가능하도록 했을 뿐, 그 외에는 링크드 리스트와 같다.
Stack과 Queue
-스택은 마지막에 저장한 데이터를 가장 먼저 꺼내게 되는 (Last In First Out)구조(예-수식계산, 수식괄호검사,undo/redo, 웹 뒤로/앞으로
-큐는 처음에 저장한 데이터를 가장 먼저 꺼내게 되는 (First In First out)구조(예-최근사용문서, 인쇄작업 대기목록, 버퍼
Iterator
-컬렉션에 저장된 요소들을 읽어오는 방법을 표준화하였다.
-Collection인터페이스에 정의된 메서드이므로 Collection인터페이스의 자손인 List와 Set에도 포함되어 있다.
-컬렉션 클래스에 대해 iterator()를 호출하여 Iterator를 얻은 다음 반복문, 주로 While문을 사용해서 컬렉션 클래스의 요소들을 읽어 올 수 있다.
-boolean hasNext() 읽어 올 요소가 남아있는지 확인한다. 있으면 true 없으면 false 반환
-Object next() 다음 요소를 읽어 온다 .next()를 호출하기 전에 hasNext()를 호출해서 읽어 올 요소가 있는지 확인하는 것이 안전
-void remove() next()로 읽어 온 요소를 삭제한다.
-Map인터페이스를 구현한 컬렉션 클래스는 키와 값을 쌍으로 저장하고 있기 때문에 직접 호출할 수 없고, keySet()이나
entrySet()과 같은 메서드를 통해서 키와 값을 각각 따로 Set의 형태로 얻어 온 후에 다시 iterator()를 호출 해야 된다.
HashSet
-Set인터페이스를 구현한 가장 대표적인 컬렉션이며, Set인터페이스의 특징대로 HashSet은 중복된 요소를 저장하지 않는다.
-새로운 요소를 추가할 때는 add메서드나 addAll메서드를 사용 중복된 요소를 추가하고자 한다면 false를 반환함으로써 실패 알림
TreeSet
-이진 검색 트리라는 자료구조의 형태로 데이터를 저장하는 컬렉션 클래스
-Set인터페이스를 구현했으므로 중복된 데이터의 저장을 허용하지 않으며 정렬된 위치에 저장하므로 저장순서를 유지하지도 않는다.
HashMap
-Map의 특징, 키와 값을 묶어서 하나의 데이터(entry)로 저장한다는 특징
-해싱을 사용하기 때문에 많은 양의 데이터를 검색하는데 있어서 뛰어난 성능을 보인다.
TreeMap
-이진검색트리의 형태로 키와 값의 쌍으로 이루어진 데이터를 저장한다. 검색과 정렬에 적합한 컬렉션 클래스이다.
지네릭스(Generics)
-장점: 타입 안정성을 제공한다, 코드 간결해 진다.
-객체의 타입을 미리 명시해줌으로써 번거러운 형변환을 줄여준다.
ex)
class Box<T>{}
Box<String> box =new Box<String>();
-제한된 지네릭 클래스
class box<T extends Fruit> //Fruit의 자손만 타입으로 지정가능
-와일드 카드
-제네릭 타입을 매개값이나 리턴 타입으로 사용할 때 구체적인 타입 대신 와일드 카드를 다음과 같이 세 가지 형태로 사용할 수 있습니다.
<? extends T> T와 그 자손들만 가능
<? super T> T와 그 조상들만 가능
<?> 모든 타입이 가능
열거형(enums)
- enum 열거형이름{상수명1,상수명2,...}
애너테이션(annotation)
-소스코드의 주석에 소스코드에 대한 정보를 저장하고, 소스코드의 주석으로부터 HTML문서를 생성해내는 프로그램을 만들어서 사용
-@Override 컴파일러에게 오버라이딩하는 메서드라는 것을 알린다.
-@Deprecated 앞으로 사용하지 않을 것을 권장하는 대상에 붙인다.
-@SuppressWarnings 컴파일러의 특정 경고메시지가 나타나지 않게 해준다.
스레드(멀티스레드)
-하나의 프로세스에서 다시 여러 가지 일을 하는 것(동일안 채팅 프로그램에서 파일전송과 채팅을 동시에 하고 있는 것
-스레드는 두 가지 형태로 존재. 하나는 객체 하나를 n개의 스레드가 공유 하는 방식이고, 또 다른 하나는 객체 하나당 하나의 스레드가 존재하는 방식
-Runnable 인터페이스 구현을 통한 Thread ,Thread 클래스를 상속 통한 Thread
run()메소드를 오버라이드 해야한다.
Runnable 인터페이스 재사용성이 높고 코드의 일관성을 유지할 수 있기 때문에 보다 객체지향적인 방법
쓰레드의 실행 -start()를 호출해야만 쓰레드가 실행된다. 하나의 쓰레드에 대해 한 번만 호출될 수 있다.
start()는 새로운 쓰레드가 작업을 실행하는데 필요한 호출스택을 생성한 다음에 run()을 호출해서, 생성된 호출스택에 run()이
첫 번째로 올라가게 한다.
-데몬 쓰레드
일반 쓰레드가 모두 종료되면 데몬 쓰레드는 강제적으로 자동 종료
setDaemon(boolean on)
-synchronized 먼저 수행되는 스레드의 모든작업이 끝날때까지 다른 스레드는 기다린다.
-wait(), notify(), notifyAll()
wait()-객체의 lock을 풀고 해당 객체의 쓰레드를 waiting pool에 넣는다.
notify()-waiting pool에서 대기중인 쓰레드 중의 하나를 깨운다.
Object에 정의되어 있다.
동기화 블록내에서만 사용할 수 있다.
보다 효율적인 동기화를 가능하게 한다.
입출력(I/O)란
-입력과 출력을 뜻한다.
-컴퓨터에 입력하는 것이 Input이며, 컴퓨터가 어떤 것을 출력하는 것을 Output이다.
-InputStream,OutputStream(이미지, 동영상등의 데이터에 주로 사용 1byte)
-Reader,Writer(문자열에 주로 사용 2byte)
-문자데이터를 입출력할 때는 바이트기반 스트림 대신 문자기반 스트림을 이용하자.
-InputStream
데이터를 읽어온다.
InputStream(추상)클래스를 이용해서 객체를 만든다. 또는 다른 클래스의 메소드에서 반환되는 타입 객체를 쓴다.
read()메소드를 이용해서 데이터를 읽으면 된다. 1byte씩 읽는다 읽을 것이 없을땐 -1을 반환한다.
read(byte[])- byte[]만큼씩 읽는다 속도가 빠르다.
-OutputStream
데이터를 쓴다.
OutputStream 클래스를 이용해서 객체를 만든다.
write()메서도를 이용해서 데이터를 읽는다.
write(), write(byte[]), write(byte[], int,int) 세개의 메소드를 이용
write(byte[], int,int)는 데이터를 원하는 위치에서 원하는 숫자만큼 쓸 수 있다
-보조 스트림
스트림 기능을 보완하기 위한 보조스트림 제공
보조 스트림만으로는 입출력을 처리할 수 없고, 스트림을 먼저 생성한 다음에 이를 이용해서 보조스트림을 생성해야한다.
BufferedInputStream/BufferedReader 바이트기반/문자기반
BufferdOutputStream/BufferedWriter 버퍼를 이용한 입출력 성능향상
DataInputStram,DataOutputStram - 문자열 읽고, 쓰기
-byte단위로 문자열을 처리하는 InputStram,OutputStram 보다 편리하게 고안된 클래스
-데이터를 읽고 쓰는데 있어서 byte단위가 아닌, 8가지 기본 자료형의 단위로 읽고 쓸 수 있다는 장점이 있다.
BufferedInputStream,BufferdOutputStream
-한 바이트씩 입출력하는 것 보다는 버퍼(바이트배열)를 이용해서 한 번에 여러 바이트를 입출력하는 것이 빠르기 때문에 대부분 입출력 작업에 사용된다.
BufferedReader의 readLine()을 사용하면 데이터를 라인단위로 읽어 올 수 있다.
BufferedWriter의 newLine()라는 줄바꿈 해주는 메서드를 가지고 있다.
InputStreamReader/OutputStreamWriter 바이트기반스트림을 문자기반 스트림으로 연결시켜주는 역할을 한다. 그리고 바이트기반 스트림의 데이터를 지정된 인코딩의 문자데이터로 변환하는 작업을 수행.
PrintStream
-데이터를 기반스트림에 다양한 형태로 출력할 수 있는 pirnt, println, printf와 같은 메서드를 오버로딩하여 제공하다.
-다양한 언어의 문자를 처리하는데 적합하기 때문에 가능하면 PrintWriter를 사용하는 것이 좋다.
-printStream(OutputStram out, true/false) autoflush의 값을 true로 하면 println메서드가 호출되거나 개행문자가 출력될 때 자동으로
flush된다. 기본 값은 false이다.
RadomAccessFile
-하나의 클래스로 파일에 대한 입력과 출력을 모두 할 수 있도록 되어 있다.
-가장 큰 장점은 파일의 어느 위치에나 읽기/쓰기가 가능하다는 것이다.
직렬화(Serialization)
-객체를 데이터 스트림으로 만드는 것을 뜻한다.
-직렬화(스트림에 객체를 출력)에는 ObjectOutputStream을 사용하고 역직렬화(스트림으로 부터 객체를 입력)에는 ObjectInputStream을 사용한다.
-InputStream과 OutputStream을 직접 상속받지만 기반스트림을 필요로 하는 보조스트림이다.
JAVA 입출력 API(Input~, Output~)
-예외 처리와 무조건 close()실행
-I/O 예외처리를 강제성( try ~catch ,throws)
JAVA 네트워크
-InetAddress -호스트의 IP주소를 비롯한 네트워크상의 정보를 얻어오는 클래스 입니다.
-URLConnection
URL클래스: DNS를 통한 IP정보를 이용하여, URL객체를 만든 후 네트워크 접속 및 URL정보를 얻어온다.
URLConnection 클래스: 추상클래스로 URL객체로부터 생성.URL클래스의 openConnection()메소드를 이용
socket
-InputStram과 OutputStram을 가지고 있다. 그러므로 자손을 쓸수 있다.
-네트워크상에서 서로 다른 호스트 사이의 통신을 위한 수단
1.Server에서 ServerSocket을 만들고, 클라이언트의 요청을 기다림
2.Client에서 Socket을 만들고, I/O Stream을 만들어 Server로 요청을 함
3. Server에서 Client의 요청을 받아 Socket을 만들고, I/O Stream을 만듦
4.통신함
5.Socket 닫음.
ServerSocket
-포트와 연결되어 외부의 연결요청을 기다리다 연결요청이 들어오면, Socket을 생성해서 소켓과 소켓간의 통신이 이루어지도록 한다.
-한 포트에 하나의 ServerSocket만 연결 할 수 있다.(프로토콜이 다르면 같은 프토를 공유 가능)
ex)
서버 소켓 생성 - serverSocket = new ServerSocket(7777); (Server.java)
서버 소켓이 클라이언트 프로그램의 연결요청을 처리할 수 있도록 대기상태로 만든다. 클라이언트 프로그램의 연결요청이 오면 새로운 소켓을 생성해서 클라이언트 프로그램의 소켓과 연결한다
Socket socket = serverSocket.accept(); (Server.java)
클라이언트 프로그램에서 소켓을 생성해서 서버소켓에 연결을 요청한다. (Client.java)
Socket socket = new Socket("아이피",7777); (Client.java)
서버소켓은 클라이언트 프로그램의 연결요청을 받아 새로운 소켓을 생성하여 클라이언트 프로그램의 소켓과 연결한다.
Socket socket = serverSocket.accept();
서버소켓은 클라이언트 프로그램의 연결요청을 받아 새로운 소켓을 생성하여 클라이언트 프로그램의 소켓과 연결한다.
'back-end > JAVA' 카테고리의 다른 글
JAVA[Recursion] - 배열의 합 구하기 (0) | 2020.02.29 |
---|---|
JAVA - LIST, SET, MAP 특징 (0) | 2019.05.01 |
JAVA - CALENDER 와 DATE 알아보기. (0) | 2019.05.01 |
JAVA - ArrayList <-> array(배열) 서로 변환하기 (0) | 2019.01.18 |
POI 라이브러리를 이용하여 엑셀 만들기 -하위폴더 및 파일 포함 (0) | 2018.12.22 |