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()와 같다. 수식자가 생략된 것이다.

댓글을 작성해보세요.

채널톡 아이콘