00. Java Documents
https://docs.oracle.com/javase/8/docs/api/index.html
01. Object Class
- Object Class ๋ Java ์ ์กด์ฌํ๋ ๋ชจ๋ Class ์ ์ต์์ Class ์
- Object Class ์ ์กด์ฌํ๋ method ์ค, ์์ฃผ overriding ํ์ฌ ์ฌ์ฉํ๋ ๊ฒ๋ค์,
equals(),toString(),hashCode()
- ์ฌ๊ธฐ์
equals()์ ๊ฒฝ์ฐ, ๋ชจ๋ ๊ฐ์ด ๊ฐ์ Obejct ๋ผ๊ณ ํ๋๋ผ๋s1.equals(s2)์ ๊ฐ์ด ๋น๊ตํ๋ฉด ๋ค๋ฅด๋ค๊ณ ๋์ด โhashCode()๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ
- ๋ฐ๋ผ์, ์ํฉ์ ๋ง๊ฒ
equals()๋ฅผ overriding ํ์ฌ method ๋ฅผ customizing ํ ํ์๊ฐ ์์
02. java.lang ํจํค์ง
- Wrapper, Object, String, StringBuffer, StringBuilder, System, Math ๋ฑ์ ๊ธฐ๋ณธ์ ์ธ Class ๊ฐ ๋ชจ๋ java.lang package ์ ํฌํจ๋จ
- Wrapper Class
- ๊ธฐ๋ณธ ์๋ฃํ ๋ฐ์ดํฐ๋ฅผ Object ๋ก ๋ณํ์ํฌ ์ ์๋ Class ๋ฅผ ์๋ฏธ
- ๊ฐ ์๋ฃํ๋ง๋ค ๊ฐ๊ฐ์ Wrapper Class ๊ฐ ์กด์ฌ (ex.
intโInteger) - ์ต์ Java ์์๋
Integer i = new Integer(5);๊ฐ ์๋Integer i = 5;์ ๊ฐ์ด ์ฌ์ฉํ์ฌ๋ ์๋์ผ๋ก Integer Object ๊ฐ ๋ง๋ค์ด์ง- ๊ธฐ๋ณธ ํ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด ํ์ ๋ฐ์ดํฐ๋ก ์๋ ํ๋ณํ ์์ผ์ฃผ๋ ๊ธฐ๋ฅ โ Auto Boxing
- ๋ฐ๋๋ก, ๊ฐ์ฒด ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ณธํ ํ์ ๋ฐ์ดํฐ๋ก ์๋ ํ๋ณํ ํ๋ ๊ธฐ๋ฅ โ Auto Unboxing
- StringBuffer Class
- String Class ๋ ์ ๋ ๋ณํ์ง ์๋ ๋ถ๋ณ Class ์
- ๋ฐ๋ฉด StringBuffer Class ๋ ๊ฐ๋ณ Class ์
sb.append()method ๋this, ์ฆ ์๊ธฐ ์์ ์ object ๋ฅผ return ํจ- ๋ฐ๋ผ์, ์ด๋ฅผ ์ฌ์ฉํ์ฌ method ๋ฅผ ์ฐ์์ ์ผ๋ก ํธ์ถ โ Method Chaining
- ex)
sb.append("A").append("B").append("C")...
- String Class ์ ๋ฌธ์ ์
- String object ๋ฅผ
+์ฐ์ฐ์๋ฅผ ํตํ์ฌ ์ฐ์์ ์ผ๋ก ๋ํด์ฃผ๋ฉด,- ๋ํ ๋๋ง๋ค ๋ด๋ถ์ ์ผ๋ก ์๋ก์ด
StringBuilderobject ๊ฐ ์์ฑ๋์ด ์ฑ๋ฅ์ด ๋ฎ์์ง
- ๋ํ ๋๋ง๋ค ๋ด๋ถ์ ์ผ๋ก ์๋ก์ด
- ๋ฐ๋ผ์, StringBuilder ๋ฅผ ์ ์ธํ๊ณ , ์ด์ ์ฐ์์ ์ผ๋ก ๋ํด์ผ
new๋ฅผ ํตํ ์๋ก์ด Object ์์ฑ์ด ์ ๋๊ณ , ํจ์ฌ ๋ ๋น ๋ฅธ ์ฑ๋ฅ์ ๋ณด์
- String object ๋ฅผ
- Math Class
- Math Class ๋ ์์ฑ์ ์์ฒด๊ฐ
private์ด๊ธฐ ๋๋ฌธ์new๋ฅผ ํตํ ๊ฐ์ฒด ์์ฑ์ด ๋ถ๊ฐ๋ฅ - ๊ทธ๋ฌ๋ ๋ชจ๋ method ๊ฐ
static์ผ๋ก ์ ์ธ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ ์ญ์์ ์ฌ์ฉ ๊ฐ๋ฅ Math.max(5, 30),Math.min(50, 30),Math.abs(-10),Math.pow(2, 10),Math.log10(100)Math.random()์ 0 ๋ถํฐ 1 ์ฌ์ด์ ๋๋คํ ์์๋ฅผ return
- Math Class ๋ ์์ฑ์ ์์ฒด๊ฐ
03. java.util ํจํค์ง
- java.util package
- ๋ ์ง์ ๊ด๋ จ๋ Class ์ธ Date, Calendar Class
- ์๋ฃ๊ตฌ์กฐ์ ๊ด๋ จ๋ ์ปฌ๋ ์ ํ๋ ์์ํฌ์ ๊ด๋ จ๋ Interface ์ Class
- Date Class ๋ ์ง์ญํ๋ฅผ ์ง์ํ์ง ์์์ deprecated ๋จ โ ์ฆ ๋ ์ด์ ์ง์ํ์ง ์์ผ๋ ์ฌ์ฉ์ ์์ ํด๋ผ
- ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ์ฌ ๋์จ Class ๊ฐ Calendar Class
- ์ง์ญํ์ ๊ด๋ จ๋ ํด๋์ค๋ค์ Locale๋ก ์์๋๋ ์ด๋ฆ์ ๊ฐ์ง Class ๋ค์
- List, Set, Collection, Map ์ ์๋ฃ๊ตฌ์กฐ โ ์ฆCollection Framework ์ ๊ด๋ จ๋ Interface
- Collection Framework ์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ Interface ๋ Collection Interface
- Collection Interface ๋ ์ค๋ณต๋ ํ์ฉ, ์๋ฃ๊ฐ ์ ์ฅ๋ ์์๋ ๊ธฐ์ตํ์ง X
- Collection ์ด ๊ฐ์ง๊ณ ์๋ ๋ํ์ ์ธ method โ
add(),size(),iterator() iterator()๋ฅผ ์ฌ์ฉํ์ฌ ๋จ์ํ ํ๋์ฉ ๊บผ๋ผ ์ ์๋ Iterator ๋ผ๋ Interface ๋ฅผ ๋ฐํ- Iterator Interface ๋ ๋ค์ ๋ ๊ฐ์ง์ ๋ํ method ๋ฅผ ๊ฐ์ง
hasNext(): ๊บผ๋ผ ๊ฒ์ด ์๋์ง๋ฅผ ํ์ธnext(): ํ๋์ฉ ์๋ฃ๋ฅผ ๊บผ๋ผ ๋ ์ฌ์ฉ
- Iterator Interface ๋ ๋ค์ ๋ ๊ฐ์ง์ ๋ํ method ๋ฅผ ๊ฐ์ง
- Set Interface
- ์ค๋ณต์ ํ์ฉํ์ง ์์
- Collection Interface ๋ฅผ ์์๋ฐ์
- Set Interface ์
add()method โ ๊ฐ์ ์๋ฃ๊ฐ ์์ผ๋ฉดfalse, ์์ผ๋ฉดtruereturn
- List Interface
- ์ค๋ณต์ ํ์ฉ, ์์๋ฅผ ๊ธฐ์ต
- ๋ง์ฐฌ๊ฐ์ง๋ก Collection Interface ๋ฅผ ์์ โ
iterator()์ฌ์ฉ ๊ฐ๋ฅ - ์์๋ฅผ ๊ธฐ์ตํ๊ธฐ ๋๋ฌธ์, n ๋ฒ์งธ์ ์๋ฃ๋ฅผ ๊บผ๋ผ ์ ์๋
get(int n)method ๋ฅผ ๊ฐ์ง
- Map Interface
- Key, Value ๋ฅผ ๊ฐ์ง
put()method ๋ฅผ ์ด์ฉํ์ฌ key ์ value ๋ฅผ ํจ๊ป ์ ์ฅ- ์ํ๋ key ์ ํด๋นํ๋ ๊ฐ์ ๊บผ๋ผ ๋๋
get(key)์ ๊ฐ์ด ์ฌ์ฉ put()์ ํตํ์ฌ ๊ธฐ์กด์ ์กด์ฌํ๋ key ๊ฐ์ ๋ฃ์ผ๋ฉด, overwrite ๋จ- Map ์ ์ ์ฅ๋ ๋ชจ๋ key ๋ค์ ์ค๋ณต X โ ๊ฐ์ง๊ณ ์๋ ๋ชจ๋ Key ๋ฅผ return ํ๋
keySet()keySet()์ Set type ์ด๋ฏ๋กiterator()๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ์์๋ฅผ ๊บผ๋ผ ์ ์์
- Generic
- Generic ์ ์ฌ์ฉํ์ฌ, ์ ์ธํ ๋๋ ๊ฐ์์ ํ์ ์ผ๋ก ์ ์ธํ๊ณ , ์ฌ์ฉ ์์๋ ๊ตฌ์ฒด์ ์ธ ํ์ ์ ์ง์ ํจ
- Generic ์ ์ฌ์ฉํ๋ ๋ํ์ ์ธ Class ๋ Collection Framework ์ ๊ด๋ จ๋ Class ๋ค์
public class Box<E> {}์ ๊ฐ์ด Box Class ๋ฅผ ์ ์ธ, ๋ด๋ถ์ ์ผ๋ก๋private E obj;์ ๊ฐ์ด ์์ง ์ ํด์ง์ง ์์Eํ์ ์ field ๋ฅผ ์์ฑํ์ฌ ์ฌ์ฉ- ์ค์ ์ฌ์ฉ ์์๋,
Box<String> box = new Box<>();์ ๊ฐ์ด ์ฌ์ฉํ๊ณ , box.setObj("Hello");์ ๊ฐ์ด ์ ํ ํ์ ์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ parameter ๋ก ์ฌ์ฉ- ๋ง์ฝ ์ ํด์ง ํ์ ๊ณผ ๋ค๋ฅธ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ parameter ๋ก ๋ฃ์ ๊ฒฝ์ฐ โ ์ค๋ฅ
- ์ค์ ์ฌ์ฉ ์์๋,
- ์ ๋ฆฌํ๋ฉด, Generic ์ ํตํ์ฌ ๋ค์ํ Class ๋ฅผ ์ฌ์ฉํ๋ Class ๋ฅผ ๋ง๋ค ์ ์์
04. ๋ ์ง์ ์๊ฐ
- Date Class
- Date Class ๋ ์ง์ญํ (์ฌ์ฉ์์ ์ง์ญ์ ๋ง์ถค) ๋ถ๋ถ์ด ๊ณ ๋ ค๋์ง ์์์
- ๋ฐ๋ผ์, ๊ฑฐ์ ๋ชจ๋ ์์ฑ์์ method ๊ฐ Deprecated ๋์ด ์์
- Calender Class
- ๊ธฐ๋ณธ์ ์ผ๋ก Calender Class ๋ Abstract Class ์ โ ๋ฐ๋ผ์ ์ง์ ์ ์ผ๋ก ๊ฐ์ฒด ์์ฑ ๋ถ๊ฐ
- ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ค๋ฉด
getInstance()method ๋ฅผ ์ฌ์ฉํด์ผ ํจCalendar cal = Calendar.getInstance();- ๋ด๋ถ์ ์ผ๋ก ์์ Class ์ธ GregodianCalender ์ธ์คํด์ค๋ฅผ ์์ฑํ์ฌ return
- Calender Class ๋ฅผ ์ด์ฉํ์ฌ ํ์ฌ ๋ ์ง ์ ๋ณด ์ป๋ ๋ฒ
get()method parameter ๋ก Calender ์ ์ด๋ค constant ๋ฅผ ๋ฃ๋๋์ ๋ฐ๋ผ ๋ฌ๋ผ์งint yyyy = cal.get(Calendar.YEAR);int month = cal.get(Calendar.MONTH) + 1;โ ์์ 0 ๋ถํฐ ์์HOURโ 12์๊ฐ์ ,HOUR_OF_DAYโ 24 ์๊ฐ์
- java.time package
- ๊ธฐ์กด์ ์กด์ฌํ๋ Calendar, Date Class ์ ๋ถ์กฑํ ๊ธฐ๋ฅ โ ์๋กญ๊ฒ ์ฌ ๋์์ธํ API ๋ฅผ ์ ๊ณต
LocalDateTime timePoint = LocalDateTime.now();: ํ์ฌ ๋ ์ง์ ์๊ฐLocalDate ld = LocalDate.of(2021, Month.DECEMBER, 12);: ๋ ์ง ๊ฐ์ฒด ์์ฑ- ์ด์ธ์๋
LocalTime์ ์ฌ์ฉํ์ฌ ์๊ฐ ๊ฐ์ฒด ์์ฑ ๊ฐ๋ฅ
- ์ด์ธ์๋
- ์์์ ๋ง๋ LocalDateTime ๊ฐ์ฒด์์ ์ํ๋ ์ ๋ณด๋ง์ ๋ค๋ฅธ method, getter ๋ฅผ ํตํ์ฌ ์ป์ ์ ์์
- ex)
LocalDate theDate = timePoint.toLocalDate(); - ex)
Month month = timePoint.getMonth();
- ex)
05. IO

- Java IO ๋ ํฌ๊ฒ Byte ๋จ์ IO, Character ๋จ์ IO ๋ก ๋๋จ
- byte ๋จ์ IO ํด๋์ค๋ InputStream, OutputStream ์ด๋ผ๋ ์ถ์ ํด๋์ค๋ฅผ ์์๋ฐ์ ๋ง๋ค์ด์ง
- char ๋จ์ IO ํด๋์ค๋ Reader, Writer ์ถ์ ํด๋์ค๋ฅผ ์์ ๋ฐ์ ๋ง๋ค์ด์ง
- ์์ฑ์์
InputStream,Reader,Writer,OutputStream์ ์ ๋ฌ๋ฐ์ ์ ์๋ค๋ฉด- ์ด Class ๋ ๋ค์ํ ์ ๋ ฅ/์ถ๋ ฅ ๋๊ตฌ๋ฅผ ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉํ ์ ์๋ค๋ ๋ป
- ex)
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- ๋ง์ฝ ํด๋น ์ถ์ ํด๋์ค๋ค์ ๋ฐ๋ ์์ฑ์๊ฐ ์๋ค๋ฉด
- ์ด ํด๋์ค๋ ๋จ์ํ ์ ๋ ฅ์ด ์ถ๋ ฅ ๋์์ด ๋ฌด์์ธ์ง ๊ณ ์ ๋์ด ์๋ค๋ ๋ป
- ex)
FileInputStream fis = new FileInputStream("data.txt");
- ์ฅ์๋์ ํด๋์ค (Component)
- Decorator ํจํด์์, ๊ธฐ๋ฅ์ ํ์ฅํ ๊ฐ์ฒด
- ํ์ผ๋ก ๋ถํฐ ์ ๋ ฅ๋ฐ๊ณ ์ฐ๊ธฐ ์ํ ํด๋์ค : FileInputStream, FileOutputStream, FileReader, FileWriter
- ๋ฐฐ์ด๋ก ๋ถํฐ ์ ๋ ฅ๋ฐ๊ณ ์ฐ๊ธฐ ์ํ ํด๋์ค : ByteArrayInputStream, ByteArrayOutputStream, CharReader, CharWrite
- ์ฅ์ํ๋ ํด๋์ค (Decorator)
- Decorator ํจํด์์, ์ฅ์ ๋์ ํด๋์ค์ ๊ธฐ๋ฅ์ ํ์ฅํ๋ ์ญํ
- DataInputStream, DataOutputStream : ๋ค์ํ ๋ฐ์ดํฐ ํ์ ์ ์ ๋ ฅ๋ฐ๊ณ ์ถ๋ ฅ
- BufferedReader, PrintWriter :
println(),readLine()๊ณผ ๊ฐ์ด ๊ธฐ์กด ์ฅ์๋์ ํด๋์ค์๋ ๋ฌ๋ฆฌ โํ ์ค๋งโ ์ถ๋ ฅํ๊ฑฐ๋ ์ ๋ ฅ๋ฐ๋ method ๋ฅผ ๊ฐ์ง๊ณ ์์
- ์ฆ, Decorator Pattern ์์ ๋ณด๋ฉด,
- ์ฅ์๋์ ํด๋์ค์ธ
InputStreamReader๋ผ๋ ์ค์ํธ์ค์, BufferedReader๋ผ๋ ๋ฌผ์ค๊ธฐ๊ฐ ์ฌ๋ฌ ํํ๋ก ๋ฐ๋์ด ๋์ฌ ์ ์๋ ์ต์ ํ ์ค์๊ธฐ ํค๋๋ฅผ ๊ผฝ์์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ผ๊ณ ๋ณด๋ฉด ๋จ
- ์ฅ์๋์ ํด๋์ค์ธ
Stream ์ด๋?
- ์คํธ๋ฆผ์ Java ์์ ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฝ๊ฑฐ๋ ์ฐ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ถ์์ ์ธ ๊ฐ๋
- ์คํธ๋ฆผ์ ๋ฉ๋ชจ๋ฆฌ ์์ ์๋ฃ ๊ตฌ์กฐ ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด X
- ๋ฐ์ดํฐ๊ฐ ์์ฐจ์ ์ผ๋ก ํ๋ฌ๊ฐ๋ ํต๋ก์ผ ๋ฟ โ ๋ด๋ถ์ ์ผ๋ก๋ ํจ์จ์ฑ์ ์ํ์ฌ buffer ๋ฅผ ์ฌ์ฉ
- buffer ๋ ์ฃผ๋ก JVM ์ heap ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌ
- ์ฌ์ฉ๋ ์ดํ์๋ ๊ทธ์ dummy ๋ฐ์ดํฐ (์ฐธ์กฐํ๋ ์ ๋ค์ด ์์, Garbage Collection ๋์)
-
Byte ๋จ์ ์ ์ถ๋ ฅ
- InputStream, OutpuStream ์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ๋๋๋ Class
- `fis = new FileInputStream(โdata.txtโ);
fos = new FileOutputStream("copy.txt");
-
Byte ๋จ์ ์ ์ถ๋ ฅ ์ฌํ
byte[] buffer = new byte[512];- ์ด๋ ๊ฒ buffer ๋ฅผ 512 byte ๋ก ์ก์์ฃผ๋ฉด,
while((readCount = fis.read(buffer))!= -1)- buffer ๋ฅผ read ์ ๋ฃ์ด์ ์ฌ์ฉํ ๋ โ ํ๋ฒ์ 512 bytes ์ฉ ์ฝ์ด๋ค์
-
๋ค์ํ ํ์ ์ ์ถ๋ ฅ
- ๋ค์ํ ํ์
์ ์
์ถ๋ ฅ์ DataInputStream, DataOutputStream ์ ์ฌ์ฉ
- ์๋ค๋ค์ ์ฅ์ํ๋ ํด๋์ค, ์ฆ Decorator ๋ค์ด๋ผ Component ์ ๋ฐ๋์ ํจ๊ป ์ฌ์ฉํด์ผ ํจ
DataOutputStream out = new DataOutputStream(new FileOutputStream("data.txt"));- ์ด๋ ๊ฒ ์์ฑ๋
out์ ๋ค์๊ณผ ๊ฐ์ด ํ์์ ์ง์ ํ์ฌ ์ ๋ ฅ(write) ๊ฐ๋ฅ out.writeInt(100);,out.writeBoolean(true);,out.writeDouble(50.5);
- ๋ค์ํ ํ์
์ ์
์ถ๋ ฅ์ DataInputStream, DataOutputStream ์ ์ฌ์ฉ
-
๋ค์ํ ํ์ ์ ์ ๋ ฅ
DataInputStream in = new DataInputStream(new FileInputStream("data.txt"));- ํ์ผ์ ์
๋ ฅํ ๋, ํ์
์ ์ง์ ํ์ฌ ์
๋ ฅํ๊ฑฐ๋, ์ํ๋ ํ์
์ผ๋ก ์ฝ์ด์ค๊ธฐ ๊ฐ๋ฅ
int i = in.readInt();,boolean b = in.readBoolean();โฆ
-
try-with-resources ๋ฌธ๋ฒ
- ์์์ ๋ค๋ฃฌ ๋ชจ๋ ์
์ถ๋ ฅ ๊ด๋ จ ํด๋์ค๋ค์ AutoClosable Interface ๋ฅผ implement ํ๊ธฐ ๋๋ฌธ์
- try-with-resources ๋ฌธ๋ฒ์ ์ํ์ฌ ๋ณ๋์
close()๋ฅผ ์์ฑํ์ง ์์๋ ๋จ
- try-with-resources ๋ฌธ๋ฒ์ ์ํ์ฌ ๋ณ๋์
- ์์์ ๋ค๋ฃฌ ๋ชจ๋ ์
์ถ๋ ฅ ๊ด๋ จ ํด๋์ค๋ค์ AutoClosable Interface ๋ฅผ implement ํ๊ธฐ ๋๋ฌธ์
-
Char ๋จ์ ์ ์ถ๋ ฅ (Console)
- Class ์ด๋ฆ์ด Reader ๋ Writer ๋ก ๋๋จ
- System.in ์ ํค๋ณด๋๋ฅผ ์๋ฏธ โ InputStream type, ์ฆ ์ฅ์ ๋์ ํด๋์ค
- ์ฆ ํผ์์๋ ๋ชป ์ฐ๊ธฐ ๋๋ฌธ์ InputStreamReader ํด๋์ค๋ฅผ ์ด์ฉ
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));br.readLine()์ผ๋ก ํ ์ค์ฉ ์ ๋ ฅ๋ฐ๊ธฐ ๊ฐ๋ฅ
-
Char ๋จ์ ์ ์ถ๋ ฅ (File)
BufferedReader br = new BufferedReader(new FileReader("data.txt"))- ํ์ผ์์ ์ฝ์ด์ค๊ธฐ ์ํ์ฌ FileReader ํด๋์ค ์ด์ฉ
- ํด๋น ํ์ผ์์ ํ ์ค์ฉ ์ฝ์ด์ค๊ธฐ ์ํ์ฌ BufferedReader ํด๋์ค ์ด์ฉ
readLine()method ๋ ํ์ผ์์ ๋ ์ด์ ์ฝ์ด์ฌ ๋ด์ฉ์ด ์์ ๋,null์ return
PrintWriter pw = new PrintWriter(new FileWriter("test.txt"));- ํ์ผ์ ์ฐ๊ธฐ๋ฅผ ์ํ์ฌ ๊ธฐ๋ณธ์ ์ผ๋ก FileWriter ๋ฅผ ์ฌ์ฉํ๊ณ
- ์ด์ ๋ํ Decorator ๋ก PrintWriter ๋ฅผ ์ฌ์ฉ
String line = br.readLine()์ผ๋ก ํ์ผ์์ ํ ์ค์ฉ ์ฝ์ด์ค๊ณ ,pw.println()๋ฅผ ํตํ์ฌ ํ ์ค์ฉ ๋ค๋ฅธ ํ์ผ์ ์ฐ๊ธฐ
- ํ์ผ์ ์ฐ๊ธฐ๋ฅผ ์ํ์ฌ ๊ธฐ๋ณธ์ ์ผ๋ก FileWriter ๋ฅผ ์ฌ์ฉํ๊ณ
06. ์ด๋ ธํ ์ด์
- annotation ์ ํด๋์ค๋ method ์์ ๋ถ์ฌ์ ์ฌ์ฉ โ
@๋ฅผ ๋ถ์ฌ์ ์ฌ์ฉ - ์ด๋ฅผ ํตํ์ฌ annotation ์ ์ค์ ๋ ๊ฐ์ ํตํ์ฌ ํด๋์ค๊ฐ ์ข ๋ ๋ค๋ฅด๊ฒ ์คํ๋๊ฒ ํ ์ ์์
- ์ด ๋๋ฌธ์ annotation ์ ์ผ์ข ์ ์ค์ ํ์ผ์ฒ๋ผ ์ค๋ช ํ๋ ๊ฒฝ์ฐ๋ ์กด์ฌ
- Java ๊ฐ ์ ๊ณตํ๋ annotation ๋ ์๊ณ , ์ฌ์ฉ์๊ฐ ์ง์ ๋ง๋๋ Custom Annotation ๋ ์กด์ฌ
public @interface MyAnnotation {}์ ํตํ์ฌ ์์ฑ ๊ฐ๋ฅ- ์ด ๋, JVM ์คํ ์์ ํด๋น annotation ์ ๊ฐ์งํ ์ ์๋๋ก
@Rentention(RetentionPolicy.RUNTIME)์ ์์ ๋ถ์ฌ์ฃผ์ด์ผ ํจ
07. ์ฐ๋ ๋
-
ํ๋ก์ธ์ค โ ํ์ฌ ์คํ๋๊ณ ์๋ ํ๋ก๊ทธ๋จ
-
Java ํ๋ก๊ทธ๋จ์ JVM ์ ์ํ์ฌ ์คํ๋จ โ ์ด JVM ๋ ์ญ์ ํ๋ก๊ทธ๋จ ์ค ํ๋
-
OS ์ ์ฅ์์๋ Java ๋ ํ๋์ ํ๋ก์ธ์ค๋ก ์คํํ๋ ๊ฒ
-
์๋ฅผ ๋ค์ด, Word ํ๋ก๊ทธ๋จ์ด ํ๋์ ํ๋ก์ธ์ค๋ผ๋ฉด โ ํด๋น ํ๋ก์ธ์ค ์์์๋ ๋ง์ถค๋ฒ ๊ฒ์ฌ, ๊ธ ์์ฑ ๋ฑ์ ์ฌ๋ฌ ๊ฐ์ ํ๋ฆ์ด ๋์์ ๋์ํ๊ฒ ํ ์ ์์ โ ๊ฐ๊ฐ์ด ๋ฐ๋ก Thread ์ ํด๋น
-
Thread ๋ง๋ค๊ธฐ
- Thread ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์
- Thread ํด๋์ค๋ฅผ ์์๋ฐ๋ ๋ฐฉ๋ฒ
- Thread ๊ฐ ๊ฐ์ง๊ณ ์๋
run()method ๋ฅผ overriding - Thread ๋ฅผ ์์ฑํ๊ณ , Thread ๋ฅผ
start()method ๋ฅผ ํตํ์ฌ ์คํ
- Thread ๊ฐ ๊ฐ์ง๊ณ ์๋
- Runnable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ
- Runnable ์ด ๊ฐ์ง๊ณ ์๋
run()method ๋ฅผ implement - Runnable ๋ก ์์ฑํ Thread ๋ Thread class ๋ก ์์ฑํ์ง ์์๊ธฐ ๋๋ฌธ์ Thread ๊ฐ ์๋, ๊ทธ๋ฅ Runnable ๊ฐ์ฒด์ผ ๋ฟ โ
start()method ๊ฐ ์์ - ๋ฐ๋ผ์,
Thread t1 = new Thread(r1);์ฒ๋ผ Runnable ๊ฐ์ฒด๋ฅผ Thread ์์ฑ์์ ๋ฃ์ด์ Thread ๋ก ๋ง๋ค์ด์ค์ผ ํจ - ์ดํ์
t1.start()๋ฅผ ํตํ์ฌ Thread ๋ฅผ ์คํ
- Runnable ์ด ๊ฐ์ง๊ณ ์๋
- Thread ํด๋์ค๋ฅผ ์์๋ฐ๋ ๋ฐฉ๋ฒ
- Thread ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์
-
Thread ์ ๊ณต์ ๊ฐ์ฒด
- ์ฌ๋ฌ ๊ฐ์ Thread ๊ฐ ๋์์ ์ ๊ทผํ๊ฑฐ๋ ์ฌ์ฉํ๋ ํ๋์ ๊ฐ์ฒด
- Java ์์ Thread ๋ ๋์์ ์คํ๋จ โ ๊ณต์ ๊ฐ์ฒด์ field ๋ method ์ ๋์์ ์ ๊ทผํ ๊ฒฝ์ฐ
- Race Condition ๋ฌธ์ ๋ฐ์ ๊ฐ๋ฅ โ
synchronizedkeyword ๋ฅผ ์ฌ์ฉํ์ฌ ํด๊ฒฐ ๊ฐ๋ฅ- synchronized ๋ method ๋ block ์ ์ฌ์ฉ โ ํ ๋ฒ์ ํ๋์ Thread ๋ง ํด๋น ์ฝ๋์ ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ๋ง๋ฆ
- ๋ด๋ถ์ ์ผ๋ก๋ ๋จผ์ ํธ์ถํ method ๊ฐ Monitoring Lock ์ ์ป์ โ ํด๋น method ๊ฐ ์ข
๋ฃ๋๊ฑฐ๋
wait()์ ๋ง๋๊ธฐ ์ ๊น์ง๋ Lock ์ ์ ์ง - ๋ค๋ฅธ Thread ๋ค์ Lock ์ ๋์ ๋๊น์ง ๋๊ธฐ
- method ๊ธธ์ด ๊ฐ ๋งค์ฐ ๊ธด method ์์ฒด์ synchronized keyword ๋ฅผ ๊ฑธ์ด๋ฒ๋ฆผ โ ๋ง์ง๋ง์ ๋๊ธฐํ๋ Thread ๊ฐ starving ํ ์ ์์ โ ๋ฐ๋ผ์ Race Condition ์ด ๋ฐ์ํ ๊ฒ ๊ฐ์ ๋ถ๋ถ์๋ง ๋ถ๋ถ์ ์ผ๋ก
synchronized(this) { count++; }๊ณผ ๊ฐ์ด synchronized block ์ ์ฌ์ฉํ๋ฉด ๋จ
- Race Condition ๋ฌธ์ ๋ฐ์ ๊ฐ๋ฅ โ
-
Thread ์ ์ํ์ ์ด

- OS ๋ ์ฌ๋ฌ ๊ฐ์ Thread ๋ฅผ ์๊ฒ ์ชผ๊ฐ์ ๋ฒ๊ฐ์๊ฐ๋ฉฐ ์คํ โ ๋ง์น ๋์์ ์คํ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์
- Thread ๋ ์คํ๊ฐ๋ฅ์ํ์ธ Runnable ๊ณผ ์คํ ์ํ์ธ Running ์ํ๋ก ๋๋จ
- Runnable ์ ๊ณง ์ฐจ๋ก์ CPU ์์์ ๋ฐ๋๋ค๋ ๊ฒ์ด๊ณ , Running ์ ์ง๊ธ ํ์ฌ CPU ์์์ ๋ฐ์์ ์คํ ์ค์ด๋ผ๋ ๊ฒ
- ์คํ๋๋ Thread ์์์
Thread.sleep()ํธ์ถ๋๋ฉด โ ํด๋น Thread ๋ Time Waiting ์ํwait()method ๊ฐ ํธ์ถ์ด ๋๋ฉด โ Thread ๋ Waiting ์ํ
Thread.sleep()์ ํน์ ์๊ฐ์ด ์ง๋๋ฉด ์์ ์ค์ค๋ก ๋ธ๋ก์ํ์์ ๋น ์ ธ๋์ Runnable ๋ก ๋ณต๊ท- ํ์ฌ Thread ๊ฐ
wait()method ๋ฅผ ํตํด์ ๋ค๋ฅธ ์ฐ๋ ๋๊ฐ ๋๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆด ๋, ๊ทธ ๋ค๋ฅธ Thread ๋ ๋๋ค๋ฅธ Thread ์์notify()๋notifyAll()๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ ์ ์๋ Waiting ์ํ์์ ํด์ ๋์ง ์์ wait()method ๋ ํธ์ถ์ด ๋๋ฉด Monitoring Lock ์ ๋๊ฒ ๋จ โ ๊ทธ๋์ ๋๊ธฐ์ค์ธ ๋ค๋ฅธ ๋ฉ์๋๊ฐ ์คํ๋จ- Thread ์
run()method ๊ฐ ์ข ๋ฃ๋๋ฉด, Thread ๋ ์ข ๋ฃ๋จ โ ์ฆ Dead ์ํ - Thread ์
yeild()method ๊ฐ ํธ์ถ๋๋ฉด ํด๋น Thread ๋ ๋ค๋ฅธ Thread ์๊ฒ ์์์ ์๋ณด - Thread๊ฐ ๊ฐ์ง๊ณ ์๋
join()method ๋ฅผ ํธ์ถํ๊ฒ ๋๋ฉด โ ํด๋น Thread ๊ฐ ์ข ๋ฃ๋ ๋๊น์ง ํ์ฌ Thread ๋ ๋ฉ์ถฐ์ ๋๊ธฐ (Blocked ์ํ)
-
๋ฐ๋ชฌ ์ฐ๋ ๋ (Daemon Thread)
- Daemon ์ด๋ผ๋ ๊ฒ โ ๋ฆฌ๋ ์ค, ์ ๋์ค ๊ณ์ด์์ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ๋์ํ๋ ํ๋ก๊ทธ๋จ
- Daemon Thread ๋ ์ผ๋ฐ Thread ๊ฐ ๋ชจ๋ ์ข ๋ฃ๋๋ฉด ๊ฐ์ ์ ์ผ๋ก ์ข ๋ฃ๋จ
- Daemon Thread ๋ก ์ง์ ํ Thread ๋
t1.start()์ด์ ์t1.setDaemon(true)๋ฅผ ์ฌ์ฉ
08. ๋๋ค
- Interface ์ค, method ๋ฅผ ํ๋๋ง ๊ฐ์ง๊ณ ์๋ Interface ๋ฅผ ํจ์ํ Interface ๋ผ๊ณ ํจ
- ex) Runnerable Interface โ
run()ํ๋๋ง ๊ฐ๊ณ ์์
- ex) Runnerable Interface โ
public class LambdaExam {
public static void main(String[] args) {
new Thread(new Runnable() {
public void run() {
for(int i = 0; i < 10; i++) {
System.out.println("hello");
}
}
}).start();
}
}- ์์ ๊ฐ์ด Thread ๋ฅผ ์์ฑํ ๋์๋ Runnable ๊ฐ์ฒด๋ฅผ ์์ฑ์์ ๋ฃ์ด์ผ ํจ
- ์ด๋, ๋ฐ๋ก Runnable ์
run()method ๋ฅผ overriding ํ ์ ์์ - ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ ์์ฑ๋ Thread ๋ฅผ ๋ฐ๋ก
.start()๋ฅผ ํตํด ์คํ ๊ฐ๋ฅ - ๊ทธ๋ฐ๋ฐ ๋๋ฌด ์ฝ๋๊ฐ ๋ณต์กํจ
- Java 8 ๋ฒ์ ๋ถํฐ Lambda Expression ์ ์ง์
- Lambda Expression ์ ํจ์ํ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๋ ์ฌ์ฉ
- ๋ถํ์ํ ํด๋์ค ์ ์ ์์ด ์งง๊ณ ๊ฐ๋จํ๊ฒ ์ฝ๋ ์์ฑ ๊ฐ๋ฅ
public class LambdaExam {
public static void main(String[] args) {
new Thread( () -> {
for(int i = 0; i < 10; i++) {
System.out.println("hello");
}
}).start();
}
}-
JVM ์ด Thread ์์ฑ์๋ฅผ ๋ณด๊ณ , ํด๋น ์์ฑ์์ ์ ๋ฌ๋ ๊ฐ์ฒด๊ฐ Runnable ์์ ํ์
- โ ์ดํ์ ๋ฑ์ฅํ๋ ๋๋ค์์, Runnable ์ ๊ตฌํํ๋ ์ฝ๋๋ก ์ฌ์ฉํ์ฌ ์๋์ผ๋ก Runnable ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ Thread ์์ฑ์์ parameter ๋ก ๋ฃ์ด์ค
-
๋๋ค์ ๋ฌธ๋ฒ
- (๋งค๊ฐ๋ณ์ ๋ชฉ๋ก) โ { ์คํ๋ฌธ }