JAVA/WhiteShip Java Live Study
[JAVA] ์์์ด๋? (์ถ์ํด๋์ค, super, final, ์ค๋ฒ๋ผ์ด๋ฉ...)
๐ถ ์์
๊ธฐ์กด์ ํด๋์ค๋ฅผ ์ฌ์ฌ์ฉํ์ฌ ์๋ก์ด ํด๋์ค๋ฅผ ์์ฑํ๋ ๊ฒ
์ฅ์ ๋ฐ ํน์ง
- ์ ์ ์์ ์ฝ๋๋ก ์๋ก์ด ํด๋์ค ์์ฑ ๊ฐ๋ฅ
- ์ฝ๋๋ฅผ ๊ณตํต์ ์ผ๋ก ๊ด๋ฆฌํด ์ฝ๋์ ์ถ๊ฐ/๋ณ๊ฒฝ์ด ์ฉ์ด
- ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ณ ์ฝ๋์ ์ค๋ณต์ ์ ๊ฑฐํ์ฌ ํ๋ก๊ทธ๋จ์ ์์ฐ์ฑ๊ณผ ์ ์ง๋ณด์์ ํฌ๊ฒ ๊ธฐ์ฌ
์์๋ฐฉ๋ฒ
[์๋ก ์์ฑํ๊ณ ์ ํ๋ ํด๋์ค] extends [์์ ๋ฐ๊ณ ์ํ๋ ํด๋์ค]
[์์ ํด๋์ค] extends [์กฐ์ ํด๋์ค]
[ํ์ ํด๋์ค] extends [์์ ํด๋์ค]
[ํ์๋ ํด๋์ค] extends [๊ธฐ๋ฐ ํด๋์ค]
Child extends Parent
๐ข ๋จ์ผ ์์
JAVA๋ ๋ค์ค ์์์ด ๋ถ๊ฐ๋ฅ ํ๋ค. ๋จ์ผ ์์๋ง ๊ฐ๋ฅํ๋ค.
โ: (์์) extends (์กฐ์1), (์กฐ์2)
์์ ๊ณ์ธต๋
๋ค์ด์ด๊ทธ๋จ
๐จ ์กฐ์ํด๋์ค๊ฐ ๋ฉด๊ฒฝ๋๋ฉด ์์ํด๋์ค๋ ์๋์ ์ผ๋ก ์ํฅ์ ๋ฐ๋๋ค
๐จ ์์ํด๋์ค๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ์กฐ์ ํด๋์ค์ ์ํฅ ์๋ค
๐จ ์์ฑ์์ ์ด๊ธฐํ ๋ธ๋ญ์ ์์๋์ง ์๋๋ค
๐จ ์์ ํด๋์ค์ ๋ฉค๋ฒ๊ฐ์๋ ์กฐ์ ํด๋์ค๋ณด๋ค ํญ์ ๊ฐ๊ฑฐ๋ ๋ง๋ค (๊ทธ๋์ extends
: ํ์ฅ์ด๋ผ๋ ๋จ์ด๋ฅผ ์)
์์
package com.week.six;
class Tv {
boolean power;
int channel;
void power() {
power = !power;
}
void channelUp() {
++channel;
}
void channelDown() {
--channel;
}
}
class CaptionTv extends Tv {
boolean caption;
void displayCaption() {
if (caption) {
System.out.println("Hello, World");
}
}
}
class CaptionTvTest {
public static void main(String[] args) {
CaptionTv ctv = new CaptionTv();
ctv.channel = 10;
ctv.channelUp();
System.out.println(ctv.channel);
ctv.displayCaption();
ctv.caption = true;
ctv.displayCaption();
}
}
์์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ฉด ์กฐ์ ํด๋์ค์ ๋ฉค๋ฒ์ ์์ ํด๋์ค์ ๋ฉค๋ฒ๊ฐ ํฉ์ณ์ง ํ๋์ ์ธ์คํด์ค๋ก ์์ฑ๋๋ค.
ํฌํจ ๊ด๊ณ
์์ ์ธ์ ํด๋์ค๋ฅผ ์ฌ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ.
ํ ํด๋์ค์ ๋ฉค๋ฒ๋ณ์๋ก ๋ค๋ฅธ ํด๋์ค ํ์
์ ์ฐธ์กฐ ๋ณ์๋ฅผ ์ ์ธ.
class Circle {
Point c = new Point();
int r;
}
์์/ํฌํจ ๊ด๊ณ๋ ์ด๋ป๊ฒ ๊ฒฐ์ ์ง๋๊ฐ?
๐จ ์์: (์์)์ (์กฐ์)์ด๋ค.
๐จ ํฌํจ๊ด๊ณ : (์์)์ (์กฐ์)์ ๊ฐ์ง๊ณ ์๋ค.
์ ๋ฌธ์ฅ์ ๋์
ํด๋ณด๊ณ ์ ์ ํ ๊ฒ์ ์ ํํ๋ฉด ๋๋ค.
ex)
โญ : '์'์ '๋ํ'์ด๋ค. '์'์ '์ '์ ๊ฐ์ง๊ณ ์๋ค.
โ : '์'์ '์ '์ด๋ค. '์'์ '๋ํ'์ ๊ฐ์ง๊ณ ์๋ค.
๐ถ super
super
์ super()
๋ ์ฐจ์ด๊ฐ ์๋ค.
๋จผ์ super
๋ ์์ ํด๋์ค์์ ์กฐ์ ํด๋์ค๋ก๋ถํฐ ์์๋ฐ์ ๋ฉค๋ฒ๋ฅผ ์ฐธ์กฐํ๋๋ฐ ์ฌ์ฉ๋๋ ์ฐธ์กฐ๋ณ์์ด๋ค.
๋ฉค๋ฒ๋ณ์์ ์ง์ญ ๋ณ์์ ์ด๋ฆ์ด ๊ฐ์ ๋ this
๋ฅผ ๋ถ์ฌ์ ๊ตฌ๋ณํ๋ฏ์ด ์์๋ฐ์ ๋ฉค๋ฒ์ ์์ ์ ๋ฉค๋ฒ์ ์ด๋ฆ์ด ๊ฐ์ ๋ ์ด๋ค.
class SuperTest {
public static void main(String args[]) {
Child c = new Child();
c.method();
}
}
class Parent {
int x = 10;
}
class Child extends Parent {
void method() {
System.out.println("x=" + x);
System.out.println("this.x=" + this.x); // Child์ x
System.out.println("super.x=" + super.x); // Parent์ x
}
}
๋ณ์ ๋ง์ด ์๋๋ผ ๋ฉ์๋ ์ญ์ super
๋ฅผ ์จ์ ํธ์ถํ ์ ์๋ค.
์กฐ์ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์์ ํด๋์ค์์ ์ค๋ฒ๋ผ์ด๋ฉ ํ ๊ฒฝ์ฐ์ super
๋ฅผ ์ฌ์ฉํ๋ค.
class Point {
int x;
int y;
String getLocation() {
int x;
String getLocation() { // ์ค๋ฒ๋ผ์ด๋ฉ
// return "x: " + x + ", y : " + y + ", z : " + z;
return super.getLocation() + ", z :" + z; // ์กฐ์์ ๋ฉ์๋ ํธ์ถ
}
}
super()
this()
์ ๋ง์ฐฌ๊ฐ์ง๋ก super()
์ญ์ ์์ฑ์์ด๋ค.this()
๋ ํด๋์ค์ ๋ค๋ฅธ ์์ฑ์๋ฅผ ํธ์ถํ๋ ๋ฐ ์ฌ์ฉ๋์ง๋งsuper()
๋ ์กฐ์ ํด๋์ค์ ์์ฑ์๋ฅผ ํธ์ถํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
์กฐ์ํด๋์ค์ ์์ฑ์๋ฅผ ํธ์ถํด์ผํ๋ ์ด์ ๋ ์์ ํด๋์ค์ ๋ฉค๋ฒ๊ฐ ์กฐ์ํด๋์ค์ ๋ฉค๋ฒ๋ฅผ ์ฌ์ฉํ ์๋ ์์ผ๋ฏ๋ก ์กฐ์์ ๋ฉค๋ฒ๋ค์ด ๋จผ์ ์ด๊ธฐํ๋์ด ์์ด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋๋ฌธ์ ๋ฌด์กฐ๊ฑด Object
ํด๋์ค๋ฅผ ์ ์ธํ ๋ชจ๋ ํด๋์ค์ ์์ฑ์๋ ์ฒซ ์ค์ ๋ฐ๋์ ์์ ์ ๋ค๋ฅธ ์์ฑ์ ๋๋ ์กฐ์์ ์์ฑ์๋ฅผ ํธ์ถํด์ผํ๋ค.
(๋ฃ์ง ์์ผ๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก ์ถ๊ฐํ ๊ฒ์ด๋ค.)
class PointTest {
public static void mian(String args[]) {
Point 3D p3 = new Point3D(1, 2, 3);
}
}
class Point {
int x, y;
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();๋ฅผ ์ฝ์
ํ๋ค.
// super()๋ Point3D์ ์กฐ์์ธ Pointํด๋์ค์ ๊ธฐ๋ณธ ์์ฑ์์ธ Point()๋ฅผ ์๋ฏธํ๋ค.
this.x = x;
this.y = y;
this.z = z;
}
String getLocation() { // ์ค๋ฒ๋ผ์ด๋ฉ
retrun "x: " + x + ", y : " + y + ", z : " + z;
}
}
๐จ ์์ฑ์๊ฐ ์ ์๋์ด ์๋ ํด๋์ค์๋ ์ปดํ์ผ๋ฌ๊ฐ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ์๋์ผ๋ก ์ถ๊ฐํ์ง ์๋๋ค.
๋๋ฌธ์ ์ ์ฝ๋๋ Point()
๊ฐ ์ ์๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ super()
๊ฐ ํธ์ถ๋๋ฉด ์๋ฌ๊ฐ ๋๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ super()
๊ฐ Point(int x, int y)
๋ฅผ ํธ์ถํ๋๋ก super(x, y);
๋ก ์์ ํ๋ฉด ๋๋ค.
๐ถ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ
์ค๋ฒ๋ผ์ด๋ฉ์ด๋?
์กฐ์ ํด๋์ค๋ก๋ถํฐ ์์๋ฐ์ ๋ฉ์๋์ ๋ด์ฉ์ ๋ณ๊ฒฝํ๋ ๊ฒ.
Overied์ ์ฌ์ ์ ์ธ ์๋ฏธ๋ ์์ ๋ฎ์ด์ฐ๋ค(OverWrite) ์ด๋ค.
class SuperTest2 {
}
์ค๋ฒ๋ผ์ด๋ฉ ์กฐ๊ฑด
โ ์ด๋ฆ์ด ๊ฐ์์ผํ๋ค.
โ ๋งค๊ฐ๋ณ์๊ฐ ๊ฐ์์ผํ๋ค.
โ ๋ฐํ ํ์
์ด ๊ฐ์์ผํ๋ค.
โ ์ ๊ทผ ์ ์ด์๋ ์กฐ์ ํด๋์ค์ ๋ฉ์๋๋ณด๋ค ์ข์ ๋ฒ์๋ก ๋ณ๊ฒฝํ ์ ์๋ค.public
> protecte
> default
> private
โ ์กฐ์ ํด๋์ค์ ๋ฉ์๋ ๋ณด๋ค ๋ง์ ์์ ์์ธ๋ฅผ ์ ์ธํ ์ ์๋ค.
์กฐ์ํด๋์ค์ ์ ์๋ ๋ฉ์๋๋ณด๋ค ์ ์ ๊ฐ์์ ์์ธ๋ฅผ ์ ์ธํด๋ Exception
๊ฐ์ ๋ชจ๋ ์์ธ์ ์ต๊ณ ์กฐ์์ ์ ์ธํ๋ ๊ฒ๋ ํ ์ ์๋ค. ์กฐ์๋ณด๋ค ๋ฒ์๊ฐ ์ข์์ผํ๋ค.
โ ์ธ์คํด์ค ๋ฉ์๋๋ฅผ static ๋ฉ์๋๋ก ๋๋ ๊ทธ ๋ฐ๋๋ก ๋ณ๊ฒฝํ ์ ์๋ค.
์ค๋ฒ๋ก๋ฉ์ด๋?
๊ธฐ์กด์ ์๋ ์๋ก์ด ๋ฉ์๋๋ฅผ ์ ์ํ๋ ๊ฒ์ด๋ค.
์ค๋ฒ๋ก๋ฉ์ ๋๋ฌด ๋ง์ด ์ ์ฌํ๋ค(Overload) ๋ฅผ ์๋ฏธํ๋ค.
๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋์ ๋งค๊ฐ๋ณ์์ ํ์ , ๊ฐ์๋ฅผ ๋ค๋ฅด๊ฒ ํ ๊ฒ์ ๋งํ๋ค.
class Parent {
void parentMethod() {}
}
class Child extends Parent {
void parentMethod() {} // ์ค๋ฒ ๋ผ์ด๋ฉ
void parentMethod(int i) {} // ์ค๋ฒ๋ก๋ฉ
void childMethod() {}
void childMethod(int i) {} // ์ค๋ฒ๋ก๋ฉ
void childMethod() {}
}
๐ถ ๋ค์ด๋๋ฏน ๋ฉ์๋ ๋์คํจ์น
๋ฐํ์์ ์ค๋ฒ๋ผ์ด๋ฉ ๋ ๋ฉ์๋๊ฐ ์คํ๋๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋ฐํ์ ์์ ์ ๋คํ์ฑ์ ๋ง์กฑํ๋๋ก ํ ์ ์๋ค.
public class Animal {
public void move() {
System.out.println("Animals can move");
}
}
public class Dog extends Animal {
@Override
public void move() {
System.out.println("Dogs can walk and run");
}
}
public class Main {
public static void main(String[] args) {
Animal a = new Animal(); // Animal ์ฐธ์กฐ, Animal ๊ฐ์ฒด
Animal b = new Dog(); // Animal ์ฐธ์กฐ, Dog ๊ฐ์ฒด
a.move(); // Animal ํด๋์ค์ ์ ์๋ ๋ฉ์๋ ์คํ
b.move(); // Dog ํด๋์ค์ ์ ์๋ ๋ฉ์๋๊ฐ ์คํ๋จ(๋ค์ด๋๋ฏน ๋ฉ์๋ ๋์คํจ์น)
}
}
๐ถ ์ถ์ ํด๋์ค
์ถ์ ํด๋์ค๋ ์ถ์๋ฉ์๋๋ฅผ ํฌํจํ๊ณ ์๋ ํด๋์ค๋ฅผ ๋งํ๋ค.
์ถ์ ๋ฉ์๋๋ฅผ ํฌํจํ๊ณ ์๋ค๋ ๊ฒ์ ์ ์ธํ๊ณ ๋ ์ผ๋ฐํด๋์ค์ ์ ํ ๋ค๋ฅด์ง ์๋ค.
์ถ์ ํด๋์ค์๋ ์์ฑ์๊ฐ ์๊ณ , ๋ฉค๋ฒ๋ณ์์ ๋ฉ์๋๋ ๊ฐ์ง ์ ์๋ค.
ํด๋์ค์ abstract
ํค์๋๋ง ๋ถ์ฌ์ฃผ๋ฉด ์ถ์ ํด๋์ค๊ฐ ๋๋ค.
abstract class ํด๋์ค ์ด๋ฆ {
...
}
์ถ์ ๋ฉ์๋
๊ธฐ๋ณธ์ ์ธ ๋ฉ์๋๋ ์ ์ธ๋ถ์ ๊ตฌํ๋ถ(์ค๊ดํธ๋ก ๊ฐ์ธ์ง ๋ถ๋ถ)๋ก ๋๋์ด์ ธ ์๋๋ฐ
์ถ์ ๋ฉ์๋๋ ๊ตฌํ๋ถ๋ ์๊ณ ์ ์ธ๋ถ๋ง ์๋ ๊ฒ์ด๋ค.
๋ง ๊ทธ๋๋ก ์ ํํ ๋ด์ฉ์ ์ ์ ์์ผ๋ "์ถ์์ "์ธ ๋ฉ์๋์ธ ๊ฒ์ด๋ค.
์ถ์ ๋ฉ์๋๋ abstract
ํค์๋๋ง ๋ถ์ฌ์ฃผ๋ฉด ๋๋ค.
abstract ๋ฆฌํดํ์
๋ฉ์๋ ์ด๋ฆ();
์ถ์๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ์ด์
๋ฉ์๋์ ๋ด์ฉ์ด ์์๋ฐ๋ ํด๋์ค์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์๊ธฐ ๋๋ฌธ์ ์กฐ์ํด๋์ค์์๋ ์ ์ธ๋ถ๋ง ์์ฑํ๊ณ ,
์ค์ ๋ด์ฉ์ ์์๋ฐ๋ ํด๋์ค์์ ๊ตฌํํ๋๋ก ๋น์๋๋ ๊ฒ์ด๋ค.
abstract class Player { // ์ถ์ํด๋์ค
abstract void play(int pos); // ์ถ์๋ฉ์๋
abstract void stop(); // ์ถ์๋ฉ์๋
}
class AudioPlayer extends Play {
void play(int pos) { ... } // ์ถ์ ๋ฉ์๋๋ฅผ ๊ตฌํ(์ค๋ฒ๋ผ์ด๋ฉ)
void stop() { ... } // ์ถ์ ๋ฉ์๋๋ฅผ ๊ตฌํ(์ค๋ฒ๋ผ์ด๋ฉ)
}
abstract class AbstractPlayer etends Player {
void play(int pos) { ... } // ์ถ์ ๋ฉ์๋๋ฅผ ๊ตฌํ
}
์ถ์ํ : ํด๋์ค ๊ฐ์ ๊ณตํต์ ์ ์ฐพ์๋ด์ ๊ณตํต์ ์กฐ์์ ๋ง๋๋ ์์
๊ตฌ์ฒดํ : ์์์ ํตํด ํด๋์ค๋ฅผ ๊ตฌํ, ํ์ฅํ๋ ์์
๐ถ ์ ์ด์
์ ์ด์(modifier)๋ ํด๋์ค, ๋ณ์ ๋๋ ๋ฉ์๋์ ์ ์ธ๋ถ์ ํจ๊ป ์ฌ์ฉ๋์ด ๋ถ๊ฐ์ ์ธ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๋ค.
์ ๊ทผ์ ์ด์ : public, protected, d efault, private
๊ทธ ์ธ : static final, abstract, native, transient, synchronized, volatile, strictfp
static
"ํด๋์ค์" ๋๋ "๊ณตํต์ ์ธ"์ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์ธ์คํด์ค ๋ณ์๋ ํ๋์ ํด๋์ค๋ก๋ถํฐ ์์ฑ๋์๋๋ผ๋ ๊ฐ๊ธฐ ๋ค๋ฅธ ๊ฐ์ ์ ์งํ์ง๋ง,
ํด๋์ค ๋ณ์๋ ์ธ์คํด์ค ์๊ด์์ด ๊ฐ์ ๊ฐ์ ๊ฐ์ง๋ค.
์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
์ธ์คํด์ค ๋ฉ์๋์ static๋ฉ์๋(ํด๋์ค ๋ฉ์๋)์ ์ฐจ์ด๋
๋ฉ์๋ ๋ด์์ ์ธ์คํด์ค ๋ฉค๋ฒ๋ฅผ ์ฌ์ฉํ๋๊ฐ์ ์ฌ๋ถ์ ์๋ค.
static์ด ์ฌ์ฉ๋ ์ ์๋ ๊ณณ - ๋ฉค๋ฒ๋ณ์, ๋ฉ์๋, ์ด๊ธฐํ ๋ธ๋ญ
์ ์ด์ | ๋์ | ์๋ฏธ |
static | ๋ฉค๋ฒ๋ณ์ | - ๋ชจ๋ ์ธ์คํด์ค์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ ํด๋์ค ๋ณ์๊ฐ ๋๋ค. - ํด๋์ค ๋ณ์๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์๊ณ ๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. - ํด๋์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ๋ ์ฌ์ฉ๋๋ค. |
๋ฉ์๋ | - ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์๊ณ ๋ ํธ์ถ์ด ๊ฐ๋ฅํ static ๋ฉ์๋๊ฐ ๋๋ค. - static ๋ฉ์๋ ๋ด์์๋ ์ธ์คํด์ค ๋ฉค๋ฒ๋ค์ ์ง์ ์ฌ์ฉํ ์ ์๋ค. |
class Static Test {
static int width = 200; // ํด๋์ค ๋ณ์(static ๋ณ์)
static int height = 120; // ํด๋์ค ๋ณ์(static ๋ณ์
static {
// static ๋ณ์์ ๋ณต์กํ ์ด๊ธฐํ ์ํ
}
static int max(int a, int b) { // ํด๋์ค ๋ฉ์๋(static ๋ฉ์๋)
return a > b ? a : b;
}
}
final
final์ '๋ง์ง๋ง์' ๋๋ '๋ณ๊ฒฝ๋ ์ ์๋'์ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
๋ณ์์ ์ฌ์ฉ๋๋ฉด ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ์์๊ฐ ๋๊ณ ,
๋ฉ์๋์ ์ฌ์ฉ๋๋ฉด ์ค๋ฒ๋ผ์ด๋ฉ์ ํ ์ ์๊ณ ,
ํด๋์ค์ ์ฌ์ฉ๋๋ฉด ์์ ์ ํ์ฅํ๋ ์์ ํด๋์ค๋ฅผ ์ ์ํ์ง ๋ชปํ๊ฒ ๋๋ค.
final์ด ์ฌ์ฉ๋ ์ ์๋ ๊ณณ - ํด๋์ค, ๋ฉ์๋, ๋ฉค๋ฒ๋ณ์, ์ง์ญ๋ณ์
์ ์ด์ | ๋์ | ์๋ฏธ |
final | ํด๋์ค | ๋ณ๊ฒฝ๋ ์ ์๋ ํด๋์ค, ํ์ฅ๋ ์ ์๋ ํด๋์ค๊ฐ ๋๋ค. ๊ทธ๋์ final๋ก ์ง์ ๋ ํด๋์ค๋ ๋ค๋ฅธ ํด๋์ค์ ์กฐ์์ด ๋ ์ ์๋ค. |
๋ฉ์๋ | ๋ณ๊ฒฝ๋ ์ ์๋ ๋ฉ์๋, final๋ก ์ง์ ๋ ๋ฉ์๋๋ ์ค๋ฒ๋ผ์ด๋ฉ์ ํตํด ์ฌ์ ์๋ ์ ์๋ค. | |
๋ฉค๋ฒ๋ณ์ | ๋ณ์ ์์ final์ด ๋ถ์ผ๋ฉด ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ์์๊ฐ ๋๋ค. | |
์ง์ญ ๋ณ์ |
final class FinalTest { // ์กฐ์์ด ๋ ์ ์๋ ํด๋์ค
final int MAX_SIZE = 10; // ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ๋ฉค๋ฒ๋ณ์(์์)
final void getMaxSize() { // ์ค๋ฒ๋ผ์ด๋ฉ ํ ์ ์๋ ๋ฉ์๋(๋ณ๊ฒฝ ๋ถ๊ฐ)
final int LV = MAX_SIZE; // ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ์ง์ญ๋ณ์(์์)
return MAX_SIZE;
}
}
์์ฑ์๋ฅผ ์ด์ฉํ final ๋ฉค๋ฒ ๋ณ์์ ์ด๊ธฐํ
final์ด ๋ถ์ ๋ณ์๋ ์์์ด๋ฏ๋ก ์ผ๋ฐ์ ์ผ๋ก ์ ์ธ๊ณผ ์ด๊ธฐํ๋ฅผ ๋์์ ํ์ง๋ง ์ธ์คํด์ค ๋ณ์์ ๊ฒฝ์ฐ ์์ฑ์์์ ์ด๊ธฐํ๋๋๋ก ํ ์ ์๋ค.
ํด๋์ค ๋ด์ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ๋ ์์ฑ์๋ฅผ ์ ์ธํ์ฌ, ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ final์ด ๋ถ์ ๋ฉค๋ฒ ๋ณ์๋ฅผ ์ด๊ธฐํํ๋๋ฐ ํ์ํ ๊ฐ์ ์์ฑ์์ ๋งค๊ฐ๋ฒผ์๋ก๋ถํฐ ์ ๊ณต๋ฐ๋ ๊ฒ์ด๋ค.
์ด ๊ธฐ๋ฅ์ ํ์ฉํ๋ฉด ์ธ์คํด์ค๋ง๋ค final์ด ๋ถ์ ๋ฉค๋ฒ๋ณ์๊ฐ ๋ค๋ฅธ ๊ฐ์ ๊ฐ๋๋ก ํ ์ ์๋ค.
class Card {
final int NUMBER; // ์์์ง๋ง ์ ์ธ๊ณผ ํจ๊ป ์ด๊ธฐํํ์ง ์๊ณ
final String KIND; // ์์ฑ์์์ ๋จ ํ๋ฒ๋ง ์ด๊ธฐํํ ์ ์๋ค.
static int width = 100;
static int height = 250;
Card (String kind, int num) { // ๋งค๊ฐ๋ณ์๋ก ๋๊ฒจ๋ฐ์ ๊ฐ์ผ๋ก KIND์ NUMBER๋ฅผ ์ด๊ธฐํํ๋ค.
KINE = kind;
NUMBER = num;
}
Card() {
this("HEART", 1);
}
public String toString() {
return KIND + " " + NUMBER;
}
class FinalCardTest {
public static void main(String args[]) {
Card c = new Card(HEART", 10);
// c.NUMBER = 5 < ์๋ฌ ๋ฐ์
System.out.pringln(c.KIND); // HEART
System.out.pringln(c.NUMBer); // 10
System.out.pringln(c) // HEART 10
}
}
}
abstract
abstract
๋ ๋ฏธ์์ฑ์ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
absract๊ฐ ์ฌ์ฉ๋ ์ ์๋ ๊ณณ - ํด๋์ค, ๋ฉ์๋
์ ์ด์ | ๋์ | ์๋ฏธ |
abstract | ํด๋์ค | ํด๋์ค ๋ด์ ์ถ์ ๋ฉ์๋๊ฐ ์ ์ธ๋์ด ์์์ ์๋ฏธํ๋ค. |
๋ฉ์๋ | ์ ์ธ๋ถ๋ง ์์ฑํ๊ณ ๊ตฌํ๋ถ๋ ์์ฑํ์ง ์์ ์ถ์ ๋ฉ์๋์์ ์๋ฆฐ๋ค. |
์ ๊ทผ ์ ์ด์
์ ๊ทผ ์ ์ด์๋ ๋ฉค๋ฒ ๋๋ ํด๋์ค์ ์ฌ์ฉ๋์ด ํด๋นํ๋ ๋ฉค๋ฒ ๋๋ ํด๋์ค๋ฅผ ์ธ๋ถ์์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ์ ํํ๋ ์ญํ ์ ํ๋ค.
์ ๊ทผ ์ ์ด์๊ฐ ์ฌ์ฉ๋ ์ ์๋ ๊ณณ - ํด๋์ค, ๋ฉค๋ฒ๋ณ์, ๋ฉ์๋, ์์ฑ์
private - ๊ฐ์ ํด๋์ค ๋ด์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
default - ๊ฐ์ ํจํค์ง ๋ด์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
protected - ๊ฐ์ ํจํค์ง ๋ด์์, ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ํจํค์ง์ ์์ํด๋์ค์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
public - ์ ๊ทผ ์ ํ์ด ์ ํ ์๋ค.
์ ์ด์ | ๊ฐ์ ํด๋์ค | ๊ฐ์ ํจํค์ง | ์์ ํด๋์ค | ์ ์ฒด |
public | โญ | โญ | โญ | โญ |
protected | โญ | โญ | โญ | |
(default) | โญ | โญ | ||
private | โญ |
public > protected > (default) > private
๐ถ Object ํด๋์ค
๋ชจ๋ ํด๋์ค ์์ ๊ณ์ธต๋์ ์ต์์์ ์๋ ์กฐ์ ํด๋์ค.
ํด๋์ค๋ฅผ ์ ์ธํ๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก extends Object
๋ฅผ ๋ถ์ธ๋ค.toString()
, equals(Object o)
๋ฑ ๋ชจ๋ ์ธ์คํด์ค๊ฐ ๊ฐ์ ธ์ผํ ๊ธฐ๋ณธ์ ์ธ ๋ฉ์๋๋ฅผ ๊ทธ๋ฅ ์ธ ์ ์๋ ์ด์ ์ด๋ค.
'JAVA > WhiteShip Java Live Study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] ํจํค์ง๋? (package, import, classpath...) (0) | 2021.06.12 |
---|---|
[JAVA] ํด๋์ค๋? (ํด๋์ค, ๊ฐ์ฒด, new, ๋ฉ์๋, ์์ฑ์, this...) (0) | 2021.05.28 |
[JAVA] ์ ์ด๋ฌธ (2) | 2021.05.23 |
[JAVA] ์ฐ์ฐ์ (ํ์ดํ, ์ผํญ, switch...) (0) | 2021.05.17 |
[JAVA] ์๋ฐ ๋ฐ์ดํฐ ํ์ , ๋ณ์ ๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ด (0) | 2021.05.17 |