์์
์์ ( Inheritance )
- ๊ธฐ์กด์ ํด๋์ค๋ก ์๋ก์ด ํด๋์ค๋ฅผ ์์ฑํ๋ ๊ฒ. ( ์ฝ๋์ ์ฌ์ฌ์ฉ )
- ๋ ํด๋์ค๋ฅผ ๋ถ๋ชจ์ ์์์ผ๋ก ๊ด๊ณ๋ฅผ ๋งบ์ด์ฃผ๋ ๊ฒ.
class ์์ํด๋์ค extends ๋ถ๋ชจํด๋์ค {
// ...
}
์ด๋ ๊ฒ ์์ ํด๋์ค ์์ extends๋ฅผ ์ฌ์ฉํด ๋ถ๋ชจ ํด๋์ค๋ฅผ ์ ๋ ฅํด์ฃผ๋ฉด ์์๊ด๊ณ๊ฐ ๋๋ค.
- ์์์ ์กฐ์์ ๋ชจ๋ ๋ฉค๋ฒ๋ฅผ ์์๋ฐ๋๋ค. ( ์์ฑ์, ์ด๊ธฐํ ๋ธ๋ก ์ ์ธ )
์์๊ณผ ์กฐ์๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ถ๋ชจ์ ๋ถ๋ชจ ๊ฒ๋ ์์์ ๋ฐ๊ธฐ ๋๋ฌธ์ด๋ค.
- ์์์ ๋ฉค๋ฒ ๊ฐ์๋ ์กฐ์๋ณด๋ค ์ ์ ์ ์๋ค. ( ๊ฐ๊ฑฐ๋ ๋ง๋ค. )
class Parent {
int age;
}
class Child extends Parent { }
Child ํด๋์ค๋ ๋ฉค๋ฒ๊ฐ 0๊ฐ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ฌ์ค ๋ฉค๋ฒ๊ฐ 1๊ฐ์ด๋ค.
๋ถ๋ชจ์ age ๋ณ์๋ฅผ ์์๋ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ถ๋ชจ์ ๋ฉค๋ฒ ๋ํ ์์์ ๋ฉค๋ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
- ์์์ ๋ณ๊ฒฝ์ ์กฐ์์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค.
์์์ ๋ฉค๋ฒ๊ฐ ์ถ๊ฐ๋์ด๋ ๋ถ๋ชจ์ ๋ฉค๋ฒ๋ ๋ณํจ์ด ์๋ค.
ํฌํจ ( composite ) ์ด๋?
- ํด๋์ค์ ๋ฉค๋ฒ๋ก ์ฐธ์กฐ ๋ณ์๋ฅผ ์ ์ธํ๋ ๊ฒ
class Circle {
int x; // ์์ ์ x์ขํ
int y; // ์์ ์ y์ขํ
int r; // ๋ฐ์ง๋ฆ (radius)
์ ์ฝ๋๋ฅผ ํฌํจ๊ด๊ณ์ ์ฝ๋๋ก ๋ณํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
class Point {
int x;
int y;
}
class Circle {
Point c = new Point(); // ์์
int r; // ๋ฐ์ง๋ฆ (radius)
}
- ์์ ๋จ์์ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ , ์ด ๋ค์ ์กฐํฉํด์ ํด๋์ค๋ฅผ ๋ง๋ ๋ค.
์์๊ด๊ณ | '~์ ~์ด๋ค. (is - a)' |
ํฌํจ๊ด๊ณ | '~์ ~์ ๊ฐ์ง๊ณ ์๋ค. (has-a)' |
์์๊ณผ ํฌํจ ๋ฌด์์ ์ฌ์ฉํด์ผ ํ ์ง ํท๊ฐ๋ฆฐ๋ค๋ฉด ๋ด์ฉ์ ํด์ํด๋ณด๋ฉด ๋๋ค.
์ (Circle)์ ์ (Point)์ด๋ค. - Circle is a Point
์ (Circle)์ ์ (Point)์ ๊ฐ์ง๊ณ ์๋ค. - Circle has a Point
์์ ์ ์ ๊ฐ์ง๊ณ ์๋ค ๋ผ๋ ๋ง์ด ๋ ์ ํฉํ ๋ง์ด๋ฏ๋ก ํฌํจ๊ด๊ณ๋ฅผ ์ฌ์ฉํด์ฃผ๋ ๊ฒ ์ ํฉํ๋ค.
ํฌํจ์ผ๋ก x๊ฐ์ ์ ๊ทผํ๋ ค๋ฉด P๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ฒด๋ฅผ ํตํด ์ ๊ทผ์ ํ๊ธฐ ๋๋ฌธ์ c.p.x๋ฅผ ํตํด ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํ๋ค.
๋จ์ผ ์์ ( Single Inheritance )
- Java๋ ๋จ์ผ ์์๋ง์ ํ์ฉํ๋ค. ( C++์ ๋ค์ค ์์ ํ์ฉ )
class TvDVD extends Tv,DVD { → Error ์กฐ์์ ํ๋๋ง ํ์ฉ๋๋ค.
// ,,,
}
์ธํฐํ์ด์ค(interface)๋ฅผ ์ฌ์ฉํ์ง์๊ณ ๋ ๋ค์ค ์์์ฒ๋ผ ํธ๋ฆฌํ๊ฒ ์์ฑํ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
- ๋น์ค์ด ๋์ ํด๋์ค ํ๋๋ง ์์๊ด๊ณ๋ก, ๋๋จธ์ง๋ ํฌํจ๊ด๊ณ๋ก ํ๋ค.
Objectํด๋์ค - ๋ชจ๋ ํด๋์ค์ ์กฐ์
- ๋ถ๋ชจ๊ฐ ์๋ ํด๋์ค๋ ์๋์ ์ผ๋ก Objectํด๋์ค๋ฅผ ์์๋ฐ๊ฒ ๋๋ค.
- ๋ชจ๋ ํด๋์ค๋ Objectํด๋์ค์ ์ ์๋ 11๊ฐ์ ๋ฉ์๋๋ฅผ ์์๋ฐ๋๋ค.
toString(), equals(Object obj), hashCode(), ...
์ค๋ฒ๋ผ์ด๋ฉ ( 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;
}
}
๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋์ธ getLocation๋ฉ์๋๋ฅผ ์์ ํด๋์ค์ธ Point 3D์์ ์ค๋ฒ๋ผ์ด๋ฉํ์ฌ ๋ด์ฉ์ ๋ณ๊ฒฝํ์๋ค.
์ค๋ฒ๋ผ์ด๋ฉ์ ์ ์ธ๋ถ๋ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๊ณ ๋ด์ฉ๋ง ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค.
์ค๋ฒ๋ผ์ด๋ฉ์ ์กฐ๊ฑด
1. ์ ์ธ๋ถ๊ฐ ์กฐ์ ํด๋์ค์ ๋ฉ์๋์ ์ผ์นํด์ผ ํ๋ค. ( ๋ฐํ ํ์ , ๋ฉ์๋ ์ด๋ฆ , ๋งค๊ฐ๋ณ์ ๋ชฉ๋ก )
2. ์ ๊ทผ ์ ์ด์๋ฅผ ์กฐ์ ํด๋์ค์ ๋ฉ์๋๋ณด๋ค ์ข์ ๋ฒ์๋ก ๋ณ๊ฒฝํ ์ ์๋ค.
3. ์์ธ๋ ์กฐ์ ํด๋์ค์ ๋ฉ์๋๋ณด๋ค ๋ง์ด ์ ์ธํ ์ ์๋ค.
์ค๋ฒ๋ก๋ฉ vs ์ค๋ฒ๋ผ์ด๋ฉ
์ค๋ฒ๋ก๋ฉ ( overloading ) → ๊ธฐ์กด์ ์๋ ์๋ก์ด ๋ฉ์๋๋ฅผ ์ ์ํ๋ ๊ฒ ( new )
์ค๋ฒ๋ผ์ด๋ฉ ( overriding ) → ์์๋ฐ์ ๋ฉ์๋์ ๋ด์ฉ์ ๋ณ๊ฒฝํ๋ ๊ฒ ( change , modify )
์ค๋ฒ๋ก๋ฉ๊ณผ ์ค๋ฒ๋ผ์ด๋ฉ์ ์ด๋ฆ๋ง ๋น์ทํ์ง ๋ง์ด ๋ค๋ฅด๋ค.
์ค๋ฒ๋ก๋ฉ์ ๊ธฐ์กด์ ์๋ ์ด๋ฆ์ด ๊ฐ์ ์๋ก์ด ๋ฉ์๋๋ฅผ ์ ์ํ๋ ๊ฒ์ด๊ณ ,
์ค๋ฒ๋ผ์ด๋ฉ์ ์์๋ฐ์ ๋ฉ์๋์ ๊ธฐ์กด์ ๊ฒ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด๋ค.
class Parent {
void parentMethod() {}
}
class Child extends Parent {
void parentMethod() {} → 1.์ค๋ฒ๋ผ์ด๋ฉ
void parentMethod(int i) {} → 2.์ค๋ฒ๋ก๋ฉ
void childMethod() {} → 3.๋ฉ์๋ ์ ์
void childMethod(int i) {} → ์ค๋ฒ๋ก๋ฉ
void childMethod() {} → ์ค๋ณต์ ์ (Error)
์ฐธ์กฐ๋ณ์
์ฐธ์กฐ๋ณ์ super
- ๊ฐ์ฒด ์์ ์ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ๋ณ์. ์ธ์คํด์ค ๋ฉ์๋(์์ฑ์) ๋ด์๋ง ์กด์ฌ
- ์กฐ์์ ๋ฉค๋ฒ๋ฅผ ์์ ์ ๋ฉค๋ฒ์ ๊ตฌ๋ณํ ๋ ์ฌ์ฉ
class Test {
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); → 20
System.out.println("this.x=" + this.x); → 20
System.out.println("super.x="+ super.x); → 10
}
}
์ด๋ ๊ฒ ๊ฐ์ ์ด๋ฆ์ ๋ณ์ x๊ฐ ๋ถ๋ชจ์ ์์์ ํด๋์ค ๋ชจ๋ ์๋ค๋ฉด super์ this๋ก ๊ตฌ๋ณ์ด ๊ฐ๋ฅํ๋ค.
class Test2 {
public static void main(String args[]) {
Child2 c = new Child2();
c.method();
}
}
class Parent2 { int x=10; }
class Child2 extends Parent2 {
void method() {
System.out.println("x=" + x); → 10
System.out.println("this.x=" + this.x); → 10
System.out.println("super.x="+ super.x); → 10
}
}
๋ง์ฝ ๋ถ๋ชจ์๊ฒ๋ง ๋ณ์ x๊ฐ ์กด์ฌํ๋ค๋ฉด x , this.x , super.x ๋ชจ๋ 10์ ํธ์ถํ๋ค.
super() - ์กฐ์์ ์์ฑ์
- ์กฐ์์ ์์ฑ์๋ฅผ ํธ์ถํ ๋ ์ฌ์ฉ
- ์กฐ์์ ๋ฉค๋ฒ๋ ์กฐ์์ ์์ฑ์๋ฅผ ํธ์ถํด์ ์ด๊ธฐํ
class Point {
int x,y;
Point(int x , int y) {
this.x = x;
this.y = y;
}
}
class Point3D extends Point {
int z;
Point3D(int x, int y, int z) {
super(x,y); → ์กฐ์ํด๋์ค์ ์์ฑ์ Point(int x,int y)๋ฅผ ํธ์ถ
this.z = z; → ์์ ์ ๋ฉค๋ฒ๋ฅผ ์ด๊ธฐํ
}
}
์ ์์ ๋ฅผ ํ์ธํ๋ฉด ์์ ํด๋์ค์ธ Point3D์ ์์ฑ์๊ฐ ๋ถ๋ชจ์ ์์ฑ์๋ฅผ ํธ์ถํด์ ์ด๊ธฐํํ์๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ์์์ ์์ฑ์์์ ์กฐ์์ ์์ฑ์๋ฅผ ์ด๊ธฐํํ ๋ super()์ ์ฌ์ฉํ๋ค.
- ์์ฑ์์ ์ฒซ ์ค์ ๋ฐ๋์ ์์ฑ์๋ฅผ ํธ์ถํด์ผ ํ๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ์์ฑ์์ ์ฒซ ์ค์ super();๋ฅผ ์ฝ์
ํจํค์ง
ํจํค์ง ( package )
- ์๋ก ๊ด๋ จ๋ ํด๋์ค์ ๋ฌถ์
- ํด๋์ค๋ ํด๋์ค ํ์ผ(*.class), ํจํค์ง๋ ํด๋. ํ์ ํจํค์ง๋ ํ์ ํด๋
- ํด๋์ค์ ์ค์ ์ด๋ฆ(full name)์ ํจํค์ง๋ฅผ ํฌํจ. (java.lang.String)
rt.jar๋ ํด๋์ค๋ค์ ์์ถํ ํ์ผ(JDK์ค์น๊ฒฝ๋ก \jre\lib์ ์์น)
ํจํค์ง์ ์ ์ธ
- ํจํค์ง๋ ์์คํ์ผ์ ์ฒซ ๋ฒ์งธ ๋ฌธ์ฅ์ผ๋ก ๋จ ํ๋ฒ ์ ์ธ
- ๊ฐ์ ์์ค ํ์ผ์ ํด๋์ค๋ค์ ๋ชจ๋ ๊ฐ์ ํจํค์ง์ ์ํ๊ฒ ๋๋ค.
- ํจํค์ง ์ ์ธ์ด ์์ผ๋ฉด ์ด๋ฆ์๋(unnamed = default package) ํจํค์ง์ ์ํ๊ฒ ๋๋ค.
ํด๋์ค ํจ์ค ( classpath )
- ํด๋์ค ํ์ผ(*,class)์ ์์น๋ฅผ ์๋ ค์ฃผ๋ ๊ฒฝ๋ก(path)
- ํ๊ฒฝ๋ณ์ classpath๋ก ๊ด๋ฆฌํ๋ฉฐ, ๊ฒฝ๋ก๊ฐ์ ๊ตฌ๋ถ์๋ ';'๋ฅผ ์ฌ์ฉ
classpath(ํ๊ฒฝ๋ณ์)์ ํจํค์ง์ ๋ฃจํธ๋ฅผ ๋ฑ๋กํด์ค์ผ ํจ.
import๋ฌธ
- ํด๋์ค๋ฅผ ์ฌ์ฉํ ๋ ํจํค์ง์ด๋ฆ์ ์๋ตํ ์ ์๋ค.
class ImportTest {
java.util.Date today = new java.util.Date();
// ...
}
์๋๋ ์ด๋ ๊ฒ ํด๋์ค์ด๋ฆ์ ํจํค์ง์ด๋ฆ์ ๊ฐ์ด ์ ์ด์ฃผ์ด์ผ ํ๋ค.
import java.util.Date;
class ImportTest {
Date today = new Date();
}
ํ์ง๋ง ์ด๋ ๊ฒ import๋ฌธ์ ์ฌ์ฉํด์ฃผ๋ฉด ์๋ต์ด ๊ฐ๋ฅํ๋ค.
- ์ปดํ์ผ๋ฌ์๊ฒ ํด๋์ค๊ฐ ์ํ ํจํค์ง๋ฅผ ์๋ ค์ค๋ค.
[ ์ดํด๋ฆฝ์ค ๋จ์ถํค ctrl + shift + o ]
- java.lang ํจํค์ง( ๊ธฐ๋ณธ ํจํค์ง ) ์ ํด๋์ค๋ importํ์ง ์๊ณ ๋ ์ฌ์ฉํ ์ ์๋ค.
import๋ฌธ์ ์ ์ธ
- import๋ฌธ์ ์ ์ธํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
import ํจํค์ง๋ช
.ํด๋์ค๋ช
; ← ctrl + shift + o
or
import ํจํค์ง๋ช
.*; ← ๋ชจ๋ ํด๋์ค
- import๋ฌธ์ ํจํค์ง๋ฌธ๊ณผ ํด๋์ค์ ์ธ์ ์ฌ์ด์ ์ ์ธํ๋ค.
โ ํจํค์ง ์ ์ธ
โก import๋ฌธ
โข ํด๋์ค ์ ์
- import๋ฌธ์ ์ปดํ์ผ ์์ ์ฒ๋ฆฌ๋๋ฏ๋ก ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ ์ํฅ์ด ์๋ค.
import java.util.Calendar;
import java.util.Date;
import java.util.ArrayList;
↑
↓
import java.util.*; → java.utilํจํค์ง์ ๋ชจ๋ ํด๋์ค
- ์ด๋ฆ์ด ๊ฐ์ ํด๋์ค๊ฐ ์ํ ๋ ํจํค์ง๋ฅผ importํ ๋๋ ํด๋์ค ์์ ํจํค์ง๋ช ์ ๋ถ์ฌ์ค์ผ ํ๋ค.
import java.sql.*; → java.sql.Date;
import java.util.*; → java.util.Date;
public class ImportTest {
public static void main(String[] args) {
java.util.Date today = new java.util.Date();
}
}
static import๋ฌธ
- static๋ฉค๋ฒ๋ฅผ ์ฌ์ฉํ ๋ ํด๋์ค ์ด๋ฆ์ ์๋ตํ ์ ์๊ฒ ํด์ค๋ค.
import static java.lang.Integer.*; → Integerํด๋์ค์ ๋ชจ๋ static๋ฉ์๋
import static java.lang.Math.random; → Math.random()๋ง. ๊ดํธ ์๋ถ์.
import static java.lang.System.out; → System.out์ out๋ง์ผ๋ก ์ฐธ์กฐ๊ฐ๋ฅ
์์ ๊ฐ์ด ์ ์ธ์ ํ๋ฉด
out.println(random());
์ผ๋ก๋ ํธ์ถ์ด ๊ฐ๋ฅํ๋ค.
import static java.lang.System.out;
import static java.lang.Math.*;
class Test {
public static void main(String[] args) {
// System.out.println(Math.random());
out.println(random());
// System.out.println("Math.PI :"+Math.PI);
out.println("Math.PI :" + PI);
}
}
'๐จ๏ธ Language > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java]๊ฐ์ฒด์งํฅ (4) - instanceof ์ฐ์ฐ์, ๋งค๊ฐ๋ณ์๋คํ์ฑ, ์ฌ๋ฌ ์ข ๋ฅ์ ๊ฐ์ฒด๋ฅผ ๋ฐฐ์ด๋ก ๋ค๋ฃจ๊ธฐ (0) | 2022.10.29 |
---|---|
[Java]๊ฐ์ฒด์งํฅ (3) - ์ ์ด์,์บก์ํ,๋คํ์ฑ,์ฐธ์กฐ๋ณ์์ ํ๋ณํ (0) | 2022.10.26 |
[Java]๊ฐ์ฒด์งํฅ (1) - ๊ฐ์ฒด,ํด๋์ค,๋ฉ์๋,static (0) | 2022.08.27 |
[Java]๋ฐฐ์ด (0) | 2022.08.25 |
[Java]์กฐ๊ฑด๋ฌธ(if,switch)๊ณผ ๋ฐ๋ณต๋ฌธ(for,while) (0) | 2022.08.23 |