public, protected, default, private
public λͺ¨λ μ κ·Ό κ°λ₯
private μκΈ°μμ λ§ μ κ·Όκ°λ₯
protected κ°μ ν¨ν€μ§, ν¨λ°λ¦¬μμ μ κ·Ό κ°λ₯ (family, package)
default κ°μ ν¨ν€μ§μμ μ κ·Όκ°λ₯ (package)
public μ΄λμλ importλ§ νλ©΄ μ κ·Όκ°λ₯ν public
π΄π‘π’
1οΈβ£self : μ κ·Όκ°λ₯ π’
public class Main {
π‘publicπ‘ static String testField = "testField";
public static void main(String[] args) {
System.out.println(new Main().testField);
}
}
2οΈβ£same package : μ κ·Όκ°λ₯ π’
public class SamePackage {
public SamePackage() {
System.out.println(Main.testField);
}
}
3οΈβ£other package-child : μ κ·Όκ°λ₯ π’
public class Child extends Main {
public Child() {
System.out.println(Main.testField);
}
}
4οΈβ£other package : μ κ·Όκ°λ₯ π’
import Main;
public class OtherPackage {
public OtherPackage() {
System.out.println(Main.testField);
}
}
protected λ€λ₯Έ ν¨ν€μ§λ ν΄λλ λ°°μ²νμ§λ§ κ·Έλλ μμμ μ±κΈ°λ protected
π΄π‘π’
1οΈβ£self : μ κ·Όκ°λ₯ π’
public class Main {
π‘protectedπ‘ static String testField = "testField";
public static void main(String[] args) {
System.out.println(new Main().testField);
}
}
2οΈβ£same package : μ κ·Όκ°λ₯ π’
public class SamePackage {
public SamePackage() {
System.out.println(Main.testField);
}
}
3οΈβ£other package-child : μ κ·Όκ°λ₯ π’
public class Child extends Main {
public Child() {
System.out.println(Main.testField);
}
}
4οΈβ£other package : μ κ·ΌλΆκ° β
import Main;
public class OtherPackage {
public OtherPackage() {
System.out.println(Main.testField);
}
}
default κΈ°λ³Έμ μΌλ‘ κ°μ ν¨ν€μ§ λ΄ μ κ·Όλ§ νμ©νλ default
π΄π‘π’
1οΈβ£self : μ κ·Όκ°λ₯ π’
public class Main {
π‘defaultπ‘ static String testField = "testField";
public static void main(String[] args) {
System.out.println(new Main().testField);
}
}
2οΈβ£same package : μ κ·Όκ°λ₯ π’
public class SamePackage {
public SamePackage() {
System.out.println(Main.testField);
}
}
3οΈβ£other package-child : μ κ·ΌλΆκ° β
public class Child extends Main {
public Child() {
System.out.println(Main.testField);
}
}
4οΈβ£other package : μ κ·ΌλΆκ° β
import Main;
public class OtherPackage {
public OtherPackage() {
System.out.println(Main.testField);
}
}
private μκΈ°μμ λ§ μ κ·Όκ°λ₯ν private
π΄π‘π’
1οΈβ£self : μ κ·Όκ°λ₯ π’
public class Main {
π‘privateπ‘ static String testField = "publicField";
public static void main(String[] args) {
System.out.println(new Main().testField);
}
}
2οΈβ£same package : μ κ·ΌλΆκ° β
public class SamePackage {
public SamePackage() {
System.out.println(Main.testField);
}
}
3οΈβ£other package-child : μ κ·ΌλΆκ° β
public class Child extends Main {
public Child() {
System.out.println(Main.testField);
}
}
4οΈβ£other package : μ κ·ΌλΆκ° β
import Main;
public class OtherPackage {
public OtherPackage() {
System.out.println(Main.testField);
}
}
κ°μ²΄μ λ°μ΄ν°λ₯Ό μμ νκ² μ½κ³ μμ νκΈ° μν μΊ‘μν λꡬ
class Person {
public String name;
}
public class Main {
public static void main(String[] args) {
Person p = new Person();
p.name = "John";
System.out.println(p.name);
}
}
π΄π‘π’
package gettersetter;
class Person {
private String name;
π‘getter
public String getName() {
return name;
}
π‘setter
public void setName(String name) {
this.name = name;
}
}
public class Main {
public static void main(String[] args) {
Person p = new Person();
p.setName("John");
System.out.println(p.getName());
}
}
π‘getterλ§ μ¬μ©νλ©΄ read-only λ‘λ λ§λ€ μ μλ€.
| mvc | μ€λͺ |
|---|---|
| model | DBμ κ΅¬μ‘°κ° μλ° μ½λλ‘ λμ΄μλ€ |
| view | νλ©΄ |
| controller | μλΉμ€ |
λ€νμ±
λΆλͺ¨ ν΄λμ€ νμ
μ μ°Έμ‘°λ³μλ‘ μμ κ°μ²΄λ₯Ό κ°λ¦¬ν¬ μ μμ
μ€ν μμ μ μ€μ κ°μ²΄μ λ°λΌ λ€λ₯Έ κ°μ²΄κ° ν λΉλ¨ (λμ λ°μΈλ©)
π€βλ€νμ± μ°λ μ΄μ κ° λκΉ?
π‘λ°°μ΄λ‘ λ¬Άμ΄μ κ³΅ν΅ κΈ°λ₯μ μ¬μ©νκΈ° νΈνκ²λ νλ €κ³
π΄π‘π’
package polimorphism;
class Animal {
public void makeSound() {
System.out.println("animal sound");
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("bark");
}
}
class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("meow");
}
}
class Hamster extends Animal {
@Override
public void makeSound() {
System.out.println("squeak");
}
}
public class Main {
public static void main(String[] args) {
π‘Typeμ Animal, λ©μλλ κ° λλ¬Όμ λ©μλκ° νΈμΆλ¨ λ©μλκ° νΈμΆλ¨
Animal dog = new Dog();
Animal cat = new Cat();
Animal hamster = new Hamster();
dog.makeSound();
cat.makeSound();
hamster.makeSound();
}
}
βΆοΈ
bark
meow
squeak
π€βλ€μ€μμ λ¬Έμ
π΄π‘π’
class Dog {
public void makeSound() {
System.out.println("λ©λ©");
}
}
class Cat {
public void makeSound() {
System.out.println("μΌμΉ");
}
}
class Kimera extends Dog, Cat {
// π‘kimera.makeSound(); νλ©΄ μ΄λ€ λ©μλκ° νΈμΆλμ΄μΌ νλκ°???
}
μΆμ ν΄λμ€ = μ€κ³ ν νλ¦Ώ. μ½κ° ꡬνλ μ€κ³λ κ°μ? μΈν°νμ΄μ€μ ν΄λμ€μ μ€κ° λ¨κ³λ€.
μΆμ ν΄λμ€λ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μλ€.
μμμ ν΅ν΄ μμ ν΄λμ€κ° μμ±νλ€.
μΈν°νμ΄μ€μ λ¬λ¦¬,
νλ μμ±μ κ°μ§ μ μλ€.
νλ μ΄μμ μΆμ λ©μλλ₯Ό ν¬ν¨νλ€.
μΌλ° λ©μλλ ν¬ν¨μ΄ κ°λ₯νλ€.
λ€μ€ μμμ΄ λΆκ°λ₯νλ€.
π΄π‘π’
abstract static class Shape {
String name;
public String getName() {
return name;
}
// π‘λνμ λμ΄ : λνλ§λ€ λ€λ₯΄κ² ꡬνν΄μΌ νλ λΆλΆμ΄λ―λ‘ μΆμ λ©μλλ‘ λλ€.
// μΆμ λ©μλλ₯Ό ν¬ν¨νκΈ° λλ¬Έμ μΆμ ν΄λμ€κ° λλ€.
abstract double area();
}
static class Rectangle extends Shape {
private String name = "Rectangle";
private int x;
int y;
public Rectangle(int x, int y) {
this.x = x;
this.y = y;
}
public String getName() {
return name;
}
public double area() {
return x * y;
}
}
static class Circle extends Shape {
private String name = "Circle";
int r;
public Circle(int r) {
this.r = r;
}
public String getName() {
return name;
}
public double area() {
return Math.PI * r * r;
}
}
public class Main {
public static void main(String[] args) {
Shape r = new Rectangle(2, 3);
Shape c = new Circle(5);
Shape[] shapes = {r, c};
for (Shape s : shapes) {
System.out.println(s.getName() + " μ λ©΄μ μ " + s.area() + "μ
λλ€.");
}
}
}
μΈν°νμ΄μ€ = μ€κ³λ
ν΄λμ€κ° λ°λΌμΌ ν μ€κ³λ.
ꡬνμ ν΄λμ€κ° μμ±νλ€.
ν΄λμ€μ λ¬λ¦¬,
νλ μμ΄, μΆμ λ©μλλ§ μ μνλ€.
implemet ν ν΄λμ€λ λ°λμ λͺ¨λ μΆμ λ©μλλ₯Ό ꡬνν΄μΌ νλ€.
μλ°μμλ λ€μ€ ꡬνμ΄ κ°λ₯νλ€.
π΄π‘π’
abstract class Animal {
abstract void makeSound();
public void sleep() {
System.out.println("μλμ€...");
}
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("λ©λ©");
}
}
interface flyable {
void fly();
}
interface layEggs {
void layEggs();
}
// π‘ μλ°λ λ€μ€ extendsλ λΆκ°, λ€μ€ implememtsλ κ°λ₯νλ€.
class Bird extends Animal implements flyable, layEggs {
@Override
void makeSound() {
System.out.println("μ§Ήμ§Ή");
}
@Override
public void fly() {
System.out.println("λ κΈ°");
}
@Override
public void layEggs() {
System.out.println("μ λ³κΈ°");
}
}
public class Main {
public static void main(String[] args) {
Animal dog = new Dog(); // π‘ μΆμν΄λμ€λ μΈμ€ν΄μ€νκ° κ°λ₯νλ€.
dog.makeSound();
dog.sleep();
Animal bird = new Bird();
bird.makeSound();
bird.sleep();
// π‘ bird μΈμ€ν΄μ€μ ν΄λμ€κ° Animalμ΄κΈ° λλ¬Έμ Animalμλ fly, layEggs λ©μλκ° μμ΄μ Bird ν΄λμ€λ‘ λ€μ΄μΊμ€ν
μν¨λ€μ μ¬μ©ν΄μΌ νλ€.
if (bird instanceof Bird) {
Bird bird2 = (Bird) bird;
bird2.fly();
bird2.layEggs();
}
}
}
ν΄λμ€ vs μΆμ ν΄λμ€ vs μΈν°νμ΄μ€
| κ΅¬λΆ | μΌλ° ν΄λμ€ | μΆμ ν΄λμ€ | μΈν°νμ΄μ€ |
|---|---|---|---|
| μμ ν€μλ | extends | extends | implements |
| instance μμ± | β κ°λ₯ | βλΆκ° | βλΆκ° |
| νλ(λ³μ) | β κ°λ₯ | β κ°λ₯ | public static finalλ§ κ°λ₯ |
| μμ±μ | β κ°λ₯ | β κ°λ₯ (νμ ν΄λμ€μμ μμ±μλ‘ μμ ν΄λμ€μ νλ μ΄κΈ°ν κ°λ₯) | βλΆκ° |
| abstract λ©μλ | μ νμ ν¬ν¨ | 1κ° μ΄μ | μ λΆ abstract (Java 8 μ΄μ ) |
| μΌλ° λ©μλ | β κ°λ₯ | β κ°λ₯ | Java 8 μ΄ν defaultλ‘ κ°λ₯ (νμ§λ§ κ±°μ λΆκ°λ₯) |
| λ€μ€ μμ/ꡬν | βλΆκ° | βλΆκ° | β κ°λ₯ |
| μ κ·Όμ μ΄μ | μ ν μμ | μ ν μμ | μ λΆ public |
| μ¬μ© μ©λ | μ½λ μ¬μ¬μ© | κ³΅ν΅ μ½λ μ 곡 + μΆμλ©μλμ λ΄λΆ μ½λ λ€μμ± | κΈ°λ₯ ꡬν κ°μ |
ALU μ°μ λ° λ
Όλ¦¬ μ°μ° μ²λ¦¬
μ μ΄ μ λ λͺ
λ Ήμ΄ μΈμΆ, ν΄λ
, μ€ν νλ¦ μ μ΄
λ μ§μ€ν° μ΄κ³ μ μμ μ μ₯μ
νλκ·Έ λ μ§μ€ν° μ°μ° κ²°κ³Ό μνλ₯Ό νμ
Fetch λ€μ λͺ
λ Ήμ΄λ₯Ό λ©λͺ¨λ¦¬μμ μ½μ
->
Decode ν΄μ
->
Execute ALUλ λ μ§μ€ν°λ₯Ό μ¬μ©ν΄ μ€μ μν