์ถ์ ๋ฉ์๋๋ ๋ฌด์์ ๋๊น?
์ถ์ ๋ฉ์๋๋ ๊ตฌํ์ด ์๋ ๋ฉ์๋์ ๋๋ค. ์ฆ, ์ ์ธ๋ง ์์ผ๋ฏ๋ก ์ด๋ฆ, ๋ฐํ ์ ํ ๋ฐ ์๋ฝํ ๋ณ์๋ฅผ ์ ์ ์์ต๋๋ค. ๋ค์์ ๊ธฐ๋ณธ ์ถ์ ๋ฉ์๋์ ์์ ๋๋ค.
public abstract int example(int a1, int a2);
์ด ๋ฉ์๋๋ฅผ ๋ณด๋ฉด ์ ์๋ฅผ ๋ฐํํ๊ณ ๋ ๊ฐ์ ์ ์๋ฅผ ์ธ์๋ก ๋ฐ์๋ค์ธ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๋งํ ์ ์๋ ๊ฒ์ ์ด ๋ฐฉ๋ฒ์ด ์ด๋ป๊ฒ ๊ตฌํ๋๋์ง์
๋๋ค. ๊ตฌํํ๋ ค๋ฉด ์ฌ์ ์ํด์ผ ํ๊ธฐ ๋๋ฌธ์
๋๋ค. Java์์ ์ถ์ ๋ฉ์๋๋ฅผ ๋ง๋ค ๋ ๋ช ๊ฐ์ง ์ง์นจ์ ์ค์ํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํ๋ก๊ทธ๋จ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ปดํ์ผ๋์ง ์์ต๋๋ค. ๊ธฐ์ตํ๋ค:
-
Java ์ถ์ ๋ฉ์๋์๋ ๊ตฌํ์ด ์์ต๋๋ค. ์ฆ, ๋ฉ์๋ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์๋ ค์ฃผ๋ ๋ณธ๋ฌธ๊ณผ ์ค๊ดํธ๊ฐ ๋ค์ ์ค๋ฉด ์ ๋ฉ๋๋ค. ๊ทธ๋ฅ ์ธ๋ฏธ์ฝ๋ก ์ผ๋ก ๋๋ฉ๋๋ค.
-
์ถ์ ๋ฉ์๋๋ฅผ ๋ง๋ค๋ฉด ์ถ์ ํด๋์ค์๋ง ๋ฃ์ ์ ์์ต๋๋ค. ์ฆ, ๋ด๋ถ์ ์ถ์ ๋ฉ์๋๊ฐ ์๋ ๊ตฌ์ฒด์ ์ธ ํด๋์ค๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค.
๋. ์ฐธ๊ณ ๋ก ์ถ์ ํด๋์ค๊ฐ ์๋ ๊ฒฝ์ฐ ์์ฑ์๋ฅผ ํฌํจํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ถ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง ํ์๋ ์์ต๋๋ค. -
๊ตฌ์ ํด๋์ค๊ฐ ์ถ์ ํด๋์ค๋ฅผ ํ์ฅํ๋ ๊ฒฝ์ฐ ๋ถ๋ชจ ํด๋์ค์ ๋ชจ๋ ์ถ์ ๋ฉ์๋๋ ๊ตฌํํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ตฌ์ ํด๋์ค๊ฐ ๋ ์ ์์ผ๋ฉฐ ์ถ์์ผ๋ก ์ ์ธํด์ผ ํฉ๋๋ค.
์ถ์ Java ํด๋์ค ํ์ฅ
๋๋ ์ ๋ฉด์ ์ ๋ฐํํ๋ ๊ธฐ๋ณธ ๋ํ์ ๋ํ ํ๋ก๊ทธ๋จ์ ์์ฑํ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋์ ๋ถ๋ชจ ์ถ์ ํด๋์ค๋ฅผ ๋ง๋ญ๋๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ ๋ํ์๋ ๊ณ ์ ํ ๊ท์น์ด ์์ผ๋ฏ๋ก ๊ฐ ๋ํ์ ๋ค๋ฅด๊ฒ ๊ณ์ฐํด์ผ ํ๋ฏ๋ก ์ถ์ Shape ํด๋์ค๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํฉ๋๋ค.
abstract class Shape {
String shapeName = " ";
Shape(String name) {
this.shapeName = name;
}
abstract double area();
abstract double perimeter();
}
์ด์ ์ด๋ฌํ ์ถ์ ๋ฉ์๋๋ฅผ ์ค์ ๋ก ์ฌ์ฉํ๋ ค๋ฉด ์ถ์ Java ์์ ํด๋์ค์ธ Shape๋ฅผ ํ์ฅ ํ ๋ค์ ๋ฉ์๋๋ฅผ ์ธ์คํด์คํํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ ๊ตฌ์ฒด์ ์ธ ํด๋์ค๋ ์์ญ ๋ฐ ์ฃผ๋ณ ์ถ์ ๋ฉ์๋๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค.
class Quadrilateral extends Shape
{
double length, width;
Quadrilateral(double l, double w, String name)
{
super(name);
this.length = l;
this.width = w;
}
@Override
public double perimeter()
{
return ((2*length)+(2*width));
}
@Override
public double area()
{
return (length*width);
}
}
Implementing the Quadrilateral class would then look like this
class Main
{
public static void main (String[] args)
{
// creating a Quadrilateral object using Shape as reference
Shape rectangle = new Quadrilateral(3,4, "Rectangle");
System.out.println("Area of rectangle is " + rectangle.area());
System.out.println("Perimeter of rectangle is " + rectangle.perimeter());
}
}
์ฝ์์ ์ถ๋ ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Area of rectangle is 12.0
Perimeter of rectangle is 14.0
Quadrilateral ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค Shape ์์ Shape(String name) ์์ฑ์๋ฅผ ์ธ์คํด์คํํ ํ์๊ฐ ์์ต๋๋ค . ์ถ์ ๋ฉ์๋๊ฐ ์๋๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ทธ๋ฌ๋ ํด๋์ค์์ ์์ญ์ด๋ ๊ฒฝ๊ณ๋ง ๊ตฌํํ ๊ฒฝ์ฐ ์ ํด๋์ค๋ ๋ ๋ค ํฌํจํ์ง ์์๊ธฐ ๋๋ฌธ์ ์ถ์ ํด๋์ค์ฌ์ผ ํฉ๋๋ค. ์ธํฐํ์ด์ค์์ ์ถ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
์ธํฐํ์ด์ค๊ฐ ์๋ ์ถ์ Java ๋ฉ์๋
์ธํฐํ์ด์ค๊ฐ ๋ฌด์์ด๊ณ ์ถ์ ํด๋์ค์ ์ด๋ป๊ฒ ๋ค๋ฅธ์ง ๋น ๋ฅด๊ฒ ๊ฒํ ํด ๋ด ์๋ค. ์ธํฐํ์ด์ค์์ ์ธํฐํ์ด์ค์ ์ ์ธ๋ ๋ชจ๋ ๋ณ์๋ public, static ๋ฐ final์ ๋๋ค. ๋ฐ๋ฉด์ ์ถ์ ํด๋์ค์๋ ์ต์ข ๋ณ์๊ฐ ์๋ ๋ณ์๋ง ์์ต๋๋ค. ์ธํฐํ์ด์ค์ ๋ชจ๋ ํญ๋ชฉ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ณต๊ฐ๋ฉ๋๋ค. ์ถ์ ํด๋์ค๋ ๊ฐ์ธ, ๋ณดํธ, ๊ณต๊ฐ ๋ฑ์ ๊ฐ์ง ์ ์์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก ํด๋์ค๋ ์ธํฐํ์ด์ค๋ฅผ ํ์ฅํ์ง ์๊ณ ๊ตฌํํฉ๋๋ค. JDK 8 ์ด์ ์๋ ์ธํฐํ์ด์ค์ ์ถ์ ๋ฉ์๋ ์ธ์๋ ์๋ฌด ๊ฒ๋ ํฌํจํ ์ ์์์ต๋๋ค. ์ด์ ์ธํฐํ์ด์ค๋ ๊ธฐ๋ณธ ๋ฐ ์ ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. ์ด๋ก ์ธํด ๋ชจ๋ฒ ์ฌ๋ก๋ ์ถ์ ๋ฉ์๋๋ฅผ ํ์ฅ ๊ฐ๋ฅํ ํ ํ๋ฆฟ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์์ ๋ฒ์ด๋ ์ธํฐํ์ด์ค ๋ฐ ๊ตฌํ์ ์ค์ ์ ๋์์ต๋๋ค. ๋ฐ๋ผ์ ์ธํฐํ์ด์ค๋ก Shape๋ฅผ ์์ฑํ ๋ค์ Quadrilateral ๋ก ๊ตฌํํ๋ค๋ฉด, ์ด๋ป๊ฒ ์๊ฒผ์๊น์? ๋จผ์ Shape(String name) ์์ฑ์๋ฅผ ์์ ์ผ ํฉ๋๋ค . ๋ ๊ฐ์ ์ถ์ ๋ฉ์๋๋ง ์์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
interface Shape {
abstract double area();
abstract double perimeter();
}
So the Quadrilateral class would then look like this:
class Quadrilateral implements Shape {
double length, width;
Quadrilateral(double l, double w) {
this.length = l;
this.width = w;
}
@Override
public double perimeter() {
return ((2*length)+(2*width));
}
@Override
public double area() {
return (length*width);
}
}
๋ง์ง๋ง์ผ๋ก, Shape ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๋ ์๋ก์ด Quadrilateral์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ฑฐ์ ๋์ผํฉ๋๋ค.
class Main
{
public static void main (String[] args)
{
// creating a Quadrilateral object using Shape as reference
Shape rectangle = new Quadrilateral(3,4);
System.out.println("Area of rectangle is " + rectangle.area());
System.out.println("Perimeter of rectangle is " + rectangle.perimeter());
}
}
์ฝ์ ์ถ๋ ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Area of rectangle is 12.0
Perimeter of rectangle is 14.0
์ธํฐํ์ด์ค์ ์ถ์ ํด๋์ค ๊ฐ์ ์ฐจ์ด์ ์ ๋ํด ์์ธํ ์์๋ณด๋ ค๋ฉด ์ฌ๊ธฐ์์ ์์ธํ ์ ๋ณด๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ ์ถ์ Java ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๊น?
Java์์ ์ถ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ ์ฌ์ฉ์ ์ต์ํด์ ธ์ผ ํ๋ ์ด์ ๋ ๋ง์ต๋๋ค. ์ ์ ํ ๋ ์ฌ์ฉํด์ผ ํ๋ ์ธ ๊ฐ์ง ๊ฐ๋จํ ์ด์ ๊ฐ ์์ต๋๋ค.-
๋ ธ๋ ฅ์ ์ค๋ณต ๋ฐฉ์ง โ ์์ ์ฝ๋ฉ์ ๋ค์ ์ดํด๋ณด์ญ์์ค. ๊ทํ์ ๊ทํ์ ํ์ด ์ง์ฌ๊ฐํ ์ด์ธ์ ๋ชจ์์ ๋ํ ํด๋์ค๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค๊ณ ์์ํด ๋ณด์ญ์์ค. ํด๋น ํด๋์ค๋ฅผ ์ค๊ณํ๊ธฐ ์ํด ์๊ฐํด ๋ผ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ช ๊ฐ์ง์ ๋๊น? ์ญ? ์ด ๋ค์ฏ? ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๊ฐ๋จํ ๋ฌธ์ ์ ๋๋ค. ํจ์ฌ ๋ ๋ณต์กํ ๊ฒ์ ์์ํด๋ณด์ญ์์ค. ๋น์ ๊ณผ ๋น์ ์ ํ์ 100๊ฐ์ง ๋ฐฉ๋ฒ์ ์ ์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ทธ๊ฒ๋ค์ ์ผ๊ด๋ ํ๋ก๊ทธ๋จ์ผ๋ก ์ฎ๋ ๋ฒ ์ฐฌ ์์ ์ ์ง๋ฉดํ๊ฒ ๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ์ ๋ค์ ์์ ์ธ ๊ตฌํ ์ ์๋ก ์ด์ด์ง๋๋ค.
-
Java์ ์ถ์ ๋ฉ์๋๋ ์ฌ์ฉ ๋ฐ ๊ตฌํ์ ์ ์๋ฅผ ํ์ฉํฉ๋๋ค. ์ถ์ ํด๋์ค ๋๋ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๊ณ ์ค๊ณ์ ์ถ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ธํฐํ์ด์ค์ ์ํธ ์์ฉํ๋ ๋ฐฉ์์ ์ ์ํ๊ฒ ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ์ด๋ค ๋ณ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋์ง, ์ด๋ค ๋ฐํ ์ ํ์ ์์ํ ์ ์๋์ง ์ ์ ์์ต๋๋ค.
๊ทธ๊ฒ๋ค์ ์ฌ์ ์ํ๊ณ ๊ณ ์ ํ ๋ฐฉ์์ผ๋ก ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ตฌ์ฒด์ ์ธ ํด๋์ค๋ฅผ ๋ง๋ค ์ ์์ง๋ง ์ฌ์ ํ ์ฝ๋์ ํต์ฌ ์ฌ์ฉ์ ๊ฒฐ์ ํฉ๋๋ค. ๋๊ตฐ๊ฐ Shape๋ฅผ ๊ตฌํํ๋ ค๋ฉด ๋๋ ์ ์์ญ์ ๋ชจ๋ ์ฌ์ ์ํ๊ฑฐ๋ ๊ตฌํํด์ผ ํฉ๋๋ค. - ๊ฐ๋ ์ฑ ๋ฐ ๋๋ฒ๊น - ์ถ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ํฅ์๋ฉ๋๋ค. ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ฅผ ์์ฑํ ๋ ๋ฌด์์ ์ฐพ์์ผ ํ๋์ง ์ ์ ์์ต๋๋ค. ์ธํฐํ์ด์ค์ ๋ชจ๋ ์ถ์ ๋ฉ์๋๊ฐ ๊ตฌํ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ผ๋ฏ๋ก ๋ฒ๊ทธ๋ฅผ ์ฝ๊ฒ ์ฝ๊ณ ์ถ์ ํ ์ ์์ต๋๋ค. ์ถ์ ๋ฉ์๋๋ Java ๋ฐ ๊ธฐํ ๊ฐ์ฒด ์งํฅ ์ธ์ด์์ ๋คํ์ฑ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ๋ ์์์ ๋ถ๊ณผํฉ๋๋ค. ์ด๋ฅผ ์ดํดํ๊ณ ์ฌ์ฉํ๊ธฐ ์์ํ๋ฉด ์ฝ๋ฉ ์ฌ์ ์ ์์ ํ ์๋ก์ด ์ฅ์ด ์์๋ฉ๋๋ค.
GO TO FULL VERSION