[Java ์ดํดํ๊ธฐ] 1. ์๋ฐ๋?

๐ Java๋?
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ (Object Oriented Programming) ์ธ์ด๋ก,
ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐํํ๊ณ ๋ชจ๋ํ ํฉ๋๋ค.
๐ Java์ ํน์ง
1. ์ถ์ํ (Abstraction)
์ถ์ํ๋ ๋ณต์กํ ์ค์ธ๊ณ๋ฅผ ๋จ์ํํ๋ ๊ณผ์ ์ ์๋ฏธํฉ๋๋ค. ํ๋ก๊ทธ๋๋ฐ์์๋ ์ค์ํ ์ ๋ณด๋ง์ ์ถ๋ ค๋ด๊ณ ๋ถํ์ํ ์ ๋ณด๋ ์ ๊ฑฐํ์ฌ ์ค๊ณ๋ฅผ ๋จ์ํ๊ฒ ๋ง๋๋ ๊ธฐ๋ฒ์ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, '์๋์ฐจ'๋ผ๋ ํด๋์ค๋ฅผ ์ค๊ณํ ๋ ์์ง์ ์๋ ์๋ฆฌ๋ ์ฐจ๋์ ๋ด๋ถ ๊ตฌ์กฐ๋ณด๋ค๋ ๊ธฐ๋ฅ(๊ฐ์, ์ ๋ ๋ฑ)์ ์ด์ ์ ๋ง์ถฅ๋๋ค.
2. ์บก์ํ (Encapsulation)
์บก์ํ๋ ๊ฐ์ฒด์ ๋ฐ์ดํฐ(์์ฑ)์ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ ๋ฉ์๋๋ฅผ ํ๋๋ก ๋ฌถ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๋ฅผ ํตํด ํด๋์ค ๋ด๋ถ์ ๊ตฌํ์ ์จ๊ธฐ๊ณ ์ธ๋ถ๋ก๋ถํฐ์ ์ง์ ์ ์ธ ์ ๊ทผ์ ์ ํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํด๋์ค์ ํ๋๋ ๋ณดํต private์ผ๋ก ์ ์ธํ๊ณ , ํด๋น ํ๋๋ฅผ ์กฐ์ํ ์ ์๋ ๋ฉ์๋๋ public์ผ๋ก ์ ๊ณตํ๋ ๋ฐฉ์์ ๋๋ค.
3. ๋คํ์ฑ (Polymorphism)
๋คํ์ฑ์ '๋ง์ ํํ๋ฅผ ๊ฐ์ง'์ ์๋ฏธํฉ๋๋ค. ์ฆ, ํ๋์ ๋ฉ์๋๋ ํด๋์ค๊ฐ ์ฌ๋ฌ ํํ๋ฅผ ๊ฐ์ง ์ ์๋๋ก ํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ค๋ฒ๋ก๋ฉ(๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ๋งค๊ฐ๋ณ์์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๋์ํ๋๋ก ํจ)๊ณผ ์ค๋ฒ๋ผ์ด๋ฉ(์์๋ฐ์ ๋ฉ์๋์ ๊ธฐ๋ฅ์ ํ์ ํด๋์ค์์ ์ฌ์ ์ํจ)์ด ๋ํ์ ์ธ ์์์ ๋๋ค. ๋คํ์ฑ์ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ค์ด ๊ฐ์์ ๋ฐฉ์์ผ๋ก ๋ฉ์๋๋ฅผ ๊ตฌํํ๊ฒ ํด์ค๋๋ค.
4. ์์ (Inheritance)
์์์ ํ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค์ ํน์ฑ(ํ๋์ ๋ฉ์๋)์ ์ด์ด๋ฐ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ณ , ์ค๋ณต์ ์ต์ํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Vehicle์ด๋ผ๋ ๊ธฐ๋ณธ ํด๋์ค๊ฐ ์๊ณ , ์ด๋ฅผ ์์๋ฐ๋ Car์ Motorcycle์ด๋ผ๋ ์๋ธํด๋์ค๊ฐ ์์ ๋, Car์ Motorcycle์ Vehicle์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Java๋ "Write Once, Run Anywhere" (WORA)๋ผ๋ ๋ชจํ ๋ก ์ค๊ณ
์ด๋ Java ํ๋ก๊ทธ๋จ์ ์ด๋ค ํ๋ซํผ์์๋ ์คํํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
๐ Java์ ์ฃผ์ ๊ตฌ์ฑ ์์
- JDK (Java Development Kit): Java ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ ๋ ํ์ํ ์ปดํ์ผ๋ฌ(javac), ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๋๊ตฌ๋ฅผ ํฌํจํฉ๋๋ค.
- JRE (Java Runtime Environment): Java ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ ๋ ํ์ํ JVM๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๊ธฐํ ํ์ผ๋ค์ ํฌํจํฉ๋๋ค.
- JVM (Java Virtual Machine): Java ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํํ๋ ๊ฐ์ ๋จธ์ ์ผ๋ก, Java ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ๋ฌ OS์์ ๋์ผํ๊ฒ ์คํ๋ ์ ์๋๋ก ํฉ๋๋ค. WORA๋ฅผ ๊ฐ๋ฅํ๊ฒ ๋์์ค๋๋ค.
โ ๏ธ ๊ธฐํ ํน์ง
๊ฐ์ฒด ์งํฅ: Java๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP) ์ธ์ด๋ก, ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐํํ๊ณ ๋ชจ๋ํ ํฉ๋๋ค.
ํ๋ซํผ ๋ ๋ฆฝ์ฑ: Java ์ ํ๋ฆฌ์ผ์ด์ ์ JVM(Java Virtual Machine) ์์์ ์คํ๋๋ฏ๋ก, Java ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋๋ ์์คํ ์ OS์ ๊ตฌ์ ๋ฐ์ง ์์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ: ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ฌ์ฉํด ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํ ํ์๊ฐ ์์ต๋๋ค.
๋ค์ค ์ค๋ ๋: Java๋ ๋ด์ฅ๋ ์ค๋ ๋ ์ง์์ ํตํด ๋ณ๋ ฌ ์ฒ๋ฆฌ์ ๋ฉํฐํ์คํน์ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค.
๋คํธ์ํฌ ์ผํธ๋ฆญ: ๋คํธ์ํน์ ์ํ ๊ด๋ฒ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ณตํ์ฌ, ๋คํธ์ํฌ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ๊ฐํธํ๊ฒ ํฉ๋๋ค.
๋ณด์: ์๋๋ฐ์ค ๋ณด์ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ, ์์คํ ๋ณด์์ ํด์น์ง ์์ผ๋ฉด์๋ ์์ ํ๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ ์ ์์ต๋๋ค.
๊ฐ๋ ฅํ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ: Java๋ ๊ด๋ฒ์ํ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Java Standard Edition)๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ฐ์ดํฐ ๊ตฌ์กฐ, ๋คํธ์ํน, ํ์ผ ์ฒ๋ฆฌ ๋ฑ ๋ค์ํ ์์ ์ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
Eclipse๋ฅผ ํตํ Java ๋ฐ ๋ด๊ฐ๋ณด๊ธฐ
public class Hello {
public static void main(String args[]) {
System.out.println("Hello, World !");
}
- main ํจ์๋ ํ๋ก๊ทธ๋จ์ ์์ํ๊ณ ๋๋ด์ค๋๋ค. ์ค์ง ํ๋๋ง ์กด์ฌํฉ๋๋ค. OS๊ฐ ์ ์ผ ๋จผ์ ํธ์ถํฉ๋๋ค.
- static : ๊ณต์ ํ๋ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํฉ๋๋ค. ํ๋์ ๋ฌด์ธ๊ฐ๋ฅผ ์ฌ๋ฌ ๋ช ์ด์ ๋๋ ์ธ ๋ ์ฌ์ฉํฉ๋๋ค. ( ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ ํจ๊ณผ )
- static์ object๊ฐ ์์ฑ๋์ง ์์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์คํ๋ฉ๋๋ค. ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ต๋๋ค.
- out์ ๋ํ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง ์์์์๋, ํธ์ถ์ด ๊ฐ๋ฅํ ๊ฒ์ด static์ ๊ฐ๋ ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
๐ฉต ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ
- ํด๋์ค: ๋ชจ๋ Java ์ฝ๋๋ ํด๋์ค ๋ด๋ถ์ ์กด์ฌํฉ๋๋ค. ํด๋์ค๋ ๊ฐ์ฒด์ ์ค๊ณ๋ ์ญํ ์ ํ๋ฉฐ, ์ํ(์์ฑ)์ ํ์(๋ฉ์๋)๋ฅผ ์ ์ํฉ๋๋ค.
- ๋ฉ์๋: ํน์ ์์ ์ ์ํํ๋ ์ฝ๋์ ์งํฉ์ ๋๋ค. ํ์(๋์ฌ)๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค. ํด๋์ค ๋ด์์ ์ ์๋ฉ๋๋ค.
- ๋ณ์: ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ผ๋ก, ํ์ ์ ๋ฐ๋ผ ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์์ต๋๋ค.
- ์์ฑ์: ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ๋ ํน๋ณํ ์ ํ์ ๋ฉ์๋๋ก, ํด๋์ค์ ์ด๋ฆ์ ์ฌ์ฉํด ์ ์๋ฉ๋๋ค.
- ํจํค์ง: ๊ด๋ จ ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ๊ทธ๋ฃนํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
๐งก ์ ๊ทผ ์ ํ์
- Private : ์ด ํค์๋๋ก ์ ์ธ๋ ๋ฉค๋ฒ๋ ํด๋น ํด๋์ค ๋ด์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํฉ๋๋ค.
- Default : ์ ๊ทผ ์ ํ์๋ฅผ ๋ช ์์ ์ผ๋ก ์ ์ฅํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฉ๋๋ฉฐ, ๊ฐ์ ํจํค์ง ๋ด์ ํด๋์ค์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํฉ๋๋ค
- Protected : ์ธ๋ถ ํจํค์ง ์ค ์์๋ฐ์ ์์๋ง ์ ๊ทผ ๊ฐ๋ฅ์ด ๊ฐ๋ฅํฉ๋๋ค. ๊ฐ์ ํจํค์ง ๋ด์ ํด๋์ค๋ ๋น์ฐํ ์ ๊ทผ ๊ฐ๋ฅํฉ๋๋ค.
- Public : ์ด ํค์๋๋ก ์ ์ธ๋ ๋ฉค๋ฒ๋ ์ด๋์๋ ์ ๊ทผํ ์ ์์ต๋๋ค. ์ธ๋ถ, ๋ด๋ถ ๋ชจ๋ ๊ฐ๋ฅํ๋ฉฐ, ํด๋์ค, ๋ณ์, ๋ฉ์๋, ์์ฑ์์ ๋ํ ์์ ํ ์ ๊ทผ์ ํ์ฉํฉ๋๋ค.
๐ค ๋ช ๋ช ๊ท์น
- ํด๋์ค : ์ฒซ ๊ธ์๋ ๋๋ฌธ์๋ก ์์ฑํฉ๋๋ค.
- ๋ฉ์๋, ๋ณ์ : ์๋ฌธ์ ์์ฑ, ๊ฐ(๋ฐ์ดํฐ)์ ์ ์ฅํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋๋ค.
- ์์ : ์ ๋ถ ๋๋ฌธ์ (ex MAX). ๋ณํ์ง ์๋ ๊ฐ์ ๋๋ค.
- ๋จ์ด์ ๋จ์ด๊ฐ ์ด์ด์ง ๋ ๋ ๋ฒ์งธ ๋จ์ด์ ์ฒซ ๊ธ์๋ ๋๋ฌธ์ (ex blackWhite , PinkWhite)
์๋ฐ๋ฅผ ์ฒ์ ์ ํ์ ๋ค๋ฉด , ์ด๋ฐ ๊ฒ ์๋ค ํ๊ณ ๋์ด๊ฐ๋ฉด์ ์๋์ ๋ด์ฉ๋ง ๊ธฐ์ตํด ์ฃผ์ธ์!

๊ฐ์ฒด๋ ์ค์ํ์ ์กด์ฌํ๋ ๋ชจ๋ ๊ฒ์ด ๋ ์ ์์ต๋๋ค. ex) ๋ถ์ด๋นต, ํ ๋ผ
์ค์ํ์ ๋ฌผ๊ฑด์ ๊ณต์ฅ์์ ์ฐ์ด๋ด๋ฏ์ด, ๋ฌด์ธ๊ฐ๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ ๊ตฌ์กฐ๋ฅผ ์์์ผ ํฉ๋๋ค.
๋ํ์ ์ธ ์์๋ก, ํด๋์ค๋ ๋ถ์ด๋นต ํ์ ๋๋ค.
ํ ๋ผ๋ ๊นก์ถฉ๊นก์ถฉ ๋ฐ๊ธฐ๋ ํ๊ณ , ๋น๊ทผ์ ๋จน๊ธฐ๋ ํฉ๋๋ค. ์ฌ๊ธฐ์ ํ ๋ผ๋ ๋ณ์(=๋ช ์ฌ),
๋จน๊ณ ๋ฐ๋ ํ์๋ ๋ฉ์๋(=๋์ฌ)์ ๋๋ค.