File I/O
๋ฌธ์์ด (String I/O)
ํ ๋จ์ด ๋๋ ํ ๋ฌธ์์ด ์ฒ๋ฆฌ
- ๋ฌธ์ ํ๋ํ๋ ๋๋ ๋ฌธ์์ด์ ์ค์ ๋ ์ธ์ฝ๋ฉ์ ๋ง๊ฒ ๋ณํํด์ ๋ฌธ์์ด ๋ค๋ฃธ
- Supplementary Planes ์ ํด๋นํ๋ ๋ฌธ์์ด์
char[]
๋ฅผ ํ๋ ๋ ์ฝ์ด์ผ ๋จ - ํ์ธ๋ฒ:
Character.isSupplementaryCodePoint(codePoint)
- Supplementary Planes ์ ํด๋นํ๋ ๋ฌธ์์ด์
- ๊ธฐ๋ณธ Stream์ ๋ฌธ์ ์ธ์ฝ๋ฉ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ธ์ฝ๋๊ฐ ์ถ๊ฐ๋ ๊ฑฐ๋ผ ๋น์ฐํ๊ฒ๋
๋ฐ์ด๋๋ฆฌ๋ฅผ ํด๋น ๊ฐ์ฒด๋ค๋ก ๋ค๋ฃจ๋ฉด ๋ฐ์ดํฐ ๊นจ์ง - ์๋ฐ์์ ๋ฌธ์์ด์ ์ ์ฅํ๋ ๋ฐฉ์
- ๋ฌธ์์ด์ UTF-16 ์ผ๋ก ์ธ์ฝ๋ฉ ํ๊ณ ์๋ค๊ฐ ๋ฐ๋ก ์ฐธ์กฐํ ์ผ ์์๋ ๋์ฝ๋ฉ ํด์ ํํ
Reader & Writer
๊ธฐ๋ณธ String I/O ๊ฐ์ฒด
BufferedReader & BufferedWriter
๋ฉ๋ชจ๋ฆฌ ๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ String I/O ๊ฐ์ฒด
FileReader & FileWriter
ํ์ผ ์ ์ถ๋ ฅ String I/O ๊ฐ์ฒด
InputStreamReader & OutputStreamWriter
binry I/O
์คํธ๋ฆผ์String I/O
๋ก ๋ณํ ํด์ฃผ๋ ๊ฐ์ฒด
- ์๋ ๋ฐ์ด๋๋ฆฌ ํญ๋ชฉ์ฒ๋ผ
Stream
๋ด ๋ฐ์ดํฐ๊ฐ ๋ฌธ์์ด์ธ ๊ฒฝ์ฐbinry I/O
๋ก ๋ฌธ์์ด์ ๋ค๋ฃจ๊ฒ ๋๋ฉด ๋นํจ์จ์ ์ด๋ฏ๋ก - ์ด๊ฑธ
String I/O
๋ก ๋ณํ ์์ผ ์ค
๋ฐ์ด๋๋ฆฌ (binry I/O)
๋ฐ์ดํฐ๋ฅผ 1๋ฐ์ดํธ ๋จ์๋ก ์ฒ๋ฆฌํจ
- ํด๋น ๊ฐ์ฒด๋ค๋ก ํ
์คํธ ๋ฌธ์๋ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ์ง๋ง
์ถ๊ฐ์ ์ธ ์ธ์ฝ๋ฉ ์ฒ๋ฆฌ๊ฐ ํ์ํ๊ณ , ๋นํจ์จ์ ์ - ์ธ์ฝ๋ฉ ๋ง๋ค ๊ฐ๊ฐ ํ ๋น๋๋ ๋ฐ์ดํธ ์๊ฐ ๋ฌ๋ผ์ 1๋ฐ์ดํธ ์ฝ๊ณ ๊ทธ๊ฑธ ๋ฌธ์์ด๋ก ์ธ์ฝ๋ฉ ํ๋ค๋ฉด ๋น์ฐํ๊ฒ๋ ๋ฌธ์๊ฐ ๊นจ์ง
- ๊ทธ๋ ๊ธฐ์ ๋ชจ๋ ๋ฐ์ดํธ ์ฝ๊ณ ๊ทธ๊ฑธ ์ธ์ฝ๋ฉ ํด์ ์ ์ฒด ๋ฐ์ดํธ๋ฅผ ํด์ํ๊ฒ ํด์ผ ํจ
InputStream & OutputStream
๊ธฐ๋ณธ binry I/O ๊ฐ์ฒด
BufferedInputStream & BufferedOutputStream
๋ฉ๋ชจ๋ฆฌ ๋ฒํผ๋ฅผ ์ฌ์ฉํ๋ binry I/O ๊ฐ์ฒด
FileInputStream & FileOutputStream
ํ์ผ ์ ์ถ๋ ฅ binry I/O ๊ฐ์ฒด
- ํ ์คํธ ํ์ผ์ด ์๋ ๋ชจ๋ ๊ฑด ์ด๊ฑธ๋ก ํด์ผํจ
Stream์์ ๋ฌธ์์ด ๋ค๋ฃจ๊ธฐ
-
์๋ชป๋ ์
InputStream stream = new FileInputStream("test.txt"); byte buffer[] = new byte[1024]; int head = 0; while ((head = stream.read(buffer)) > 0) { System.out.println(new String(buffer, 0, head)); }
- 1024 ๋ฐ์ดํธ ์ฉ ๋์ด์ ์ฝ๋๋ฐ ๋ง์ฝ 1023๋ฐ์ดํธ์ ํด๋น ํ๋ ๋ฌธ์์ด์ด 3๋ฐ์ดํธ์ ๊ฑธ์ณ์ ํด์๋์ผ ํ๋๊ฒฝ์ฐ
- ์ค๊ฐ์ ๋ฐ์ดํธ๊ฐ ๋๊ธฐ๊ธฐ ๋๋ฌธ์ ๋ฌธ์์ด์ด ๊นจ์ง
-
์ณ์ ์
InputStream stream = new FileInputStream("test.txt"); byte buffer[] = new byte[1024]; ByteArrayOutputStream bos = new ByteArrayOutputStream(); int head = 0; while ((head = stream.read(buffer)) > 0) { bos.write(buffer, 0, head); } bos.flush(); System.out.println(bos.toString());
- ์ด๋ ๊ฒ ์ ์ฒด ๋ฐ์ดํธ๋ฅผ ๋ฐ๊ณ ๊ทธ๊ฑธ
String
์ผ๋ก ๋ณํํ์ฌ ์จ์ผํจ
- ์ด๋ ๊ฒ ์ ์ฒด ๋ฐ์ดํธ๋ฅผ ๋ฐ๊ณ ๊ทธ๊ฑธ
Buffered ์ ์ฅ/๋จ์
๊ตฌ๋ถ | Non-Buffered | Buffered |
---|---|---|
์ต๊ณ ํจ์จ | ์์ํฌ๊ธฐ & ์ ์๋น๋ ์ ๊ทผ | ํฐํฌ๊ธฐ & ๋ฐ๋ณต์ ์ ๊ทผ |
๊ฒฐ๋ก | ์์ ๋ฐ์ดํฐ๋ ํ ๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๊ฒฝ์ฐ ์ ํฉ | ํฐ ๋ฐ์ดํฐ ํ์ผ, ๋ฐ๋ณต์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๊ฒฝ์ฐ ์ ํฉ |
Stream API
collection ๊ฐ์ฒด๋ค์์ ๋๋ค๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ด ํ ์์๋
- JS ๊ฐ์ด filter ๋ map, foreach ํจ์๋ค์ ๋๋ค ํํ์ผ๋ก ์ฌ์ฉ๊ฐ๋ฅ
์ง์ ํํ (n์ง์ ๋ฆฌํฐ๋ด ํ๊ธฐ๋ฒ)
-
2์ง์
int a=0b10;
-
16์ง์
int b=0x10
Java ์์์ ๋ฐ์ดํธ ํํ
- ์๋ฅผ๋ค์ด
0xFF
์ฆ1111 1111
์ 10์ง์๋ก ํํํ๋ฉด255
- unsigned byte ๋ก ํํ ํ ์ ์๋ ์ต๋๊ฐ
- ํ์ง๋ง byte ์๋ฃํ์ ๋ถํธ๊ฐ ์๋ 2์ ๋ณด์๋ก ํํ๋๊ธฐ์
-128 ~ 127
๊น์ง์ ์ซ์๋ง ์ ์ฅ ๊ฐ๋ฅํ๋ค
byte num = (byte) 0xFF;
// ๊ฐ์ -1
- unsigned byte ์๋ฃ๋ฅผ ๋ค๋ฃฐ๋
byte
๋ก ํ๋ณํ ํ์ฌ 2์ ๋ณด์๋ฒ ์ผ๋ก ํด์ ํ๊ฒํ๋ค - ์ค์ ๋ก File ์ด๋ ๊ธฐํ ๋ฐ์ด๋๋ฆฌ ์๋ฃ๋ฅผ ๋ค๋ฃฐ ๋
byte[]
๋จ์๋ก ์ ์ฅ๋ ํ ๋ฐ ๊ฐ ๋ฐฐ์ด ๊ฐ์ ๋ฐ์ดํธ ๊ฐ์ 2์ ๋ณด์๋ฒ์ผ๋ก ํด์ ํ๊ฒ ๋๋ค, ๊ทธ๋์ ์์๊ฐ ๋์ฌ ์ ์๋๊ฒ
String ์ ์ฅ๋ฐฉ์
์ ์ผ์คํ & ๋ค์ด์ผ์คํ
๋์ ๋ฐ์ธ๋ฉ
- ๋ถ๋ชจ๋ก ๋ถํฐ Overriding๋ ๋ฉ์๋๋ ๋ถ๋ชจ ๋ฉ์๋๋ ๋ฌด์๋๊ณ ์์ ๋ฉ์๋๊ฐ ํธ์ถ๋๋ค
// ์ํผํด๋์ค
class Animal {
public void sound() {
System.out.println("Animal makes a sound");
}
}
class Cat extends Animal {
@Override
public void sound() {
System.out.println("Cat meows");
}
}
public class Main {
public static void main(String[] args) {
Cat mycat = new Cat();
mycat.sound();
// ์์ ๋ฉ์๋์ ๊ตฌํ๋ sound() ๊ฐ ์ํ๋จ
}
}
์ ์ผ์คํ (Upcasting)
// ์ํผํด๋์ค
class Animal {
public void sound() {
System.out.println("Animal makes a sound");
}
}
// ์๋ธํด๋์ค
class Dog extends Animal {
@Override
public void sound() {
System.out.println("Dog barks");
}
}
class Cat extends Animal {
@Override
public void sound() {
System.out.println("Cat meows");
}
}
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
Animal myCat = new Cat();
myDog.sound();
myCat.sound();
Animal[] animals = { new Dog(), new Cat() };
for (Animal animal : animals) {
animal.sound();
}
}
}
- ์์ ํด๋์ค๋ฅผ ๋ถ๋ชจ ๊ฐ์ฒด๋ก ์ด๊ธฐํ ํ๋ ๋ฐฉ๋ฒ
- ์ด๋ ๊ฒ ์ด๊ธฐํ ํ๋๋ผ๋ ๋์ ๋ฐ์ธ๋ฉ์ด ์๋ํ์ฌ ์์์ ๊ตฌํ๋ ๋ฉ์๋๋ง ํธ์ถํ๋ค
์ฌ์ฉํ๋ ์ด์ ?
-
๊ฐ์ฅ ํฐ ์๋ฌธ์ด ๊ทธ๋ฅ ์์ ๊ทธ ์์ฒด๋ก ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํ ํ๋๋ผ๋ ๋์ ๋ฐ์ธ๋ฉ ๊ฐ์ ๋์์๋ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์๋ค.
-
๊ทธ๋์ ์ ์ผ์คํ ์ด ํ์ํ ์ด์ ๋ฅผ ๊ฐ์ฅ ์ ์ค๋ช ํ ๊ฒ ์๋ ์์ ์ด๋ค
// ํต์ฌ ๋ฉ์๋ public void makeAnimalSound(Animal animal) { animal.sound(); } Animal dog = new Dog(); Animal cat = new Cat(); makeAnimalSound(dog); // Dog์ sound() ํธ์ถ makeAnimalSound(cat); // Cat์ sound() ํธ์ถ
Dog
์Cat
๋ ๋คAnimal
์์ ๋ฐ์ ์ํ๋ผ ๋ด๊ฐ ์ค๊ณํ๋ ๋ฉ์๋๋
Cat
,Dog
์ ๊ฐ์ดAnimal
์ ์์๋ฐ์ ๋ชจ๋ ๊ฐ์ฒด๋ฉด ์๊ด์๋ ์ํฉ์ด๋ผ๊ณ ๊ฐ์ ํ๋ค- ๊ทธ๋ด๋๋ ์
makeAnimalSound()
๋ฉ์๋ ์ฒ๋ผAnimal
์ด๋ผ๋ ํ์ ์ผ๋ก
๋ญ๋ฑ๊ทธ๋ ค์ ํ์ ์ ๋ช ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. - ๊ทธ๋์ ์ ์ผ์คํ ์ ๊ทธ๋ฅ ํ์ ๊ฐ์ฒด ์ ์ฒด์ ํ์ ์ ๋ช ์ํ๊ธฐ ์ํ ์๋จ ์ ๋๋ก๋ง ๊ธฐ์ตํ์
๋ค์ด ์ผ์คํ (DownCasting)
// ์ํผํด๋์ค
class Animal {
public void sound() {
System.out.println("Animal makes a sound");
}
}
// ์๋ธํด๋์ค
class Dog extends Animal {
@Override
public void sound() {
System.out.println("Dog barks");
}
public void bark() {
System.out.println("์ด๊ฑด ๋ํํ
๋ง ์์");
}
}
// ํต์ฌ ๋ฉ์๋
public void makeAnimalSound(Animal animal) {
animal.sound();
// ๋ง์ฝ Dog ๊ฐ์ฒด๋ฉด
if (animal instanceof Dog) {
Dog dog = (Dog) animal; // ๋ค์ด์บ์คํ
dog.bark(); // Dog์ ๊ณ ์ ๋ฉ์๋ ์ฌ์ฉ ๊ฐ๋ฅ
}
}
- ์ ์์ ์ฒ๋ผ
makeAnimalSound()
์์Animal
ํ์ ์ ๊ณตํต ํจ์์ธsound()
๋ฅผ ์ํํ๊ณ - ๊ฐ๊ฐ์ ํ์ ํด๋์ค์ ๊ตฌํ๋ ๊ณ ์ ํ ๋ฉ์๋๋, ๋ณ์๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด
์์ ํ ์์ ํด๋์ค๋ก ์ ํ ํ๋ ๊ฒ - ์ ๋ ๊ฒ ๋ญ๋ฑ๊ทธ๋ ค์
Animal
๋ก ํ์ ์ ์ง์ ํ ๊ฒฝ์ฐ ํธ์ถํ ๋ ์ฌ์ฉ๋๋
๊ฐ์ฒด ๊ฐ๊ฐ์ ๋ํด ๋ฐ๋ก ์ฒ๋ฆฌํ ๋ ์ฌ์ฉํ๋ค
Integer์ ==
์ฐ์ฐ ๋ฌธ์
private void test() {
Integer token_1 = Integer.parseInt(new String("1"));
Integer token_2 = Integer.parseInt(new String("1"));
if (token_1 > token_2) {
System.out.println("1์ด ๋ํผ");
}
if (token_1 < token_2) {
System.out.println("2๊ฐ ๋ํผ");
}
if (token_1 == token_2) {
System.out.println("๊ฐ์");
}
}
์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ token_1 == token_2
์ด ์ฑ๋ฆฝ ํ ์๋ ์ํ ์๋ ์๋ค๋ ๊ฒ์ด๋ค.
์๋ฐ ๋ฒ์ ์ ๋ฐ๋ผ ๋ค๋ฅธ์ง๋ ๋ชจ๋ฅด๊ฒ ๋๋ฐ Integer
์์ฒด๊ฐ ๊ฐ์ฒด๋ผ
==
์ฐ์ฐ์๊ฐ ๊ฐ์ฒด๊ฐ ๊ฐ์์ง๋ฅผ ํ๋จํ๋ ์์ผ๋ก ์นํ๋๋ค.
์ฆ ์์ ๋์จ ์กฐ๊ฑด์ ์ ๋ถ๋ฅผ ๋ง์กฑํ์ง ์์ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ ๊ฑฐ๋ค!!
<
, >
์ฐ์ฐ์์ ๊ฒฝ์ฐ JVM์ด ์์์ int
์์ํ์
์ผ๋ก ์ธ๋ฐ์ฑ ํด์ฃผ์ง๋ง ==
์ฐ์ฐ์๋ ์๋๋ค.
๋ฐ๋ผ์ ๊ฐ์ ๋ํ ๋น๊ต๋ฅผ ํ๋ ค๋ฉด String ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก equals
๋ฅผ ์ฐ๊ฑฐ๋ ์๋๋ฉด int
๋ก ํ๋ณํ ํ์ฌ ์จ์ผ ์ด๋ฐ ๋ฌธ์ ์์ด ์ฝ๋ฉ ๊ฐ๋ฅํ๋ค.
// int๋ก ๋ฐ๊ฟ์ ์ฌ์ฉ
int token_1 = Integer.parseInt(new String("1"));
//๋๋ equals ์ฌ์ฉ
token_1.equals(token_2)