Object Oriented Programming(OOP)
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ° (OOP)
μΆμ λΉλ: μ
λΉμΆνκ·Έ: ν΄λμ€, μΈμ€ν΄μ€, μμ, μΆμ ν΄λμ€, μΈν°νμ΄μ€
ν΄λμ€ μ€κ³
κΈ°λ³Έ νΉμ§
- main λ©μλλ₯Ό ν¬ν¨νλ ν΄λμ€κ° κ°μ₯ λ¨Όμ μ€νλ¨
- ν΄λμ€μ ꡬμ±μμμλ λ©€λ² λ³μ, λ©€λ² λ©μλκ° μμ
- μΈλΆ μ κ·Όμ΄ λΆκ°λ₯νλλ‘ μ ν(μΊ‘μν) ν΄μΌν¨
κΈ°λ³Έ μΆλ ₯ λ©μλ
- μΆλ ₯:
System.out.print()
- μΆλ ₯+μ€λ°κΏ:
System.out.println()
- μμμ μν μΆλ ₯:
System.out.printf()
μ κ·Ό μ νμ
ν΄λμ€ λ΄ λ©€λ²λ€μ μ κ·Ό μμ€μ κ²°μ νλ ν ν°μΌλ‘, νλ‘κ·Έλ¨, ν¨ν€μ§, νμ ν΄λμ€, μμ μ ν΄λμ€ μμΌλ‘ μ κ·Όμμ€μ κ²°μ ν¨
μ νμ | μ€λͺ |
---|---|
public | λͺ¨λ κ°μ²΄μμ μ κ·Ό κ°λ₯ |
default | κ°μ ν¨ν€μ§ λ΄μμ μ κ·Ό κ°λ₯ |
protected | μμ κ³Ό νμ ν΄λμ€μμλ§ μ κ·Ό κ°λ₯ |
private | μμ μ ν΄λμ€μμλ§ μ κ·Ό κ°λ₯ |
μΈμ€ν΄μ€
μΈμ€ν΄μ€ μμ± λ° μ κ·Ό
// μΈμ€ν΄μ€ μμ±
<ν΄λμ€λͺ
> <λ³μλͺ
> = new <ν΄λμ€λͺ
>();
// μΈμ€ν΄μ€ λ©€λ² μ κ·Ό
<κ°μ²΄λ³μ>.<λ©€λ²μ΄λ¦>
λ³μ μ’ λ₯ μμ
public class Variable {
int c; // μΈμ€ν΄μ€λ³μ(λ©€λ²λ³μ)
static String d; // ν΄λμ€ λ³μ(λ©€λ²λ³μ)
void func(int c){ // λ§€κ°λ³μ(μ§μλ³μ)
this.c = c; // λ©€λ²λ³μ cμ μ§μλ³μ cκ° ν λΉ
}
public static void main(String args[]) {
int a = 30; // μ μνλ³μ(μ§μλ³μ)
Variable b = new Variable(); // μ°Έμ‘°νλ³μ(μ§μλ³μ)
b.func(a);
}
}
ν΄λμ€ λ³μ
- νΉλ³ν κ²½μ°κ° μλλΌλ©΄ μ κ·Όμ μ νν΄λ
- 곡μ νλ λ°μ΄ν°κ° νμν λ μ¬μ©
- μ μΈ νμ:
[<μ κ·Όμ νμ>] static <μλ£ν> <λ³μλͺ >;
- ν΄λμ€κ° μ½λμ μΈκΈλλ μκ° μμ±λλ©°, νλ‘κ·Έλ¨μ΄ λλ λκΉμ§ μ μ§
- ν΄λμ€ λ΄λΆμμ thisλ‘ λΆλ¬μ΄
μμ±μ λ©μλ
- ν΄λμ€λͺ κ³Ό κ°μ μ΄λ¦μΌλ‘ μ‘΄μ¬
- μλμΌλ‘ μ€νλλ©° λ³λ μ€ν λΆκ°
- 리ν΄λ¬Έ μ¬μ© λΆκ°λ₯
- μ΄κΈ°ν μμ μ μ¬μ©
- μ€λ²λ‘λ©: λμΌν λ©μλλͺ μ κ°μ§ λ©μλλ€μ κ°μμ μ νμ κΈ°μ€μΌλ‘ ꡬλΆ
κ°μ²΄μ§ν₯ κΈ°μ μ μ©
μμ
extends
ν€μλλ₯Ό μ¬μ©ν΄μ μμν΄λμ€ μ§μ - νμ:
class <νμ ν΄λμ€λͺ > extends <μμ ν΄λμ€λͺ > { ... }
- μ¬μ¬μ©, μ¬μ μ, μΆκ° λ©€λ²λ₯Ό νμ₯ν΄μ ꡬν
- λ©μλ μ€λ²λΌμ΄λ©: μμ ν΄λμ€μ λ©μλλ₯Ό μ¬μ μνμ¬ μ¬μ©νλ κΈ°μ
μ μΊμ€ν μμ
class SuperObject {
public void paint() {
draw();
}
public void draw() { // 4. μ€λ²λΌμ΄λ©λ νμ ν΄λμ€μ paint νΈμΆ
draw(); // 3. μκΈ°μμ λ€μ νΈμΆν¨
System.out.println("Super Object"); // 6. λ§μ§λ§μ μΆλ ₯
}
}
class SubObject extends SuperObject {
public void paint() {
super.draw(); // 2. μ€μ νΈμΆλλ λ©μλ -> μμ ν΄λμ€μ draw λ©μλ νΈμΆ
}
public void draw() {
System.out.println("Sub Object"); // 5. λ¬Έμμ΄ μΆλ ₯
}
}
public class Main {
public static void main(String[] args) {
SuperObject b = new SubObject(); // 1. μμ μ°Έμ‘°λ³μλ‘ μ
μΊμ€ν
b.paint();
}
}
// κ²°κ³Ό
// Sub Object
// Super Object
μΆμ ν΄λμ€
abstract class Shape { // μΆμ ν΄λμ€ μ μ
abstract void draw(); // μΆμ λ©μλ μ μ
}
class Circle extends Shape {
void draw() { // μΆμ λ©μλ μ€λ²λΌμ΄λ©
System.out.println("μμ 그립λλ€");
}
}
class Rectangle extends Shape {
void draw() { // μΆμ λ©μλ μ€λ²λΌμ΄λ©
System.out.println("μ¬κ°νμ 그립λλ€");
}
}
public class Helloworld {
public static void main(String[] args) {
Circle c1 = new Circle();
Rectangle r1 = new Rectangle();
c1.draw(); // λ©μλλͺ
ν΅μΌ κ°λ₯
r1.draw();
}
}
// κ²°κ³Ό
// μμ 그립λλ€
// μ¬κ°νμ 그립λλ€
μΈν°νμ΄μ€
λ€μ€ μμμ λ¬Έμ μ μ ν΄κ²°νκΈ° μν λ°©λ²μΌλ‘, μλ°λ λ μ΄μμ μμ ν΄λμ€λ₯Ό μμλ°λ λ€μ€μμμ κΈμ§ν¨. λ€μ€μμμ λ°©μ§νλ©΄μ λ€μ€μμμ μ΄μ μ κ°μ§λ κΈ°λ₯μ΄ μΈν°νμ΄μ€μ
νΉμ§
- λͺ¨λ λ©μλκ° μΆμ λ©μλλ‘λ§ κ΅¬μ±
interface
μimplements
ν€μλλ₯Ό μ¬μ©ν΄μ ꡬν, μμ- μμμ κΈ°μ‘΄ ν΄λμ€μ λ©€λ²λ₯Ό βνμ₯βνλ κ°λ μ΄μ§λ§ μΈν°νμ΄μ€λ νμ₯λ ν΄λμ€μ κΈ°λ₯μ βμ νβνκ±°λ βλ³κ²½βνλ βλ€νμ±βμ κ°λ
interface Coffee { // μμ
abstract void drink_coffee();
}
interface Cookie { // μμ
abstract void eat_cookie();
}
class Cafe implements Coffee, Cookie { // νμ
public void drink_coffee() {
System.out.println("컀νΌλ₯Ό λ§μ λ€.");
}
public void eat_cookie() {
System.out.println("μΏ ν€λ₯Ό λ¨Ήλλ€.");
}
public void talk() {
System.out.println("λνλ₯Ό νλ€.");
}
}
public class HelloWorld {
public static void main(String[] args) {
Cafe k = new Cafe();
k.drink_coffee();
k.eat_cookie();
k.talk();
Coffee c = k; // μ
μΊμ€ν
c.drink_coffee(); // 컀νΌλ§ λ§μ€ μ μμ
Cookie x = k; // μ
μΊμ€ν
x.eat_cookie(); // μΏ ν€λ§ λ¨Ήμ μ μμ
}
}
μμΈμ²λ¦¬
- μ€ν λμ€μ λ¬Έμ κ° λ°μνλ©΄ νλ‘κ·Έλ¨μ΄ λ©μΆκ±°λ μ’ λ£λλ κ²μ λ°©μ§νκΈ° μν μ½λ
- μ€νλ λ¬Έλ² μ€λ₯(Syntax Error), μλμΉ μμ μλ λ° μ λ ₯μ μμΈλΌκ³ ν¨
- μμΈλ₯Ό μλ³ν μμμ λ³λλ‘ μ§μ ν΄μΌ ν¨
public class HelloWorld {
public static void main(String[] args) {
try { // μμΈ κ°μ§ μμ
<μ½λ μμ>
}
catch() { // μμΈ κ°μ§ μ μ€ν μμ
<μ½λ μμ>
}
finally { // 무쑰건 μ€νλλ μμ
<μ½λ μμ>
}
}
}
μ€λ λ(Thread)
νλμ νλ‘μΈμ€(νλ‘κ·Έλ¨)μμ λ μ΄μμ μΌμ λμμ μννλ κ²
Thread ν΄λμ€ μμμ ν΅ν ꡬν
class Box extends Thread { // Thread ν΄λμ€ μμ
public void run() { // run λ©μλ μ¬μ μ
System.out.println("message"); // μ€λ λ μ€ν μ μνλλ μμ
}
}
public class Main {
public static void main(String[] args) {
Box a = new Box(); // μΌλ°μ μΈ κ°μ²΄ μμ± λ°©μ
a.start(); // μ€λ λ μν λ©μλ
}
}
// κ²°κ³Ό
// message
Runnable μΈν°νμ΄μ€λ₯Ό ν΅ν ꡬν
class Box implements Runnable { // implements μΈν°νμ΄μ€ μμ
public void run() { // run λ©μλ μ¬μ μ
System.out.println("message"); // μ€λ λ μ€ν μ μνλλμμ
}
}
public class Main {
public static void main(String[] args) {
Thread t = new Thread(new Box()); // Thread μμ±μμμ λ€λ₯Έ μμ±μ νΈμΆ
t.start(); // μ€λ λ μν λ©μλ
}
}
// κ²°κ³Ό
// message
λ©ν°μ€λ λ©
- λ€μμ μ€λ λλ₯Ό λμμ μ€ν
- μμ μλΉλ₯Ό μ€μΌ μ μμ
- μμμ 곡μ νλ―λ‘ μΆ©λμ΄ μΌμ΄λ κ°λ₯μ±κ³Ό 볡μ‘ν μ½λ©μΌλ‘ λ²κ·Έ κ°λ₯μ±μ΄ 컀μ§
μ€λ λ μν
- Runnable: start λ©μλλ‘ μ€νμ΄ μ€λΉλ μν
- Running: run λ©μλλ‘ μ€λ λκ° μ€νλλ μν
- Blocked: μ€λ λκ° μ μ μμ μ λ©μΆ λ¨κ³
- Dead(Done): μ€λ λ μνμ΄ μλ£λ μν