JAVA 객체지향 정리
클래스
클래스는 객체와 관련된 데이터와 처리 동작을 한데 모은 객체의 설계도라고 할 수 있다.
필드 = 멤버 변수 = 데이터는 모두 같은 말이다.
메서드 = 동작은 같은 말이다.
필드와 메서드를 클래스의 멤버라고 한다.
클래스가 실체화된 것을 객체(Object)라고 한다.
클래스를 실체화하기 위해서 JAVA에서는 new라는 키워드를 사용한다.
Example) Book myBook = new Book();
book이라는 클래스가 new라는 키워드를 통해 실체화되어 myBook이라는 이름의 객체가 생성된다.
패키지
A 패키지에 Circle 클래스가 있고, B 패키지에도 Circle 클래스가 있을 때, 둘 다 동일한 Circle이라는 클래스명을 가지고 있더라도 패키지만 서로 다르다면 문제없이 사용할 수 있다.
오버 로딩
하나의 클래스에서 동일한 이름의 메서드를 여러 개 정의하는 것이다.
Example 1) 반환 타입이 다르면 오버 로딩이 가능하다.
int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; }
Example 2) 인수의 개수가 다르면 오버 로딩이 가능하다.
int add(int a, int b) { return a + b; }
int add(int a, int b, int c) { return a + b + c; }
생성자
1. 객체 생성과 함께 자동적으로 호출되는 특수한 메서드이다.
2. 개발자가 생성자를 따로 정의하지 않으면 인수가 없는 디폴트 생성자가 자동으로 만들어진다.
생성자를 사용하는 이유)
이유 1: 객체 생성시 초기화 작업
이유 2: 객체 생성시 필수 입력값을 강제하기
필드 스태틱
static 변수는 프로그램 실행전에 로드된다.
같은 클래스에서 생성된 오브젝트들은 static을 붙인 필드의 값을 서로 공유한다.
public class StaticExample01 {
static class A {
//필드의 스태틱은
static int num;
}
public static void main(String[] args) {
A a1 = new A();
A a2 = new A();
//같은 클래스에서 생성된 오브젝트들은 static 을 붙인 필드의 값을 공유한다.
a1.num = 50;
a2.num = 10;
//결과: a1 = 10/a2 = 10
System.out.println("a1 = " + a1.num + "/a2 = " + a2.num);
}
}
추상 클래스
처리 내용을 기술하지 않고 정의만 되어있는 메서드를 추상 메서드라고 한다.
Example) abstract void cry();
추상 메서드를 한 개라도 가지고 있는 클래스를 추상 클래스라고 한다.
Example)
abstract class Animal {
String name;
abstract void cry();
void move() {
.
.
.
}
}
여기서 Animal 클래스는 추상 메서드인 cry()가 존재하기 때문에 추상 클래스가 된다.
추상 클래스를 상속받는 클래스는 추상 메서드를 반드시 오버라이딩(재정의)해서 구현해야 한다.
Example)
abstract class Animal {
int age;
abstract void cry();
}
class Dog extends Animal {
@Override
void cry() {
System.out.println("멍멍");
}
}
class Cat extends Animal {
@Override
void cry() {
System.out.println("야옹");
}
}
Dog와 Cat 클래스는 추상 클래스인 Animal을 상속받기 때문에 반드시 Animal의 추상 메서드인 cry()를 오버라이딩해서 구현해야 한다.
추상 클래스는 new 키워드로 실체화할 수 없다.
Example)
Animal animal = new Animal();
→ Animal은 추상 클래스이므로 new 키워드로 실체화가 불가능하다.
인터페이스
인터페이스를 구현하기 위해서는 implements 키워드를 사용한다.
정의와 추상 메서드만이 인터페이스의 멤버가 될 수 있다.
인터페이스의 추상 메서드는 public 키워드가 붙는다.
어떤 패키지에서 인터페이스가 구현되어 사용될지 모르기 때문이다.
Example)
interface A {
public static final int a = 2;
public abstract void say();
}
class B implements A {
public void say() {
System.out.println("Hello");
}
}
다음과 같이 수식자를 생략할 수도 있다.
interface A {
int a = 2;
void say();
}
A 인터페이스에서 int a = 2는 public static int a = 2와 같고,
void say()는 public abstract void say()와 같다. 수식자가 생략된 것이다.
댓글을 작성해보세요.