์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- H2 ์ค์น
- Vue.js
- ํ์ด์ฌ
- ์คํ๋ง
- ํด๋ฆฐ์ฝ๋
- GitHub
- ์ฝ๋์
- go
- Gradle
- Postman
- JPA
- MySQL
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- spring security
- mariadb
- ๊ธฐ์ด100์
- Codeup
- Python
- springboot
- thymeleaf
- java
- ํด๋ฆฐ ์ฝ๋
- ๋กฌ๋ณต
- ์๊ณ ๋ฆฌ์ฆ
- ์ค๋ธ์
- golang
- Spring Boot
- Git
- ๊ฐ์ฌ์ค
- Spring
- Today
- Total
nyximos.log
[Java] ์์ ๋ณธ๋ฌธ
๐ฉ๐ ๋ชฉํ
์๋ฐ์ Class์ ๋ํด ํ์ตํ์ธ์
๐ฉ๐ป ํ์ตํ ๊ฒ
- ์๋ฐ ์์์ ํน์ง
- super ํค์๋
- ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ
- ๋ค์ด๋๋ฏน ๋ฉ์๋ ๋์คํจ์น (Dynamic Method Dispatch)
- ์ถ์ ํด๋์ค
- final ํค์๋
- Object ํด๋์ค
๐ช ์๋ฐ ์์์ ํน์ง
๊ธฐ์กด ํด๋์ค๋ฅผ ์ฌ์ฌ์ฉํ์ฌ ์๋ก์ด ํด๋์ค๋ฅผ ์์ฑํ๋ ๊ฒ
์ง์ ์์ฑํ์ง ์๋๋ผ๋ ๊ธฐ์กด ํด๋์ค์ ํ๋์ ๋ฉ์๋๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๋ค.
์์์ ์ฅ์
- ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ ↑
- ์ฝ๋ ์ค๋ณต ์ ๊ฑฐ
- ํ๋ก๊ทธ๋จ ์์ฐ์ฑ ↑
- ์ ์ง๋ณด์์ฑ ↑
class ํ์ํด๋์ค extends ์์ํด๋์ค{
}
class Parent { }
class Child extends Parent {
}
๐ ์์ ํด๋์ค · ๋ถ๋ชจ/์กฐ์ ํด๋์ค · ์ํผํด๋์ค
์์ํด์ฃผ๋ ํด๋์ค
๐ ํ์ ํด๋์ค · ์์/์์ ํด๋์ค · ์๋ธํด๋์ค
๋ค๋ฅธ ํด๋์ค์์ ํ์๋ ํด๋์ค
์์ ํด๋์ค์ ๋ชจ๋ ๋ฉค๋ฒ๋ฅผ ์์ ๋ฐ๋๋ค. (์์ฑ์์ ์ด๊ธฐํ ๋ธ๋ญ์ ์์๋์ง ์๋๋ค.)
์๋ก์ด ์ฝ๋๊ฐ ์ถ๊ฐ ๋์ด๋ ์์ ํด๋์ค๋ ์๋ฌด๋ฐ ์ํฅ์ ๋ฐ์ง ๋ชปํ๋ค.
Object ํด๋์ค
๋ชจ๋ ํด๋์ค๋ Object Class๋ก๋ถํฐ ์์๋ฐ๋๋ค.
๋จ์ผ ์์ single inheritance
C++์์๋ ๋ค์ค ์์ multiple inheritance์ ํ์ฉํ์ง๋ง ์๋ฐ์์๋ ๋จ์ผ ์์๋ง ๊ฐ๋ฅํ๋ค.
๋ ๊ฐ ์ด์์ ํด๋์ค๋ฅผ ์์๋ฐ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค.
ํ๋์ ์์ ํด๋์ค๋ง ๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ์ ํด๋์ค๊ฐ์ ๊ด๊ณ๊ฐ ๋ช ํํ๊ณ ์ฝ๋์ ์ ๋ขฐ์ฑ์ด ๋๋ค.
class ํ์ํด๋์ค extends ์์ํด๋์ค1, ์์ํด๋์ค{ // ๋ถ๊ฐ๋ฅ
}
๐ฆธโ๏ธ super ํค์๋
์ฐธ์กฐ๋ณ์ Super
์์ ํด๋์ค์ ๋ฉค๋ฒ๋ฅผ ์ฐธ์กฐํ๋๋ฐ ์ฌ์ฉ
์์๋ฐ์ ๋ฉค๋ฒ์ ์์ ์ ๋ฉค๋ฒ์ ์ด๋ฆ์ด ๊ฐ์ ๋ super๋ฅผ ๋ถ์ฌ์ ๊ตฌ๋ณ
class Parent {
int x = 10;
void printMethod() {
System.out.println("Printed in Parent Class.");
}
}
class Child extends Parent {
int x = 20;
void guessX(){
System.out.println("x = " + x);
System.out.println("this.x = " + this.x);
System.out.println("super.x = " + super.x);
}
void printMethod() {
super.printMethod();
System.out.println("Printed in Child Class.");
}
}
public class InheritanceTest {
public static void main(String[] args) {
Child child = new Child();
child.guessX();
System.out.println("==========================");
child.printMethod();
}
}
x = 20
this.x = 20
super.x = 10
==========================
Printed in Parent Class.
Printed in Child Class.
์์ฑ์ super()
ํ์ ํด๋์ค์ ์์ฑ์์์ ์์ ํด๋์ค์ ์์ฑ์๋ฅผ ํธ์ถํ๋๋ฐ ์ฌ์ฉ
์์ฑ์์ ์ฒซ์ค์ ๋ฐ๋์ ์์ฑ์ ํธ์ถํ๋ค.
๋ช ์์ ์ผ๋ก ํธ์ถํ์ง ์์ผ๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ์์ฑ์ ํธ์ถ์ super()๋ฅผ ์ถ๊ฐํ๋ค.
๋ช ์์ ํธ์ถ
class Store {
Store() {
System.out.println("Store ์์ฑ์");
}
}
class LiquorStore extends Store{
LiquorStore() {
super();
System.out.println("LiquorStore ์์ฑ์");
}
}
public class ConstructorSuperTest {
public static void main(String[] args) {
LiquorStore liquorStore = new LiquorStore();
}
}
Store ์์ฑ์
LiquorStore ์์ฑ์
๋ฌต์์ ํธ์ถ
class Store {
Store() {
System.out.println("Store ์์ฑ์");
}
}
class LiquorStore extends Store{
LiquorStore() {
System.out.println("LiquorStore ์์ฑ์");
}
}
public class ConstructorSuperTest {
public static void main(String[] args) {
LiquorStore liquorStore = new LiquorStore();
}
}
Store ์์ฑ์
LiquorStore ์์ฑ์
๐งโ๏ธ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ
override : ~ ์์ ๋ฎ์ด์ฐ๋ค.
ํ์ ํด๋์ค์ ๋ฉ์๋๊ฐ ์์ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ ํ๋ค.
์ค๋ฒ๋ก๋ฉ overloading๊ณผ ํท๊ฐ๋ฆฌ๊ธฐ ์ฝ๋ค.
๐ ์ค๋ฒ๋ก๋ฉ overloading
- ๊ธฐ์กด์ ์๋ ์๋ก์ด ๋งค์๋๋ฅผ ์ ์ํ๋ ๊ฒ
- ์ ์ธ๋ถ๊ฐ ๋ค๋ฅด๋ค.
๐ ์ค๋ฒ๋ผ์ด๋ฉ overriding
- ์์๋ฐ์ ๋ฉ์๋์ ๋ด์ฉ์ ๋ณ๊ฒฝํ๋ ๊ฒ
- ๊ตฌํ๋ถ๊ฐ ๋ค๋ฅด๋ค.
- ๋ฉ์๋์ ์ ์ธ๋ถ(๋ฉ์๋๋ช . ๋งค๊ฐ๋ณ์, ๋ฐํํ์ )๊ฐ ์์ ํด๋์ค์ ๋ฉ์๋์์ ์ผ์นํ๋ค.
- ์ ๊ทผ ์ ์ด์๋ฅผ ์กฐ์ ํด๋์ค์ ๋ฉ์๋๋ณด๋ค ์ข์ ๋ฒ์๋ก ๋ณ๊ฒฝํ ์ ์๋ค.
- ์กฐ์ ํด๋์ค์ ๋ฉ์๋๋ณด๋ค ๋ง์ ์์ ์์ธ๋ฅผ ์ ์ธํ ์ ์๋ค.
class Animal{
void run(){
System.out.println("๋๋ฌผ์ด ๋ฌ๋ฆฝ๋๋ค.");;
}
}
class Cat extends Animal {
void run() {
System.out.println("๊ณ ์์ด๊ฐ ๋ฌ๋ฆฝ๋๋ค.");
}
}
public class OverridingTest {
public static void main(String[] args) {
Cat cat = new Cat();
cat.run();
}
}
๊ณ ์์ด๊ฐ ๋ฌ๋ฆฝ๋๋ค.
๐ฉ๐ฌ ๋ค์ด๋๋ฏน ๋ฉ์๋ ๋์คํจ์น (Dynamic Method Dispatch)
- override๋ ๋ฉ์๋์ ๋ํ ํธ์ถ์ด ์ปดํ์ผ์ด ์๋ ๋ฐํ์ ๋ ํ์ธ๋๋ ๋งค์ปค๋์ฆ
- ์ปดํ์ผ๋ฌ๋ ์ด๋ค ๋ฉ์๋๋ฅผ ํธ์ถํ ์ง ๋ชจ๋ฅธ๋ค. ๋ฐํ์ ์์ ์ด ๋์ด์ผ ์ ์ ์๋ค.
- override๋ ๋ฉ์๋๊ฐ ์์ ํด๋์ค ์ฐธ์กฐ๋ฅผ ํตํด ํธ์ถ๋๋ฉด,
Java๋ ํธ์ถ์ด ๋ฐ์ํ ์์ ์ ์ฐธ์กฐ๋๋ ๊ฐ์ฒด์ ์ ํ์ ๋ฐ๋ผ์ ์์ ํด๋์ค๋ฅผ ์คํํ ์ง, ํ์ ํด๋์ค๋ฅผ ์คํํ ์ง ๊ฒฐ์ ํ๋ค.
๐ upcasting
์์ ํด๋์ค ์ฐธ์กฐ ๋ณ์๋ ์๋ธ ํด๋์ค ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
Java๋ ์ด ์ฌ์ค์ ์ฌ์ฉํ์ฌ ๋ฐํ์์ override๋ ๋ฉ์๋์ ๋ํด ํธ์ถํ๋ค.
์์ ํด๋์ค์ ํ์ ํด๋์ค์ ์ํด override๋ ๋ฉ์๋๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ,
์์ ํด๋์ค ์ฐธ์กฐ ๋ณ์๋ฅผ ํตํด ๋ค๋ฅธ ์ ํ์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ๋ ๋ค๋ฅธ ๋ฒ์ ์ ๋ฉ์๋๊ฐ ์คํ๋๋ค.
์์ํด๋์ค obj = new ํ์ํด๋์ค();
๐Dynamic Method Dispatch ์ฅ์
๋ฐํ์ ๋คํ์ฑ์ ํต์ฌ์ธ overriding of methods ์ง์
// A Java program to illustrate Dynamic Method
// Dispatch using hierarchical inheritance
class A
{
void m1()
{
System.out.println("Inside A's m1 method");
}
}
class B extends A
{
// overriding m1()
void m1()
{
System.out.println("Inside B's m1 method");
}
}
class C extends A
{
// overriding m1()
void m1()
{
System.out.println("Inside C's m1 method");
}
}
// Driver class
class Dispatch
{
public static void main(String args[])
{
// object of type A
A a = new A();
// object of type B
B b = new B();
// object of type C
C c = new C();
// obtain a reference of type A
A ref;
// ref refers to an A object
ref = a;
// calling A's version of m1()
ref.m1();
// now ref refers to a B object
ref = b;
// calling B's version of m1()
ref.m1();
// now ref refers to a C object
ref = c;
// calling C's version of m1()
ref.m1();
}
}
https://www.geeksforgeeks.org/dynamic-method-dispatch-runtime-polymorphism-java/
๐งโ๏ธ ์ถ์ ํด๋์ค abstract class
- ์์ ํ๊ฒ ๊ตฌํ๋์ด ์์ง ์์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ ํด๋์ค
- ์ ์ธ์ abstract๋ฅผ ๋ถ์ธ๋ค.
- ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ค.
- ํ๋ ์ด์์ ์ถ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
๐ ์ถ์ ๋ฉ์๋ abstract method
- ์ ์ธ๋ถ๋ง ์์ฑํ๋ค.
- ๊ตฌํ๋ถ๋ ์กด์ฌํ์ง ์๋๋ค. → ๋ฉ์๋์ ๋ด์ฉ์ด ์์๋ฐ๋ ํด๋์ค์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.
- ์ถ์ ํด๋์ค๋ฅผ ์์๋ฐ๋ ํ์ ํด๋์ค๊ฐ ์ค๋ฒ๋ผ์ด๋ฉ์ ํตํด ์ถ์ ๋ฉ์๋๋ฅผ ๋ชจ๋ ๊ตฌํํด์ผ ํ๋ค.
abstract ๋ฆฌํดํ์
๋ฉ์๋์ด๋ฆ();
abstract class Shape {
private int x,y;
// ์ถ์ ๋ฉ์๋๊ฐ ์๋ ๋ฉ์๋๋ ๊ฐ์ง ์ ์๋ค.
public void move(int x, int y) {
this.x = x;
this.y = y;
}
public abstract void draw();
}
class Rectangle extends Shape {
private int width, height;
public void draw() {
System.out.println("์ฌ๊ฐํ ๊ทธ๋ฆฌ๊ธฐ");
}
}
class Circle extends Shape {
private int radius;
public void draw() {
System.out.println("์ ๊ทธ๋ฆฌ๊ธฐ");
}
}
public class AbstractTest {
public static void main(String[] args) {
Rectangle rectangle = new Rectangle();
rectangle.draw();
Circle circle = new Circle();
circle.draw();
}
}
๐ฉ๐ final ํค์๋
final : ๋ง์ง๋ง์, ๋ณ๊ฒฝ๋ ์ ์๋
ํด๋์ค์ ์ฌ์ฉ : ์์ ์ ํ์ฅํ๋ ์์ํด๋์ค๋ฅผ ์ ์ํ์ง ๋ชปํ๊ฒ ๋๋ค. → String, Math
๋ฉ์๋์ ์ฌ์ฉ : ๋ณ๊ฒฝํ ์ ์๋ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ์ ํ ์ ์๋ค.
๋ณ์์ ์ฌ์ฉ : ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ์์
final class FinalTest { // ์กฐ์์ด ๋ ์ ์๋ ํด๋์ค
final int MAX_SIZE = 10; // ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ๋ฉค๋ฒ ๋ณ์ (์์)
final int getMaxSize() {
final int LV = MAX_SIZE; // ์ค๋ฒ๋ผ์ด๋ฉํ ์ ์๋ ๋ฉ์๋
return MAX_SIZE; // ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ์ง์ญ๋ณ์ (์์)
}
}
๐ต๏ธโ๏ธ Object ํด๋์ค
๋ชจ๋ ํด๋์ค์ ์กฐ์ ํด๋์ค์ด๋ค.
Object ํด๋์ค์ ๋ฉค๋ฒ๋ค์ ๋ชจ๋ ํด๋์ค์์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ค.
11๊ฐ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
๊ฐ์ฒด ์์ ์ ๋ณต์ฌ๋ณธ์ ๋ฐํํ๋ค.
protected Object clone()
๊ฐ์ฒด ์์ ๊ณผ ๊ฐ์ฒด obj๊ฐ ๊ฐ์ ๊ฐ์ฒด์ธ์ง ์๋ ค์ค๋ค.
๊ฐ๊ณ ๋ค๋ฆ์ ์ฐธ์กฐ๋ณ์์ ๊ฐ์ผ๋ก ํ๋จํ๋ค.
๊ฐ์ผ๋ฉด true
public boolean equals(Object obj)
๊ฐ์ฒด๊ฐ ์๋ฉธ๋ ๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ์ํด ์๋์ ์ผ๋ก ํธ์ถ๋๋ค.
์ด ๋ ์ํ๋์ด์ผํ๋ ์ฝ๋๊ฐ ์์ ๋ ์ค๋ฒ๋ผ์ด๋ฉํ๋ค.
protected void finalize()
๊ฐ์ฒด ์์ ์ ํด๋์ค ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ Class ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ค.
public Class getClass()
๊ฐ์ฒด ์์ ์ ํด์์ฝ๋๋ฅผ ๋ฐํํ๋ค.
public int hashCode()
๊ฐ์ฒด ์์ ์ ์ ๋ณด๋ฅผ ๋ฌธ์์ด๋ก ๋ฐํํ๋ค.
public String toString()
๊ฐ์ฒด ์์ ์ ์ฌ์ฉํ๋ ค๊ณ ๊ธฐ๋ค๋ฆฌ๋ ์ฐ๋ ๋๋ฅผ ํ๋๋ง ๊นจ์ด๋ค.
public void notify()
๊ฐ์ฒด ์์ ์ ์ฌ์ฉํ๋ ค๊ณ ๊ธฐ๋ค๋ฆฌ๋ ๋ชจ๋ ์ฐ๋ ๋๋ฅผ ๊นจ์ด๋ค.
public void notifyAll()
๋ค๋ฅธ ์ฐ๋ ๋๊ฐ notify()๋ notifyAll()์ ํธ์ถํ ๋๊น์ง,
ํ์ฌ ์ฐ๋ ๋๋ฅผ ๋ฌดํํ ๋๋ ์ง์ ๋ ์๊ฐ (timeout, nanos)๋์ ๊ธฐ๋ค๋ฆฌ๊ฒ ํ๋ค.
public void wait()
public void wait(long timeout)
public void wait(long timeout, int nanos)
์ฐธ์กฐ
๋จ๊ถ์ฑ, ์๋ฐ์ ์ ์ ๊ธฐ์ดํธ, ๋์ฐ์ถํ, 2019
https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
'Programming > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ์ธํฐํ์ด์ค (1) | 2022.08.29 |
---|---|
[Java] ํจํค์ง (0) | 2022.08.17 |
[Java] ํด๋์ค (0) | 2022.08.05 |
[Java] ์ ์ด๋ฌธ (0) | 2022.08.04 |
[Java] ์ฐ์ฐ์ (0) | 2022.02.02 |