- Today
- Total
- leetcode
- database
- λ°±μ€
- PS
- λ€μ΅μ€νΈλΌ
- μλ°μμ μ
- CS
- μΈν΄
- ꡬν
- Algorithm
- μλ°
- Graph
- μμμ λ ¬
- spring
- νλ‘κ·Έλλ¨Έμ€
- 그리λ
- array
- java
- 벨λ§ν¬λ
- BFS
- λ°±μλ
- pytorch
- λ°μ΄ν°λ² μ΄μ€
- MST
- μ‘Έμ μν
- μλ£κ΅¬μ‘°
- dp
- tree
- λ¬Έλ²
- OOP
Partially Committed
[CH07] κ°μ²΄μ§ν₯νλ‘κ·Έλλ°2 (OOP) λ³Έλ¬Έ
λ³Έ ν¬μ€ν μ μλ°μ μ μ κ΅μ¬λ₯Ό 곡λΆνλ©°, κ°λ¨ν μ 리/κΈ°λ‘ μ©λλ‘ μμ±νμμ΅λλ€. νΉμ¬, μλͺ»λ λ΄μ©μ΄ μλ€λ©΄ μ§μ ν΄μ£Όμλ©΄ κ°μ¬νκ² μ΅λλ€.
1. μμ(Inheritance)
[μμμ μ μμ μ₯μ ]
μμμ΄λΌλ κ²μ κΈ°μ‘΄ ν΄λμ€λ₯Ό νμ©νμ¬ μλ‘μ΄ ν΄λμ€λ₯Ό μμ±νλ κ²μ λ§νλ©°, μ΄λ₯Ό μ΄μ©νλ©΄ λ³΄λ€ μ μ μμ μ½λλ‘ μλ‘μ΄ ν΄λμ€λ₯Ό μμ±ν μ μκ³ κ΄λ¦¬κ° μ©μ΄ν΄μ§λ€. μ΄λ₯Ό ν΅ν΄ μ½λμ μ¬μ¬μ©μ±μ λμ΄κ³ μ€λ³΅μ μ κ±°νμ¬ μμ°μ±κ³Ό μ μ§λ³΄μμ ν¬κ² κΈ°μ¬ν μ μκ²λλ€. μλ°μμ μμμ ꡬννλ €λ©΄ μλ‘ μμ±νκ³ μ νλ ν΄λμ€ μ΄λ¦ λ€μ extends λ₯Ό μμ±ν΄μ£Όλ©΄ λλ€.
class Child extends Parent { ... }
μμ κ°μ΄ νλ©΄ Child λΌλ μλ‘μ΄ Class λ Parent λΌλ Class λ‘λΆν° μμλ°λλ€λ κ²μ΄λ€. μ΄λ¬ν κ΄κ³μμ Parent λ μ‘°μ ν΄λμ€(λΆλͺ¨/parent ν΄λμ€, μμ/super ν΄λμ€, κΈ°λ°/base ν΄λμ€) λΌκ³ νλ©°, Child λ μμ ν΄λμ€(μμ/child, νμ/sub, νμ/derived) λΌκ³ νλ€. ν΄λμ€ κ°μ κ΄κ³λ₯Ό κ·Έλ¦ΌμΌλ‘ νννκΈ°λ νλλ° μ΄λ μμκ³μΈ΅λ(class hierarchy) λΌκ³ νλ€.
Parent ν΄λμ€μ λ©€λ² λ³μλ₯Ό νλ μΆκ°νλ©΄ μμ ν΄λμ€λ λΆλͺ¨ ν΄λμ€μ λ©€λ²λ₯Ό λͺ¨λ μμλ°μμ, child ν΄λμ€μλ μλμ μΌλ‘ ν΄λΉ λ©€λ² λ³μλ₯Ό κ°μ§κ² λλ€. κ·Έλ¬λ©΄ λ°λλ‘ μμ ν΄λμ€μ λ©μλλ₯Ό νλ μΆκ°νλ©΄ μ΄λ»κ² λ κΉ? child ν΄λμ€μ μΆκ°μ μΌλ‘ μ½λλ₯Ό μμ±νλλΌλ Parent ν΄λμ€λ μλ¬΄λ° μν₯μ λ°μ§ μλλ€. μμ ν΄λμ€λ μ‘°μ ν΄λμ€μ λͺ¨λ λ©€λ²λ€μ μμλ°κΈ° λλ¬Έμ, μμμ κ±°λν μλ‘ μμ ν΄λμ€λ λ λ§μ λ©€λ²λ₯Ό κ°μ§κ² λ κ²μ΄λ€. μμμ λ°λλ€λ κ²μ κ·Έλμ μ‘°μ ν΄λμ€λ‘λΆν° νμ₯(extend)λλ€λ κ°λ μΌλ‘ μ΄ν΄ν μ μκ³ , μ΄κ²μ΄ μμμ μ§μ νλ ν€μλκ° extends μΈ μ΄μ κ° λκΈ°λ νλ€.
- μμ±μμ μ΄κΈ°ν λΈλμ μμλμ§ μμΌλ©°, λ©€λ²λ§ μμλλ€.
- λν μμ ν΄λμ€μ λ©€λ² κ°μλ μ‘°μ ν΄λμ€λ³΄λ€ νμ κ°κ±°λ λ§λ€.
Parent ν΄λμ€λ‘λΆν° μμλ°μ Child, Child2 ν΄λμ€κ° μλ€κ³ μκ°ν΄λ³΄μ. κ°κ°μ ν΄λμ€λ μμλ°μ ν΄λμ€μμ λ©€λ²λ₯Ό 곡μ νλ, Child μ Child2 λ μλ‘ μλ¬΄λ° κ΄κ³λ μ±λ¦½λμ§ μμμ μ£Όμνμ. ν΄λμ€ κ°μ κ΄κ³μμλ λΆλͺ¨ - μμ κ΄κ³λ§ μ‘΄μ¬νλ©°, νμ κ΄κ³λ κ³ λ €μΉ μλλ€. μμ κ΄κ³κ° 볡μ‘ν΄μ§λλΌλ μ½λμ λ³κ²½μ΄ νμν κ²½μ°, μ΅μλ¨ ν΄λμ€μ μ½λλ§ λ³κ²½νλ©΄ λͺ¨λ λ°μλκΈ° λλ¬Έμ μ½λμ μ€λ³΅μ λ°©μ§νκ³ μ μ§λ³΄μκ° μ¬μμ§λ€.
class Parent {...}
class Child extends Parent { ... }
class Child2 extends Parent { ... }
class GrandChild extends Child { ... }
μμ κ°μ΄ μμ±νλ©΄, GrandChild ν΄λμ€λ Child ν΄λμ€μ Parent ν΄λμ€μ λͺ¨λ λ©€λ²λ₯Ό μμλ°λλ€. μ΄λ¬ν κ²½μ° GrandChild ν΄λμ€μ Parent ν΄λμ€λ μλ‘ κ°μ μμ κ΄κ³μ λμ¬μλ€κ³ νννλ€. Parent ν΄λμ€μ νλμ λ©€λ² λ³μλ₯Ό μΆκ°νλ€λ©΄, Child, Child2 ν΄λμ€λ μ΄λ₯Ό μμλ°λλ€. κ·Έλ¦¬κ³ GrandChild ν΄λμ€ λν Child ν΄λμ€λ₯Ό μμλ°μΌλ―λ‘ λ°μλλ€. μ 체 νλ‘κ·Έλ¨μ ꡬμ±νλ ν΄λμ€λ€μ μ μ νκ² μ€κ³ν΄μ£Όλ κ²μ΄ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μμ κ°μ₯ μ€μν λΆλΆμ΄λ€.
class Tv{
boolean power;
int channel;
void power(){power = !power;}
void channelUp(){++channel;}
void channelDown(){--channel;}
}
class CaptionTv extends Tv{
boolean caption;
void displayCaption(String text){
if(caption){
System.out.println(text);
}
}
}
class source{
public static void main(String[] args) {
CaptionTv ctv = new CaptionTv();
ctv.channel = 10;
ctv.channelUp();
System.out.println(ctv.channel);
ctv.displayCaption("Hello, World");
ctv.caption = true;
ctv.displayCaption("Hello, World");
}
}
μμ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±νλ©΄,
μ‘°μ ν΄λμ€μ λ©€λ²μ μμ ν΄λμ€μ λ©€λ²κ° ν©μ³μ§ νλμ μΈμ€ν΄μ€λ‘ μμ±λλ€.
[ν΄λμ€ κ°μ κ΄κ³ - ν¬ν¨κ΄κ³]
μμμ ν΅ν΄μ ν΄λμ€ κ° κ΄κ³λ₯Ό λ§λ€κ³ μ¬μ¬μ©νλ λ°©λ²μ λν΄ μ΄ν΄λ³΄μλλ° μμ μΈμλ ν΄λμ€λ₯Ό μ¬μ¬μ©νλ λ λ€λ₯Έ λ°©λ²μ ν¬ν¨(Composite) κ΄κ³λ₯Ό λ§λ€μ΄ μ£Όλ κ²μ΄λ€. μ΄λ νλμ ν΄λμ€μ λ©€λ²λ³μλ‘ λ€λ₯Έ ν΄λμ€ νμ μ μ°Έμ‘°λ³μλ₯Ό μ μΈνλ κ²μ λ§νλ€.
class Point{
int x;
int y;
}
class Circle{
Point c = new Point();
int r;
}
μμ κ°μ΄ νλμ ν΄λμ€λ₯Ό μμ±ν λ, λ€λ₯Έ ν΄λμ€λ₯Ό λ©€λ²λ³μλ‘ μ μΈνμ¬ ν¬ν¨μν€λ©΄ λ³΄λ€ κ°κ²°νκ² ν΄λμ€λ₯Ό μμ±ν μ μλ€.
[ν΄λμ€ κ°μ κ΄κ³ κ²°μ νκΈ°]
ν΄λμ€λ₯Ό μμ±ν λ μμκ΄κ³λ₯Ό μ¬μ©ν μ§, ν¬ν¨ κ΄κ³λ₯Ό μ¬μ©ν μ§ μ ν΄μ£Όλ κ²μ λ€μ λͺ¨νΈν μ μ΄ μμ μ μλ€. ν΄λμ€λ₯Ό κ°μ§κ³ λ¬Έμ₯μ λ§λ€μμ λ, ~μ ~μ΄λ€ λΌλ λ¬Έμ₯μ΄ μμ°μ€λ½λ€λ©΄ μμ κ΄κ³κ° μ’μ κ²μ΄κ³ ~μ ~μ κ°μ§κ³ μλ€λ λ¬Έμ₯μ΄ μμ°μ€λ½λ€λ©΄ ν¬ν¨ κ΄κ³κ° μ’μ κ²μ΄λ€.
class Shape{
String color = "black";
void draw(){
System.out.printf("[Color = %s]\n", color);
}
}
class Point{
int x;
int y;
Point(int x, int y){
this.x = x;
this.y = y;
}
Point() {
this(0, 0);
}
String getXY(){
return "(" + x + "," + y + ")";
}
}
class Circle extends Shape{
Point center;
int r;
Circle(){
this(new Point(0, 0), 100);
}
Circle(Point center, int r){
this.center = center;
this.r = r;
}
void draw(){
System.out.printf("[center = (%d, %d), r = %d, color = %s\n",
center.x, center.y, r, color);
}
}
class Triangle extends Shape{
Point[] p = new Point[3];
Triangle(Point[] p){
this.p = p;
}
void draw(){
System.out.printf("[p1=%s, p2 = %s, p3=%s, color = %s\n",
p[0].getXY(), p[1].getXY(), p[2].getXY(), color);
}
}
class source{
public static void main(String[] args) {
Point[] p = { new Point(100, 100),
new Point(140, 50),
new Point(200, 100)
};
Triangle t = new Triangle(p);
Circle c = new Circle(new Point(150, 150), 50);
t.draw();
c.draw();
}
}
class source {
public static void main(String[] args) {
Deck d = new Deck();
Card c = d.pick(0);
System.out.println(c.toString());
d.shuffle();
c = d.pick();
System.out.println(c);
// μ°Έμ‘° λ³μμ μΆλ ₯μ΄λ λ§μ
μ°μ°μλ₯Ό μ΄μ©ν μ°Έμ‘°λ³μμ λ¬Έμμ΄μ κ²°ν©μλ toString() μ΄ μλμ μΌλ‘ νΈμΆλμ΄
// μ°Έμ‘° λ³μλ₯Ό λ¬Έμμ΄λ‘ λμΉν λ€μ μ²λ¦¬νλ€.
// toString() μ λͺ¨λ ν΄λμ€μ μ‘°μμΈ Object ν΄λμ€μ μ μλ κ²μ΄λ€.
}
}
class Deck {
final int CARD_NUM = 52;
Card cardArr[] = new Card[CARD_NUM];
Deck() {
int i = 0;
for (int k = Card.KIND_MAX; k > 0; k--)
for (int n = 0; n < Card.NUM_MAX; n++)
cardArr[i++] = new Card(k, n + 1);
}
Card pick(int index) {
return cardArr[index];
}
Card pick() {
int index = (int) (Math.random() * CARD_NUM);
return pick(index);
}
void shuffle() {
for (int i = 0; i < cardArr.length; i++) {
int r = (int) (Math.random() * CARD_NUM);
Card temp = cardArr[i];
cardArr[i] = cardArr[r];
cardArr[r] = temp;
}
}
}
class Card {
static final int KIND_MAX = 4;
static final int NUM_MAX = 13;
static final int SPADE = 4;
static final int DIAMOND = 3;
static final int HEART = 2;
static final int CLOVER = 1;
int kind;
int number;
Card() {
this(SPADE, 1);
}
Card(int kind, int number) {
this.kind = kind;
this.number = number;
}
public String toString() {
String[] kinds = {"", "Clover", "Heart", "Diamond", "Spade"};
String numbers = "0123456789XJQK";
return "kind = " + kinds[this.kind] + ", number = " + numbers.charAt(this.number);
}
}
[λ¨μΌ μμ: Single Inheritance]
C++ μμλ μ¬λ¬ μ‘°μ ν΄λμ€λ‘λΆν° μμλ°λ λ€μ€ μμ(Multiple inheritance)μ νμ©νλ μλ°μμλ μ€λ‘μ§ λ¨μΌ μμλ§μ΄ νμ©λλ€. λ€μ€ μμμ μ¬μ©ν μ μμΌλ©΄ μ¬λ¬ ν΄λμ€λ‘ λΆν° μμλ°λ 볡ν©μ μΈ κΈ°λ₯μ κ°μ§λ ν΄λμ€λ₯Ό μ½κ² μ€κ³ν μ μμ§λ§, μλ‘ λ€λ₯Έ ν΄λμ€λ‘λΆν° μμλ°μ λ©€λ² κ°μ μ΄λ¦μ΄ λ§μ½ κ²ΉμΉλ κ²½μ°μλ ꡬλ³ν μ μλ€λ ν° λ¨μ μ΄ μ‘΄μ¬νλ€. μ΄λ₯Ό ν΄κ²°ν μ μλ νκ°μ§ λ°©λ²μ μ‘°μ ν΄λμ€μ λ©μλ μ΄λ¦μ΄λ 맀κ°λ³μλ₯Ό λ°κΎΈλ μκ° μμ§λ§, μ΄λ¬λ©΄ μ‘°μ ν΄λμ€μ κ²ΉμΉλ μ΄λ¦μ κ°μ§ λ©μλ/λ³μλ₯Ό μ¬μ©νλ λͺ¨λ ν΄λμ€λ₯Ό λ³κ²½ν΄μΌ νλ―λ‘ κ²°μ½ κ°λ¨μΉ μμ λ°©λ²μ΄λ€. μλ°μμλ λ€μ€ μμμ μ΄λ¬ν λ¬Έμ μ μ ν΄κ²°νκΈ° μν΄ λ€μ€μμμ μ₯μ μ κ³Όκ°ν ν¬κΈ°νκ³ λ¨μΌ μμλ§ νμ©νμλ°. λ¨μΌ μμμ νλμ μ‘°μ ν΄λμ€λ§ κ°μ§ μ μμ΄ λ€μ λΆνΈν μ μ΄ μμ μ μμ§λ§, μ무λλ ν΄λμ€ κ°μ κ΄κ³κ° λ³΄λ€ λͺ νν΄μ§κ³ μ λ’°μ±μ΄ λμμ§λ€λ κ²μ΄ ν° μ₯μ μ΄λ€. λ¨μΌμμλ§ νμ©νμ§λ§, ν¬ν¨κ΄κ³λ₯Ό μ μ ν νμ©νλ©΄ ν¨μ¨μ μΈ μ½λλ₯Ό μμ±ν μ μλ€.
[Object ν΄λμ€ - λͺ¨λ ν΄λμ€μ μ‘°μ]
Object ν΄λμ€λ λͺ¨λ ν΄λμ€ μμ κ³μΈ΅λμ μ΅μμ μ‘°μ ν΄λμ€λ‘, λ€λ₯Έ ν΄λμ€λ‘λΆν° μμλ°μ§ μλ λͺ¨λ ν΄λμ€λ Object ν΄λμ€λ‘λΆν° μμμ λ°λλ€. μλ¬΄λ° μμμ λ°μ§ μλ ν΄λμ€λ₯Ό μ μνλ©΄ μ»΄νμΌλ¬μ μν΄ μλμ μΌλ‘ extends Object λ₯Ό μΆκ°νλ€. μ΄λ κ² ν¨μΌλ‘μ¨ μλ°μ΄ λͺ¨λ ν΄λμ€λ€μ Object ν΄λμ€μ λ©€λ²λ€μ μμλ°κΈ° λλ¬Έμ, Object ν΄λμ€ λ΄λΆμ λ©€λ²λ€μ μ¬μ©ν μ μλ€. toString() μ΄λ equals(Object o) μ κ°μ λ©μλλ₯Ό μ μνμ§ μκ³ λ μ¬μ©ν μ μμλ μ΄μ λ μ΄μ κ°μ΄ Object ν΄λμ€μ μνμ¬ μμλ°μκΈ° λλ¬Έμ΄λ€. Object ν΄λμ€μ λν΄μλ μ΄νμ μμΈνκ² λ€λ£¨μ΄λ³΄λλ‘ νμ.
2. μ€λ²λΌμ΄λ©(overriding)
[μ€λ²λΌμ΄λ©μ μ μ]
μ‘°μ ν΄λμ€λ‘λΆν° μμλ°μ λ©μλμ λ΄μ©μ λ³κ²½νλ κ²μ μ€λ²λΌμ΄λ©μ΄λΌκ³ νλ€. μμ λ°μ λ©μλλ₯Ό μμ ν΄λμ€μ λ§κ² μ μ ν λ³κ²½ν΄μΌνλ κ²½μ°μ μ‘°μ λ©μλλ₯Ό μ€λ²λΌμ΄λ©νλ€.
class Point{
int x;
int y;
String getLocation(){
return "x :" + x + ", y :" + y;
}
}
class Point3D extends Point{
int z;
String getLocation(){
return "x: " + x + ", y : " + y + ", z :" + "z";
}
}
Point ν΄λμ€μ getLocation μ 2μ°¨μ μ’νλ₯Ό λ°ννλλ‘ μμ±λμμΌλ, Point μ μμ ν΄λμ€μΈ Point3D ν΄λμ€λ 3μ°¨μ μ’νκ³λ₯Ό νννκΈ° μν κ²μ΄λ―λ‘, μμλ°μ λ©μλλ₯Ό μ€λ²λΌμ΄λ©νλ€. μλ‘κ² λ©μλλ₯Ό μ 곡νκΈ° 보λ€λ μ€λ²λΌμ΄λ©μ νλ κ²μ΄ μ’λ€.
[μ€λ²λΌμ΄λ©μ 쑰건]
μ€λ²λΌμ΄λ©μ μμλ°μ λ©μλμ λ΄μ©λ§μ μμ νλ κ²μΌλ‘, μ μΈλΆλ μ‘°μκ³Ό μμ ν μΌμΉν΄μΌ νλ€. κ·Έλ κΈ° λλ¬Έμ μ€λ²λΌμ΄λ©μ΄ μ±λ¦½νλ €λ©΄ μλ 쑰건μ λ§μ‘±ν΄μΌλ§ νλ€.
μμ ν΄λμ€μμ μ€λ²λΌμ΄λ©νλ λ©μλλ μ‘°μ ν΄λμ€μ λ©μλμ
1. μ΄λ¦μ΄ κ°μμΌ νλ€.
2. 맀κ°λ³μκ° κ°μμΌ νλ€.
3. λ°ννμ μ΄ κ°μμΌ νλ€.
μ μΈλΆκ° μλ‘ μΌμΉν΄μΌ νλ€λ κ²μΈλ°, μ κ·Ό μ μ΄μ(access modifier)μ μμΈ(exception)λ μ νλ 쑰건 νμμλ§ λ€λ₯΄κ² λ³κ²½ν μ μκΈ°λ νλ€.
- μ κ·Ό μ μ΄μλ μ‘°μ ν΄λμ€μ λ©μλλ³΄λ€ μ’μλ²μλ‘ λ³κ²½ν μ μλ€.
λ§μ½ μ‘°μ ν΄λμ€μ μ μλ λ©μλμ μ κ·Ό μ μ΄μκ° protected μ΄λ©΄, ν΄λΉ λ©μλλ₯Ό μ€λ²λΌμ΄λ©νλ λ©μλλ public μ΄κ±°λ protected μ¬μΌλ§ νλ€. λλΆλΆ κ°μ μ κ·Ό μ μ΄μλ₯Ό μ¬μ©νλλ°, μ κ·Ό λ²μλ public > protected, default, private μμΌλ‘ λλ€. - μ‘°μ ν΄λμ€μ λ©μλλ³΄λ€ λ§μ μμ μμΈλ₯Ό μ μΈν μ μλ€.
class Parent{
void parentMethod() throws IOException, SQLException{
...
}
}
class Child extends Parent{
void parentMethod() throws IOException{
...
}
}
μμ κ°μ΄ μμ±νλ©΄ μ‘°μ ν΄λμ€λ³΄λ€ μμ ν΄λμ€μμ μμΈμ κ°μκ° μ μΌλ―λ‘ μ€λ²λΌμ΄λ©μ΄ μ¬λ°λ₯΄κ² λμλ€κ³ ν μ μλ€. μ€μν κ²μ μμΈμ κ°μκ° μλλΌλ κ²μ μ£Όμνμ.
class Parent{
void parentMethod() throws IOException, SQLException{
...
}
}
class Child extends Parent{
void parentMethod() throws Exception{
...
}
}
λ§μ½ μμ κ°μ΄ μμ±νλ€λ©΄ Exception μ λͺ¨λ μμΈμ μ΅κ³ μ‘°μμ΄λ―λ‘ μμ ν΄λμ€μ μμΈμ κ°μκ° μ‘°μ ν΄λμ€μ μμΈμ κ°μλ³΄λ€ λ§μΌλ―λ‘ μ€λ²λΌμ΄λ©μ 쑰건μ λ§μ‘±νμ§ λͺ»νλ€.
μ‘°μ ν΄λμ€μ λ©μλλ₯Ό μμ ν΄λμ€μμ μ€λ²λΌμ΄λ© ν λμλ μλ 3κ°μ§λ₯Ό κΈ°μ΅νλλ‘ νμ.
1. μ κ·Ό μ μ΄μλ₯Ό μ‘°μ ν΄λμ€μ λ©μλλ³΄λ€ μ’μ λ²μλ‘ λ³κ²½ν μ μλ€.
2. μμΈλ μ‘°μ ν΄λμ€μ λ©μλλ³΄λ€ λ§μ΄ μ μΈν μ μλ€.
3. μΈμ€ν΄μ€λ©μλλ₯Ό static λ©μλλ λ°λλ‘ λ³κ²½ν μ μλ€.
Q. μ‘°μ ν΄λμ€μ μ μλ static λ©μλλ₯Ό μμ ν΄λμ€μμ λμΌν μ΄λ¦μ static λ©μλλ‘ μ μν μ μμκΉ?
A. κ°λ₯νμ§λ§, μ΄λ μ€λ²λΌμ΄λ©μ μλκ³ κ°κ°μ ν΄λμ€μ λ³λμ static λ©μλλ₯Ό μ μν κ²μΌ λΏμ΄λ€. static λ©€λ²λ€μ μμ λ€μ΄ μ μλ ν΄λμ€μ λ¬Άμ¬μλ€κ³ μκ°νλ κ²μ΄ μμ°μ€λ¬μ°λ©° νΈμΆ μμλ μ°Έμ‘°λ³μλ₯Ό μ΄μ©νμ§ λ§κ³ ν΄λμ€μ΄λ¦.λ©μλμ΄λ¦() μΌλ‘ νλ κ²μ΄ μ’λ€.
Static μ¬μ©μ μ₯λ¨μ (μΆμ² :https://velog.io/@gudonghee2000/static-vs-%EC%8B%B1%EA%B8%80%ED%86%A4-%ED%8C%A8%ED%84%B4#:~:text=%EC%B2%AB%EB%B2%88%EC%A7%B8%EB%8A%94%2C%20Static%EC%9D%B4%20%EB%A9%94%EB%AA%A8%EB%A6%AC,%EC%86%8D%EB%8F%84%EA%B0%80%20%EB%B9%A0%EB%A5%B4%EB%8B%A4%EB%8A%94%20%EA%B2%83%EC%9D%B4%EB%8B%A4.)
Static μ ν΄λμ€ λ©μλμ ν΄λμ€ νλλ₯Ό μ§μ ν λ μ¬μ©νλ κ²μΌλ‘, μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μμλ ν΄λμ€μ λ©μλμ νλμ μ κ·Όμ΄ κ°λ₯νλλ‘ νλ€. μΌλ°μ μΌλ‘ μ¬μ©νλ Class λ Static μμμ μμ±λκ³ , new operator μ μ΄μ©νμ¬ μμ±ν κ°μ²΄λ Heap μμμ μμ±λλ€.
Static μ μ₯μ μ μλμ κ°λ€.
1. λ©λͺ¨λ¦¬ μΈ‘λ©΄μμ ν¨μ¨μ μ΄λ€. Static μμμ μ μ₯λλ©΄ κ³ μ λ λ©λͺ¨λ¦¬ μμμ μ¬μ©νλ κ²μ΄λ―λ‘ λ§€λ² μΈμ€ν΄μ€λ₯Ό μμ±νλ©΄μ λλΉλλ λ©λͺ¨λ¦¬λ₯Ό μ€μΌ μ μλ€.
2. κ°μ²΄ μμ± μμ΄λ μ¬μ©κ°λ₯νλ―λ‘ μλκ° λΉ¨λΌμ§λ€. ν΄λμ€κ° λ©λͺ¨λ¦¬μ μ¬λΌκ°λ μμ μ μμ±λμ΄μ μ¬μ©μ΄ λ°λ‘ λλ―λ‘ μλ λ©΄μμ μ΄λμ΄ μλ€.
Static μ λ¨μ μ μλμ κ°λ€.
1. νλ‘κ·Έλ¨ μ’ λ£ μκΉμ§ λ©λͺ¨λ¦¬μ ν λΉλ μ±λ‘ μ‘΄μ¬νλ€.
Garbage Collector λ₯Ό ν΅ν΄μ μμλ‘ κ΄λ¦¬λ°λ Heap μμκ³Ό λ¬λ¦¬ Static μμμ Garbage Collector μ μν κ΄λ¦¬λ₯Ό λ°μ§ μκΈ° λλ¬Έμ Static μμμ νλ‘κ·Έλ¨ μ’ λ£ μ κΉμ§ λ©λͺ¨λ¦¬μ μ‘΄μ¬νλ€. λ§μ½ Static μ λ¨μ©νκ² λλ€λ©΄ μ’ λ£ μ κΉμ§ λ§μ λ©λͺ¨λ¦¬κ° ν λΉλ μ±λ‘ μ‘΄μ¬νλ―λ‘ μ±λ₯μ μ μν₯μ μ£Όκ² λλ€.
2. Static μ κ°μ²΄μ§ν₯μ μ΄μ§ λͺ»νλ€. λ°λ‘ κ°μ²΄λ₯Ό μμ±νμ§ μκ³ λ©λͺ¨λ¦¬μ Static μμμ ν λΉλ κ³³μμ μ¬λ¬ ν΄λμ€λ€μ΄ λ°μ΄ν°λ₯Ό λΆλ¬μ€λ ꡬ쑰μΈλ°, μ΄λ¬ν νΉμ§μ κ°μ²΄μ λ°μ΄ν°λ€μ΄ μΊ‘μν λμ΄μΌ νλ€λ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ μμΉμ λ€μ μλ°νλ€λ κ²μ΄λ€.
3. Static λ©μλλ interface ꡬνμ μ¬μ© λ μ μλ€. Static λ©μλλ μ½λμ μ¬μ¬μ©μ±μ λμ¬μ£Όμ΄ μλ°μ μ μ©ν OOP κΈ°λ₯μ μ¬μ©νλ κ²μ λ°©ν΄νλ€λ κ²μ΄λ€.
[μ€λ²λ‘λ©κ³Ό μ€λ²λΌμ΄λ©μ μ°¨μ΄μ ]
μ€λ²λ‘λ©(overloading) μ κΈ°μ‘΄μ μλ μλ‘μ΄ λ©μλλ₯Ό μ μνλ κ²(new)
μ€λ²λΌμ΄λ©(overriding) μ μμλ°μ λ©μλμ λ΄μ©μ λ³κ²½νλ κ²(change, modify)
μλμ μ½λλ₯Ό μ΄ν΄λ³΄μ.
class Parent{void parentMethod() {}}class Child extends Parent {void parentMethod() {} // μ€λ²λΌμ΄λ©void parentMethod(int i) {} // μ€λ²λ‘λ©
void childMethod() {}
void childMethod(int i) {} // μ€λ²λ‘λ©
void childMethod() {} // μ€λ³΅ μ μ μλ¬}
[Super]
super μ μ‘°μ ν΄λμ€λ‘λΆν° μμλ°μ λ©€λ²λ₯Ό μμ ν΄λμ€μμ μ°Έμ‘°ν λ μ¬μ©νλ μ°Έμ‘° λ³μμ΄λ€. λ©€λ²λ³μμ μ§μλ³μμ μ΄λ¦μ΄ κ²ΉμΉλ©΄ this λ₯Ό λΆμ¬μ ꡬλ³νλ― μμλ°μ λ©€λ²μ μμ μ λ©€λ²μ μ΄λ¦μ΄ κ²ΉμΉλ κ²½μ°μλ super μ λΆμ¬ ꡬλ³μ΄ κ°λ₯νλ€. λ¬Όλ‘ μμλ°μ λ©€λ²λ μμ ν΄λμ€μ λ©€λ²μ΄λ―λ‘ this λ₯Ό μ¬μ©ν μ μμ§λ§, μ‘°μ ν΄λμ€μ λ©€λ²μ μμ ν΄λμ€μ λ©€λ²κ° μ€λ³΅ μ μλμ΄ κ΅¬λ³ν΄μΌνλ€λ©΄ super μ μ¬μ©νλλ‘ νμ.
μ‘°μμ λ©€λ²μ μμ μ λ©€λ²λ₯Ό ꡬλ³ν΄μΌνλ€λ μ μ μ μΈνλ©΄ super μ this λ κ·Όλ³Έμ μΌλ‘ κ°λ€. λͺ¨λ μΈμ€ν΄μ€ λ©μλμλ μμ μ΄ μν μΈμ€ν΄μ€μ μ£Όμκ° μ§μ λ³μλ‘ μ μ₯λλ€. μ΄λ this μ super μ κ°μ΄ λλ€. static λ©μλλ μΈμ€ν΄μ€μ κ΄λ ¨ μμΌλ©°, this μ λ§μ°¬κ°μ§λ‘ super λ static λ©μλμμ μ¬μ©ν μ μκ³ μΈμ€ν΄μ€ λ©μλμμλ§ μ¬μ©μ΄ κ°λ₯νλ€.
class source{
public static void main(String[] args) {
Child c = new Child();
c.method();
}
}
class Parent{
int x = 10;
}
class Child extends Parent{
int x = 20;
void method(){
System.out.println("x=" + x);
System.out.println("this.x = " + this.x);
System.out.println("super.x = " + super.x);
}
}
μ μμ μμλ λΆλͺ¨ ν΄λμ€μΈ Parent μμλ x λΌλ λ³μκ° μκ³ , μμ ν΄λμ€μμλ x λΌλ λ³μκ° μ‘΄μ¬νλ€. μ€λ³΅μ μλ κ²μ΄κ³ μ΄λ₯Ό ꡬλΆνκΈ° μν΄, super μ μ¬μ©νλ€. λ³μ λΏλ§μ΄ μλλΌ λ©μλλ super μ μ¬μ©νμ¬ νΈμΆμ΄ κ°λ₯νλ€. μ‘°μ ν΄λμ€μ λ©μλλ₯Ό μμ ν΄λμ€μμ μ€λ²λΌμ΄λ©ν κ²½μ°μ super μ μ¬μ©νλ€.
class Point{
int x; int y;
String getLocation(){
return "x :" + x + ", y :" + y;
}
}
class Point3D extends Point{
int z;
String getLocation(){
return super.getLocation() + ", z : " + z;
}
}
μμ ν΄λμ€μμ μ¬μ©νλ λ©μλκ° μ‘°μ ν΄λμ€μ λ©μλμ λ΄μ©μ μΆκ°μ μΈ μμ μ νλ κ²½μ°λΌλ©΄ super μ μ΄μ©νμ¬ μ‘°μ ν΄λμ€μ λ©μλλ₯Ό ν¬ν¨μν€λ κ²μ΄ μ΄νμ μ‘°μν΄λμ€μ λ©μλκ° λ³κ²½λλλΌλ μμ ν΄λμ€μ λ©μλμλ μλ λ°μ λ κ²μ΄κΈ° λλ¬Έμ ν¨μ¨μ μ΄λ€.
[Super() - μ‘°μ ν΄λμ€μ μμ±μ]
this() μ λ§μ°¬κ°μ§λ‘ super() λ μμ±μμ΄λ€. this() λ κ°μ ν΄λμ€μ λ€λ₯Έ μμ±μλ₯Ό νΈμΆν λ μ¬μ©νμ§λ§, super() μ μ‘°μ ν΄λμ€μ μμ±μ νΈμΆμ μ¬μ©λλ€. μμ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μμ±νλ©΄, μμ λ©€λ²μ μ‘°μμ λ©€λ²κ° λͺ¨λ ν©μ³μ§ νλμ μΈμ€ν΄μ€κ° λ§λ€μ΄μ§λ€. κ·Έλμ μμ ν΄λμ€μμ μ‘°μ ν΄λμ€μ λ©€λ²λ₯Ό μ¬μ©ν μ μλ κ²μ΄λ€. μ΄λ μ‘°μ ν΄λμ€ λ©€λ²μ μ΄κΈ°ν μμ μ΄ μνλμ΄μΌ νλ―λ‘, μμ ν΄λμ€μ μμ±μμμ μ‘°μ ν΄λμ€μ μμ±μλ₯Ό νΈμΆλμ΄μΌνλ€. (μμ ν΄λμ€μ λ©€λ²κ° μ‘°μ ν΄λμ€μ λ©€λ²λ₯Ό μ¬μ©ν μ μκΈ° λλ¬Έμ μ‘°μ ν΄λμ€μ λ©€λ²μ μ΄κΈ°νκ° νμν κ²μ΄λ€.) μ΄λ¬ν μ‘°μ ν΄λμ€μ μμ±μλ κ³μΈ΅ κ΄κ³λ₯Ό κ±°μ¬λ¬ μ¬λΌκ° κ²°κ΅ μ΅κ³ μ‘°μμΈ Object ν΄λμ€μ μμ±μμΈ Object() κΉμ§ μνλλ€. κ·Έλ¬λ―λ‘ Object μμ±μλ₯Ό μ μΈν λͺ¨λ ν΄λμ€μ μμ±μλ 첫 λ²μ§Έ μ€μ λ°λμ λ€λ₯Έ μμ±μλ μ‘°μμ μμ±μλ₯Ό νΈμΆν΄μΌ νλ©°, κ·Έλ μ§ μμΌλ©΄ μ»΄νμΌλ¬μ μν΄ μμ±μμ 첫 μ€μ super(); κ° μλμ μΌλ‘ μΆκ°λλ€.
Object ν΄λμ€λ₯Ό μ μΈν λͺ¨λ ν΄λμ€μ μμ±μ 첫 μ€μ μμ±μ.this() νΉμ super() μ νΈμΆν΄μΌ νλ€.
κ·Έλ μ§ μμΌλ©΄ μ»΄νμΌλ¬λ μλμΌλ‘ super(); λ₯Ό μμ±μ 첫 μ€μ μ½μ νλ€.
class source{
public static void main(String[] args) {
Point3D p3 = new Point3D(1, 2, 3);
}
}
class Point{
int x; int y;
Point(){
this(0, 0);
}
Point(int x, int y){
this.x = x;
this.y = y;
}
String getLocation(){
return "x :" + x + ", y :" + y;
}
}
class Point3D extends Point{
int z;
Point3D(int x, int y, int z)
{
// super();
this.x =x;
this.y = y;
this.z = z;
}
String getLocation(){
return super.getLocation() + ", z : " + z;
}
}
Point ν΄λμ€λ₯Ό μμλ°μ Point3D ν΄λμ€λ Point3D μμ±μμμ μ‘°μ ν΄λμ€μ μμ±μλ₯Ό νΈμΆνμ§ μκ³ μκΈ° λλ¬Έμ, μ»΄νμΌ μ μ»΄νμΌλ¬μ μν΄ μμ±μμ 첫 μ€μ super(); κ° μ€νλλ€. μ΄μ μν΄ μ‘°μ ν΄λμ€μΈ Point() κ° μ€νλλ€. λ§μ°¬κ°μ§λ‘ Point ν΄λμ€λ Object ν΄λμ€λ₯Ό μμλ°λλ°, μμ±μμμ μμλ°μ μ‘°μ ν΄λμ€μ μμ±μκ° μκΈ° λλ¬Έμ point() μμ±μμ 첫 μ€μ μ»΄νμΌλ¬μ μν΄ super(); κ° μλμΌλ‘ μΆκ°/μ€νλλ©° μ΄λ Object() λ₯Ό μλ―Ένλ€.
References
http://www.yes24.com/Product/Goods/24259565
'π» Study ! > JAVA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[CH07] κ°μ²΄μ§ν₯νλ‘κ·Έλλ°4 (OOP) (0) | 2022.08.02 |
---|---|
[CH07] κ°μ²΄μ§ν₯νλ‘κ·Έλλ°3 (OOP) (0) | 2022.08.01 |
[CH06] κ°μ²΄μ§ν₯νλ‘κ·Έλλ°1 (OOP) (0) | 2022.07.07 |
[CH05] λ°°μ΄ (0) | 2022.07.06 |
[CH02.] λ³μ (Variable) (0) | 2022.07.05 |