[๊ธฐ์ ๋ฉด์ ๋๋น] 1. Java
1. Java์ ํน์ง
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด (OOP, ๊ฐ์ฒด๋ค์ ์ ๊ธฐ์ ์ธ ํ๋ ฅ๊ณผ ๊ฒฐํฉ์ ์ค์ ์ ๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์)
- ๊ธฐ๋ณธ ์๋ฃํ์ ์ ์ธํ ๋ชจ๋ ์์๋ค์ด ๊ฐ์ฒด๋ก ํํ
์ฅ์ )
- JVM(์๋ฐ ๊ฐ์๋จธ์ )์์์ ๋์ํ๊ธฐ ๋๋ฌธ์ ์ด์์ฒด์ ์ ๋ ๋ฆฝ์
- GarbageCollector๋ฅผ ํตํ ์๋์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ฐ๋ฅ
๋จ์ )
- JVM ์์์ ๋์ํ๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ์๋์ ์ผ๋ก ๋๋ฆฌ๋ค
- ๋ค์ค ์์์ด๋ ํ์ ์ ์๊ฒฉํ๋ฉฐ ์ ์ฝ์ด ๋ง๋ค
2-1. ๊ฐ์ฒด๋?
- ๋์ ๊ฐ๋ ์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์ธ์งํ ์ ์๋ ๋ชจ๋ ๊ฒ- ์ข์ ๊ฐ๋ ์ผ๋ก ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ๊ฐ์ง class
2-2. ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP) ๋?
- ๊ธฐ๋ฅ์ด ์๋ ๊ฐ์ฒด๋ฅผ ์ค์ฌ์ผ๋ก ๊ฐ ๊ฐ์ฒด๋ค์ ์ญํ ์ ์ ํ์ฌ ๊ฐ์ฒด๋ค ๊ฐ ์ํธ์์ฉ์ ํตํด ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ๊ฒ
2-3. ๊ฐ์ฒด์งํฅ์ ์ค๊ณ์์น 5๊ฐ์ง (SOLID)
1) SRP (๋จ์ผ ์ฑ ์ ์์น) : ํ ํด๋์ค๋ ํ๋์ ์ฑ ์๋ง ๊ฐ์ง๋ค
2) OCP (๊ฐ๋ฐฉ ํ์ ์์น) : ํ์ฅ์ ์ด๋ ค์๊ณ ์์ ์ ๋ซํ์์ด์ผํ๋ค
3) LSP (๋ฆฌ์ค์ฝํ ์นํ ์์น) : ์์ ํ์ ์ ํญ์ ํ์ ํ์ ์ผ๋ก ๋์ฒดํ ์ ์์ด์ผํ๋ค
4) ISP (์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น) : ์ธํฐํ์ด์ค ๋ด์ ๋ฉ์๋๋ ์ต์ํ์ผ์๋ก ์ข๋ค
= ํ๋์ ์ธํฐํ์ด์ค๋ณด๋ค ์ฌ๋ฌ๊ฐ์ ๊ตฌ์ฒด์ ์ธ ์ธํฐํ์ด์ค๊ฐ ์ข๋ค
5) DIP (์์กด๊ด๊ณ ์ญ์ ์์น) : ๊ตฌ์ฒด์ ์ธ ํด๋์ค๋ณด๋ค ์์ ํด๋์ค, ์ธํฐํ์ด์ค, ์ถ์ํด๋์ค์ ๊ฐ์ด ๋ณํ์ง ์์ ๊ฐ๋ฅ์ฑ์ด ๋์ ํด๋์ค์ ๊ด๊ณ๋ฅผ ๋งบ์ด์ผํ๋ค (์์กด์ฑ ์ฃผ์ )
* ์์ธํ ์์๋ณด๊ธฐ : https://dev-coco.tistory.com/142
2-4. ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ 4๊ฐ์ง ํน์ง (์ฐธ๊ณ )
1) ์ถ์ํ (Abstraction)
- ๊ณตํต์ ์ธ ๊ธฐ๋ฅ์ ์ถ์ถํ์ฌ ์ธํฐํ์ด์ค๋ก ์ ์
- ์ญํ ๊ณผ ๊ตฌํ์ ๋ถ๋ฆฌ
- ์ธํฐํ์ด์ค๋ฅผ ํ์ฉํ ์ถ์ํ
2) ์์ (Inheritance)
- ๊ธฐ์กด ํด๋์ค ์ฌํ์ฉํ์ฌ ์๋ก์ด ํด๋์ค ์์ฑ
- ์์ ํด๋์ค์ ์์ฑ๊ณผ ๊ธฐ๋ฅ ์ฌ์ฉ ๊ฐ๋ฅ
- ์ฝ๋ ์ฌ์ฌ์ฉ์ผ๋ก ๋ฐ๋ณต์ ์ธ ์ฝ๋ ์ต์ํ ๋ฐ ๊ณต์ ํ๋ ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ๊ฐํธ ์ ๊ทผ ๊ฐ๋ฅ
3) ๋คํ์ฑ (Polymorphism)
- ์์ ํด๋์ค ํ์ ์ ์ฐธ์กฐ๋ณ์๋ก ํ์ ํด๋์ค ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๊ฒ (์ ์บ์คํ )
* ์ฌ๋ฌ ์ข ๋ฅ์ ๊ฐ์ฒด๋ฅผ ๋ฐฐ์ด๋ก ๋ค๋ฃจ๋ ๊ฒ์ด ๊ฐ๋ฅ
Vehicle vehicles[] = new Vehicle[2];
vehicles[0] = new Car();
vehicles[1] = new MotorBike();
* ํ๋์ ํ์ ๋ง์ผ๋ก ์ฌ๋ฌ๊ฐ์ง ํ์ ์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ ๊ฐ๋ฅ
public class Driver{
void drice(Vehicle vehicle){
vehicle.moveForward();
vehicle.moveBackward();
}
}
public class Main{
public static void main(String[] args) {
Driver driver = new Driver();
Vehicle Car = new Car();
Vehicle MotorBike = new MotorBike();
driver.drive(car);
driver.drive(motorBike);
}
}
4) ์บก์ํ (Encapsulation)
- ์๋ก ์ฐ๊ด์๋ ์์ฑ๊ณผ ๊ธฐ๋ฅ๋ค์ ํ๋์ ์บก์๋ก ๋ง๋ค์ด ์ธ๋ถ๋ก๋ถํฐ ๋ณดํธํ๋ ๊ฒ
> ๋ฐ์ดํฐ ๋ณดํธ (data protection) : ์ธ๋ถ๋ก๋ถํฐ ํด๋์ค์ ์ ์๋ ์์ฑ๊ณผ ๊ธฐ๋ฅ๋ค ๋ณดํธ
> ๋ฐ์ดํฐ ์๋ (data hiding) : ๋ด๋ถ์ ๋์์ ๊ฐ์ถ๊ณ ์ธ๋ถ์๋ ํ์ํ ๋ถ๋ถ๋ง ๋ ธ์ถ
- private, getter/setter
- ๊ฐ์ฒด ๋ด ์์ฑ์์ ๊ฐ์ฒด๋ฅผ ๋ ๊ฒฝ์ฐ ์์กด์ฑ ์ฃผ์ ๊ฐ๋ ๊ณผ ์ฐ๊ฒฐ๋จ
- ์์กด์ฑ์ด ์ฃผ์ ๋ ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ํ๋ฒ์ ๋ถ๋ฌ์ค๊ธฐ ์ํด operate()ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ๋ ์บก์ํ
-> ๊ฐ์ฒด ๊ฐ ๊ฒฐํฉ๋ ๋ฎ์ถ๊ธฐ (์์กด์ฑ ์ฃผ์ ๋ฐ์ ๊ฐ์ฒด์ ๋ด๋ถ ๋ก์ง ์ํ์ ์์)
3. ์ ์บ์คํ & ๋ค์ด์บ์คํ
1) ์ ์บ์คํ
- ์์ ํด๋์ค๊ฐ ๋ถ๋ชจ ํด๋์ค ํ์ ์ผ๋ก ์บ์คํ ๋๋ ๊ฒ
- ์์ ํด๋์ค์๋ง ์๋ ์์ฑ๊ณผ ๋ฉ์๋ ์ฌ์ฉ ๋ถ๊ฐ
- ์์ ํด๋์ค์ ์ค๋ฒ๋ผ์ด๋ฉํ ๋ฉ์๋๊ฐ ์์ ๊ฒฝ์ฐ ์ค๋ฒ๋ผ์ด๋ฉ ๋ ๋ฉ์๋๊ฐ ์คํ
์ฌ์ฉ ์ด์ ) ๋ฐฐ์ด์ ๋ค๋ฅธ ๊ฐ์ฒด ๋ฃ์ ๋ / ์์ฑ์๋ฅผ ๋ถ๋ชจ ํด๋์ค๋ก ์ ์ธํ๊ณ ์ฌ๋ฌ๊ฐ์ง ํ์ ์ฐธ์กฐํ๊ณ ์ถ์๋
class Unit {
public void attack() {
System.out.println("์ ๋ ๊ณต๊ฒฉ");
}
}
class Zealot extends Unit {
public void attack() {
System.out.println("์ฐ๋ฅด๊ธฐ");
}
public void teleportation() {
System.out.println("ํ๋กํ ์ค ์ํ");
}
}
public class Main {
public static void main(String[] args) {
// * ์
์บ์คํ
(upcasting)
Unit unit_up = new Zealot();
unit_up.attack(); // "์ฐ๋ฅด๊ธฐ"
unit_up.teleportation(); // ์ฌ์ฉ๋ถ๊ฐ
}
}
2) ๋ค์ด ์บ์คํ
- ๋ถ๋ชจ ํด๋์ค๊ฐ ์์ ํด๋์ค ํ์ ์ผ๋ก ์บ์คํ ๋๋ ๊ฒ
- ์บ์คํ ์ฐ์ฐ์ ๋ช ์ํด์ผํจ
์ฌ์ฉ ์ด์ ) ์ ์บ์คํ ํ ๊ฐ์ฒด๋ฅผ ๋ค์ ์์ ํด๋์ค ํ์ ์ ๊ฐ์ฒด๋ก ๋๋๋ฆฌ๊ธฐ ์ํด
class Unit {
public void attack() {
System.out.println("์ ๋ ๊ณต๊ฒฉ");
}
}
class Zealot extends Unit {
public void attack() {
System.out.println("์ฐ๋ฅด๊ธฐ");
}
public void teleportation() {
System.out.println("ํ๋กํ ์ค ์ํ");
}
}
public class Main {
public static void main(String[] args) {
Unit unit_up;
Zealot zealot = new Zealot();
unit_up = zealot; // ์
์บ์คํ
// * ๋ค์ด์บ์คํ
(downcasting) - ์์ ์ ์ฉ ๋ฉค๋ฒ๋ฅผ ์ด์ฉํ๊ธฐ์ํด, ์ด๋ฏธ ์
์บ์คํ
ํ ๊ฐ์ฒด๋ฅผ ๋๋๋ฆด๋ ์ฌ์ฉ
Zealot unit_down = (Zealot) unit_up; // ์บ์คํ
์ฐ์ฐ์๋ ์๋ต ๋ถ๊ฐ๋ฅ. ๋ฐ๋์ ๊ธฐ์ฌ
unit_down.attack(); // "์ฐ๋ฅด๊ธฐ"
unit_down.teleportation(); // "ํ๋กํ ์ค ์ํ" (์ด์ ์ฌ์ฉ๊ฐ๋ฅ)
}
}
4. JVM์ ์ญํ
- ์คํ ๊ธฐ๋ฐ ๋์
- Java Byte Code๋ฅผ OS์ ๋ง๊ฒ ํด์ํด์ฃผ๋ ์ญํ
- ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํตํด ์๋์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
5. Java ์ปดํ์ผ ๊ณผ์
1) ๊ฐ๋ฐ์๊ฐ Java ํ์ผ ์์ฑ
2) build
3) Java ์ปดํ์ผ๋ฌ์ javac์ ๋ช ๋ น์ด๋ฅผ ํตํด ๋ฐ์ดํธ์ฝ๋(.class)๋ฅผ ์์ฑ
4) Class Loader๋ฅผ ํตํด JVM ๋ฉ๋ชจ๋ฆฌ ๋ด๋ก ๋ก๋
5) ์คํ ์์ง์ ํตํด ์ปดํจํฐ๊ฐ ์ฝ์ ์ ์๋ ๊ธฐ๊ณ์ด๋ก ํด์ (๊ฐ OS๋ณ)
6. Java์์ ์ ๊ณตํ๋ ์์ํ์ , ๊ฐ๊ฐ ๋ช๋ฐ์ดํธ ์ฐจ์ง?
- ์ ์ํ byte(1), short(2), int(4), long(8)
- ์ค์ํ float(4), double(8)
- ๋ ผ๋ฆฌํ boolean(1)
7. ์ค๋ฒ๋ผ์ด๋ฉ(Overriding) vs ์ค๋ฒ๋ก๋ฉ(Overloading)
1) ์ค๋ฒ๋ผ์ด๋ฉ(Overriding) : ์์ ํด๋์ค์์๋ ๋ฉ์๋๋ฅผ ํ์ ํด๋์ค์์ ์ฌ์ ์
2) ์ค๋ฒ๋ก๋ฉ(Overloading) : ๋งค๊ฐ๋ณ์์ ๊ฐ์/ํ์ ์ ๋ค๋ฅด๊ฒํ์ฌ ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ์ฌ๋ฌ๊ฐ ์ ์
8. ๋ถ๋ณ ๊ฐ์ฒด
- ๊ฐ์ฒด ์์ฑ ์ดํ ๋ด๋ถ ์ํ๊ฐ ๋ณํ์ง ์๋ ๊ฐ์ฒด
- ์์ํ์ ์ธ ๊ฒฝ์ฐ final ํค์๋ ์ฌ์ฉ
- ์ฐธ์กฐํ์ ์ธ ๊ฒฝ์ฐ
์ฐธ์กฐ ํ์
์ ๋ํ์ ์ผ๋ก 1.๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ์๋ ์๊ณ , 2.๋ฐฐ์ด์ด๋ 3.List ๋ฑ์ ์ฐธ์กฐํ ์ ์์ต๋๋ค. 1. ์ฐธ์กฐ ๋ณ์๊ฐ ์ผ๋ฐ ๊ฐ์ฒด์ธ ๊ฒฝ์ฐ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ํ๋์ ์ฐธ์กฐ ๋ณ์๋ ๋ถ๋ณ ๊ฐ์ฒด๋ก ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค. 2. ๋ฐฐ์ด์ผ ๊ฒฝ์ฐ ๋ฐฐ์ด์ ๋ฐ์ copyํด์ ์ ์ฅํ๊ณ , getter๋ฅผ clone์ผ๋ก ๋ฐํํ๋๋ก ํ๋ฉด ๋ฉ๋๋ค. (๋ฐฐ์ด์ ๊ทธ๋๋ก ์ฐธ์กฐํ๊ฑฐ๋, ๋ฐํํ ๊ฒฝ์ฐ ์ธ๋ถ์์ ๋ด๋ถ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์. ๋๋ฌธ์ clone์ ๋ฐํํด ์ธ๋ถ์์ ๊ฐ ๋ณ๊ฒฝํ์ง ๋ชปํ๊ฒ ํจ) 3. ๋ฆฌ์คํธ์ธ ๊ฒฝ์ฐ์๋ ๋ฐฐ์ด๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ฑ์ ์๋ก์ด List๋ฅผ ๋ง๋ค์ด ๊ฐ์ ๋ณต์ฌํ๋๋ก ํด์ผ ํฉ๋๋ค. ๋ฐฐ์ด๊ณผ ๋ฆฌ์คํธ๋ ๋ด๋ถ๋ฅผ ๋ณต์ฌํ์ฌ ์ ๋ฌํ๋๋ฐ, ์ด๋ฅผ ๋ฐฉ์ด์ ๋ณต์ฌ(defensive-copy)๋ผ๊ณ ํฉ๋๋ค. |
- ๋ถ๋ณ๊ฐ์ฒด ์ฌ์ฉ์ด์ ?
๋ถ๋ณ ๊ฐ์ฒด๋ final ํค์๋๋ฅผ ์ฌ์ฉํด ์ป๋ ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. 1. Thread-Safeํ์ฌ ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ์ ์ ์ฉํ๋ฉฐ, ๋๊ธฐํ๋ฅผ ๊ณ ๋ คํ์ง ์์๋ ๋๋ค. (๊ณต์ ์์์ด ๋ถ๋ณ์ด๊ธฐ ๋๋ฌธ์ ํญ์ ๋์ผํ ๊ฐ์ ๋ฐํํ๊ธฐ ๋๋ฌธ) 2. ์คํจ ์์์ ์ธ ๋ฉ์๋๋ฅผ ๋ง๋ค ์ ์๋ค. (์ด๋ ํ ์์ธ๊ฐ ๋ฐ์๋๋๋ผ๋ ๋ฉ์๋ ํธ์ถ ์ ์ ์ํ๋ฅผ ์ ์งํ ์ ์์ด ์์ธ ๋ฐ์ ์ ๊ณผ ๋๊ฐ์ ์ํ๋ก ๋ค์ ๋ก์ง ์ฒ๋ฆฌ ๊ฐ๋ฅ) 3. ๋ถ์ํจ๊ณผ๋ฅผ ํผํด ์ค๋ฅ๋ฅผ ์ต์ํ ํ ์ ์๋ค. โป ๋ถ์ํจ๊ณผ : ๋ณ์์ ๊ฐ์ด ๋ฐ๋๊ฑฐ๋ ๊ฐ์ฒด์ ํ๋ ๊ฐ์ ์ค์ ํ๊ฑฐ๋ ์์ธ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ฌ ์คํ์ด ์ค๋จ๋๋ ํ์ 4. ๋ฉ์๋ ํธ์ถ ์ ํ๋ผ๋ฏธํฐ ๊ฐ์ด ๋ณํ์ง ์๋๋ค๋ ๊ฒ์ ๋ณด์ฅํ ์ ์๋ค. 5. ๊ฐ๋น์ง ์ปฌ๋ ์ ์ฑ๋ฅ์ ๋์ผ ์ ์๋ค. (๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์ค์บํ๋ ๊ฐ์ฒด์ ์๊ฐ ์ค๊ธฐ ๋๋ฌธ์ Gc ์ํ ์ ์ง์ฐ์๊ฐ๋ ์ค์ด๋ ๋ค.) |
9. ์ถ์ ํด๋์ค์ ์ธํฐํ์ด์ค
1) ์ถ์ ํด๋์ค : ํด๋์ค ๋ด ์ถ์ ๋ฉ์๋๊ฐ ํ๋ ์ด์ ํฌํจ๋๊ฑฐ๋ abstract๋ก ์ ์๋ ๊ฒฝ์ฐ
2) ์ธํฐํ์ด์ค : ๋ชจ๋ ๋ฉ์๋๊ฐ ์ถ์ ๋ฉ์๋๋ก๋ง ์ด๋ฃจ์ด์ ธ์๋ ๊ฒ
๊ณตํต์ )
- new ์ฐ์ฐ์๋ก ์ธ์คํด์ค ์์ฑ ๋ถ๊ฐ๋ฅ
- ์ฌ์ฉํ๊ธฐ ์ํด์๋ ํ์ ํด๋์ค์์ ํ์ฅ/๊ตฌํ
์ฐจ์ด์ )
- ์ธํฐํ์ด์ค -> ๊ทธ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๋ชจ๋ ํด๋์ค์ ๋ํด ํน์ ํ ๋ฉ์๋๊ฐ ๋ฐ๋์ ์กด์ฌํ๋๋ก ๊ฐ์
- ์ถ์ํด๋์ค -> ์์๋ฐ๋ ํด๋์ค๋ค์ ๊ณตํต์ ์ธ ๋ก์ง ์ถ์ํ/๊ธฐ๋ฅ ํ์ฅ ์ํด ์ฌ์ฉ
- ์ธํฐํ์ด์ค ๋ค์ค์์ ๊ฐ๋ฅ | ์ถ์ ํด๋์ค ๋ค์ค์์ ๋ถ๊ฐ
10. ์ฑ๊ธํค ํจํด
- ๋จ ํ๋์ ์ธ์คํด์ค๋ฅผ ์์ฑํด์ ์ฌ์ฉํ๋ ๋์์ธ ํจํด
- ์ธ์คํด์ค 1๊ฐ๋ง ์กด์ฌํด์ผํ๋ค๋ ๊ฒ์ ๋ณด์ฅ
- ๋์ผํ ์ธ์คํด์ค ์์ฃผ ์์ฑํด์ผํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ (๋ฉ๋ชจ๋ฆฌ ๋ญ๋น ๋ฐฉ์ง)
- ์์) Spring Bean (์คํ๋ง ์ปจํ ์ด๋๋ ๋ชจ๋ ๋น๋ค์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธํค์ผ๋ก ๊ด๋ฆฌ)
์์ธํ ์์๋ณด๊ธฐ : https://dev-coco.tistory.com/109
11. ๊ฐ๋น์ง ์ปฌ๋ ์ (Garbage Collection)
- JVM ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฒ
- ์์คํ ์์ ๋์ ์ผ๋ก ํ ๋น๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ ์ค์์ ํ์์์ด์ง ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํ์ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฒ
- ๊ณผ์
1) JVM์ด ์ดํ๋ฆฌ์ผ์ด์ ์ ์คํ ๋ฉ์ถค
2) GC์คํํ๋ ์ฐ๋ ๋ ์ ์ธ ๋ชจ๋ ์ฐ๋ ๋ ์ค๋จ (Stop The World)
3) ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ ์ ๊ฑฐ (Mark and SweeP)
* ++ GC์ ์์ ์ Young ์์ญ์ ๋ํ Minor GC์ Old ์์ญ์ ๋ํ Major GC๋ก ๊ตฌ๋ถ
12. ์๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ
1) ๋ฉ์๋(Method) ์์ญ
- ์ ์ญ๋ณ์์ static ๋ณ์๋ฅผ ์ ์ฅ
- ํ๋ก๊ทธ๋จ ์์๋ถํฐ ์ข ๋ฃ๊น์ง ๋ฉ๋ชจ๋ฆฌ์ ๋จ์์๋ค
ํ ๋น : JVM ๋์ํด์ ํด๋์ค๊ฐ ๋ก๋ฉ๋ ๋ ์์ฑ
2) ์คํ(Stack) ์์ญ = ์ ์ ํ ๋น
- ์ง์ญ๋ณ์์ ๋งค๊ฐ๋ณ์ ๋ฐ์ดํฐ ๊ฐ ์ ์ฅ
- ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋๊ณ ์ข ๋ฃ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ ํด์
- LIFO ๊ตฌ์กฐ
- ๋ณ์์ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ํ ๋น๋๋ฉด ์ง์์ง๋ค
ํ ๋น : ์ปดํ์ผ ํ์์ ํ ๋น
3) ํ(Heap) ์์ญ = ๋์ ํ ๋น
- new ํค์๋๋ก ์์ฑ๋๋ ๊ฐ์ฒด(์ธ์คํด์ค), ๋ฐฐ์ด ๋ฑ์ด ์ ์ฅ
- ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ํด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
ํ ๋น : ๋ฐํ์์ ํ ๋น
13. ํด๋์ค - ๊ฐ์ฒด - ์ธ์คํด์ค
1) ํด๋์ค : ๊ฐ์ฒด ์ค๊ณ๋, ๊ฐ์ฒด ์์ฑ์ ์ฌ์ฉ
2) ๊ฐ์ฒด : ํด๋์ค ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋จ, ๊ณ ์ ์ด๋ฆ/์ํ(ํ๋)/ํ๋(๋ฉ์๋) ๊ฐ์ง
3) ์ธ์คํด์ค : ๊ฐ์ฒด์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋์ด ์ค์ ๋ก ํ์ฉ๋๋ ์ค์ฒด
14. ์์ฑ์ (Constructor)
- ํด๋์ค์ ์ด๋ฆ์ด ๊ฐ์ ๋ฉ์๋
- ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ ํธ์ถ๋๋ ๋ฉ์๋
- ๋ช ์์ ์ผ๋ก ์์ฑ์๋ฅผ ๋ง๋ค์ง ์์๋ default๋ก ๋ง๋ค์ด์ง๋ฉฐ, ์์ฑ์๋ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ค๋ฅด๊ฒํ์ฌ ์ค๋ฒ๋ก๋ฉ ๊ฐ๋ฅ
15. Wrapper Class์ Boxing/UnBoxing
- Wrapper Class : ๊ธฐ๋ณธ ์๋ฃํ์ ๋ํ ๊ฐ์ฒด ํํ
- Boxing : ๊ธฐ๋ณธ ์๋ฃํ -> Wrapper Class
- UnBoxing : Wrapper -> Class ๊ธฐ๋ณธ ์๋ฃํ
16. Synchronized
- ์ฌ๋ฌ๊ฐ์ ์ฐ๋ ๋๊ฐ ํ ๊ฐ์ ์์์ ์ฌ์ฉํ๊ณ ์ ํ ๋ ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ์ฐ๋ ๋๋ฅผ ์ ์ธํ๊ณ ๋๋จธ์ง ์ฐ๋ ๋ค์ ๋ฐ์ดํฐ ์ ๊ทผ ๋ชปํ๊ฒ ๋ง๋ ๊ฐ๋
- ๋ฐ์ดํฐ์ thread-safe๋ฅผ ์ํด ์๋ฐ์์ Synchronized ํค์๋ ์ ๊ณตํด ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์ ์ฐ๋ ๋๊ฐ ๋๊ธฐํ ์์ผ ๋ฐ์ดํฐ์ thread-safe ๋ณด์ฅ
- Synchronized๋ ๋ณ์์ ๋ฉ์๋์ ์ฌ์ฉํด์ ๋๊ธฐํํ ์ ์์ผ๋ฉฐ, Synchronized ํค์๋๋ฅผ ๋จ๋ฐํ๊ฒ ๋๋ฉด ์คํ๋ ค ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ ํ ์ผ์ผํฌ ์ ์์
17. new String๊ณผ ๋ฆฌํฐ๋ด("")
- new String()์ new ํค์๋๋ก ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์ Heap ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ์ฅ
- ๋ฆฌํฐ๋ด("")์ Heap ๋ด String Constant Pool ์์ญ์ ์ ์ฅ
18. static
- static ๋ณ์/๋ฉ์๋๋ ํด๋์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ๋ ์๋์ผ๋ก ์์ฑ๋จ
- ํด๋์ค ๋ก๋ฉ์ด ๋๋๋ฉด ๋ฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅ (์ธ์คํด์ค=๊ฐ์ฒด ์์ฑ์์ด ์ฌ์ฉ๊ฐ๋ฅ)
- ๋ชจ๋ ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ณต์
- GC ๊ด๋ฆฌ ์์ญ ๋ฐ -> ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋ ๋ ๊น์ง ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ด ์ ์ง๋์ฑ๋ก ์กด์ฌ
static ๋ณ์์ static ๋ฉ์๋ : https://dev-coco.tistory.com/153
19. Error์ Exception ์ฐจ์ด
1) Error
- ์คํ ์ค ์ผ์ด๋ ์ ์๋ ์น๋ช ์ ์ค๋ฅ
- ์ปดํ์ผ ์์ ์ ์ฒดํฌํ ์ ์๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ํ๋ก๊ทธ๋จ ๋น์ ์ ์ข ๋ฃ
- ์์ธก ๋ถ๊ฐ๋ฅํ UncheckedException
2) Exception
- ๊ฒฝ๋ฏธํ ์ค๋ฅ
- try-catch๋ฅผ ์ด์ฉํด ํ๋ก๊ทธ๋จ์ ๋น์ ์ ์ข ๋ฃ ๋ง์ ์ ์์
(์ค์๋ ๋ฎ์ ๋ถ๋ถ)
* String, StringBuffer, StringBuilde
- String์ ๋ถ๋ณ์ ์์ฑ์ ๊ฐ์ง๋ฉฐ, StringBuffer์ StringBuilder๋ ๊ฐ๋ณ์ ์์ฑ์ ๊ฐ์ง๋๋ค
- StringBuffer๋ ๋๊ธฐํ๋ฅผ ์ง์ํ์ฌ ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์ ์ฃผ๋ก ์ฌ์ฉํ๋ฉฐ
- StringBuilder๋ ๋๊ธฐํ๋ฅผ ์ง์ํ์ง ์์ ์ฑ๊ธ ์ฐ๋ ๋ ํ๊ฒฝ์์ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค.
์ฐจ์ด & ์ฅ๋จ์ : https://dev-coco.tistory.com/25
String ๊ฐ์ฒด๊ฐ ๋ถ๋ณ์ธ ์ด์
1. ์บ์ฑ ๊ธฐ๋ฅ์ ์ํ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ๊ณผ ์๋ ํฅ์ - Java์์ String ๊ฐ์ฒด๋ค์ Heap์ String Pool ์ด๋ผ๋ ๊ณต๊ฐ์ ์ ์ฅ๋๋๋ฐ, ์ฐธ์กฐํ๋ ค๋ ๋ฌธ์์ด์ด String Pool์ ์กด์ฌํ๋ ๊ฒฝ์ฐ ์๋ก ์์ฑํ์ง ์๊ณ Pool์ ์๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ํน์ ๋ฌธ์์ด ๊ฐ์ ์ฌ์ฌ์ฉํ๋ ๋น๋๊ฐ ๋์ ์๋ก ์๋นํ ์ฑ๋ฅ ํฅ์์ ๊ธฐ๋ํ ์ ์๋ค. 2. thread-safe - String ๊ฐ์ฒด๋ ๋ถ๋ณ์ด๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ์ฐ๋ ๋์์ ๋์์ ํน์ String ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋๋ผ๋ ์์ ํ๋ค. 3. ๋ณด์๊ธฐ๋ฅ - ์ค์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์์ด๋ก ๋ค๋ฃจ๋ ๊ฒฝ์ฐ ๊ฐ์ ๋ก ํด๋น ์ฐธ์กฐ์ ๋ํ ๋ฌธ์์ด ๊ฐ์ ๋ฐ๊พธ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋ณด์์ ์ ๋ฆฌํ๋ค. |
* ํด๋์ค ๋ฉค๋ฒ ๋ณ์ ์ด๊ธฐํ ์์
1) static ๋ณ์ ์ ์ธ๋ถ : ํด๋์ค๊ฐ ๋ก๋ ๋ ๋ ๋ณ์๊ฐ ์ ์ผ ๋จผ์ ์ด๊ธฐํ ๋๋ค. 2) ํ๋ ๋ณ์ ์ ์ธ๋ถ : ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ ์์ฑ์ block ๋ณด๋ค ์์ ์ด๊ธฐํ ๋๋ค. 3) ์์ฑ์ block : ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋ JVM์ด ๋ด๋ถ์ ์ผ๋ก locking( thread-safe ์์ญ ) |
* ๋ด๋ถ ํด๋์ค(Inner Class) ์ฅ์
1) ๋ด๋ถ ํด๋์ค์์ ์ธ๋ถ ํด๋์ค์ ๋ฉค๋ฒ์ ์์ฝ๊ฒ ์ ๊ทผํ ์ ์๋ค. 2) ์๋ก ๊ด๋ จ ์๋ ํด๋์ค๋ฅผ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ฌถ์ด์ ํํํจ์ผ๋ก์จ, ์บก์ํ๋ฅผ ์ฆ๊ฐ์ํค๊ณ , ์ฝ๋์ ๋ณต์ก์ฑ์ ๋ฎ์ถ ์ ์๋ค. 3) ์ธ๋ถ์์๋ ๋ด๋ถ ํด๋์ค์ ์ ๊ทผํ ์ ์์ผ๋ฏ๋ก, ์ฝ๋์ ๋ณด์์ฑ์ ๋์ผ ์ ์๋ค |
* Reflection
- ๊ตฌ์ฒด์ ์ธ ํด๋์ค ํ์ ์ ์์ง ๋ชปํด๋ ๊ทธ ํด๋์ค์ ๋ฉ์๋/ํ์ /๋ณ์๋ค์ ์ ๊ทผํ ์ ์๋๋ก ํด์ฃผ๋ ์๋ฐ API
* CheckedException & UnCheckedException
1) CheckedException์ ์คํํ๊ธฐ ์ ์ ์์ธก ๊ฐ๋ฅํ ์์ธ๋ฅผ ๋งํ๊ณ , ๋ฐ๋์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํด์ผ ํฉ๋๋ค. ๋ํ์ ์ธ Exception - IOException, ClassNotFoundException ๋ฑ 2) UncheckedException์ ์คํํ๊ณ ๋ ํ์ ์ ์ ์๋ ์์ธ๋ฅผ ๋งํ๊ณ , ๋ฐ๋ก ์์ธ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์๋ ๋ฉ๋๋ค. ๋ํ์ ์ธ Exception - NullPointerException, ArrayIndexOutOfBoundException ๋ฑ 3) RuntimeException์ UncheckedException์ ์์ํ ํด๋์ค์ด๊ณ , RuntimeException์ด ์๋ ๊ฒ์ CheckedException์ ์์ํ ํด๋์ค ์ ๋๋ค. |
* ์ปฌ๋ ์ ํ๋ ์์ํฌ : https://dev-coco.tistory.com/32
๋ค์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ ํ์คํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ํด๋์ค์ ์งํฉ์ ์๋ฏธํฉ๋๋ค. ์๋ฐ ์ปฌ๋ ์ ์๋ List, Set, Map ์ธํฐํ์ด์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฌ๋ฌ ๊ตฌํ์ฒด๊ฐ ์กด์ฌํ๊ณ , ์ด์ ๋ํด Stack, Queue ์ธํฐํ์ด์ค๋ ์กด์ฌํฉ๋๋ค. |
List / Set / Map / Stack / Queue
|
* ์ ๋ค๋ฆญ : https://dev-coco.tistory.com/28
|
* final VS finally VS finalize
|
* ์ง๋ ฌํ
|
์ถ์ฒ : https://dev-coco.tistory.com/153
์ต๊ทผ๋๊ธ