Home

[OOP] 객체지향 사고 프로세스 Chapter_3. 그 밖의 객체지향 개념들

객체지향 사고 프로세스

객체지향 사고 프로세스

맷 와이스펠드 지음 / 박진수 옮김

JPUB

목차

그 밖의 객체지향 개념들

객체지향 설계를 잘하려면 다음과 같은 개념들에 대해 충분한 이해가 필요하다.

  1. 생성자(constructor)
  2. 연산자 오버로딩(overloading, 연산자 중복 정의)
  3. 다중 상속
  4. 오류 처리 기술
  5. 범위(scope)

생성자(constructor)

생성자란 클래스의 이름과 같은 이름을 지닌 메서드를 의미한다. New 라는 키워드로 이를 인스턴스 할 수 있는데, 이를 인스턴스화 되었다라고 말할 수 있다.

객체를 사용하기 위해서는 가장 먼저 해야 할 일은 생성자를 호출 하는 것이다.

Computer myCom = new Computer();
Computer mYCom2 = new Computer('test')

new 키워드를 통해서 Computer 클래스의 새 인스턴스를 만들고, 이에 필요한 메모리를 할당한다. 만약 매개변수가 필요하다면 이를 넘겨서 개발자가 원하는 객체로 초기화 할 수 있다.

기본 생성자

클래스에 명시적으로 생성자를 두지 않아도 기본 생성자(default constructor)가 제공된다. 생성자를 직접 작성하든 작성하지 않든 클래스는 기본적으로 생성자가 항상 한 개 이상이 있어야 한다. 하지만 만약 개발자가 생성자를 하나만 넣더라도 기본 생성자는 제공되지 않는다.

무조건 생성자를 직접 작성하는게 좋은 습관이다.

다중 생성자

객체를 생성하는 방법이 여러가지가 존재할 수 있는데, 이럴 경우에는 생성자를 메서드 오버로딩을 통해서 제공할 수 있다.

public class Computer {
    String name;
    
    public Computer() {
        this.name = "default";
    }
    
    public Computer(String name) {
        this.name = name;
    }
}

Java의 경우 메서드의 시그니처(메서드 이름, 매개변수 목록등)가 다르면 오버로딩을 통해 동일 메서드의 이름을 계속해서 사용 할 수 있다.

슈퍼클래스가 생성되는 방법

상속을 사용할 경우 부모 클래스가 어떻게 구성되어 있는지를 알 수 있어야 하며 상속은 부모 클래스의 모든 것을 상속한다는 것을 잊지 말자.

슈퍼 클래스는 일반적으로 다음 순서로 생성된다.

  1. 자식 클래스가 new 키워드 인스턴스화 한다.
  2. 자식 클래스의 생성자 안에서 부모 클래스의 생성자가 호출된다. 이때 슈퍼클래스의 생성자를 명시적으로 호출하지 않으면, 기본 생성자가 호출된다.
  3. 슈퍼 클래스의 속성이 초기화 된다.
  4. 슈퍼 클래스가 초기화가 종료되면 자식 클래스 생성자의 나머지 코드를 호출한다.

오류 처리

일반적으로 오류를 처리하는 방법은 3가지가 있다.

  1. 오류를 바로 수정하기
  2. 오류를 무시하기
  3. 런타임 중에 오류를 처리하기

일단 어떤 방식이든 오류는 절대로 무시해서는 안된다. 처리되야 하는 것이며 오류를 대비하여 클래스를 설계해야 한다.

예외 처리

try ~ catch 블록을 이용해서 특정 예외를 처리 할 수 있다. 이와 같은 코드 블록을 사용하면 어디서 어떤 문제가 생겼는지를 알 수 있으므로, 문제 발생 지점과 문제 유형에 알맞게 문제를 풀어낸 코드를 작성 할 수 있다.

static

변수나 메소드를 static으로 선언하면 클래스에서 인스턴스화된 모든 객체에 대해 단일한 메모리가 할당 된다. 이 경우 클래스의 모든 객체는 동일한 메모리 위치를 가리키기 때문에 같은 값을 사용하며, 수정되면 전체 클래스에서 수정되는 것이다.

static은 절대 사용하면 안된다. 이는 OOP에 반하는 개념이다. 해당 개념은 엘레강트 오브젝트를 정리하면서 다시 말하겠다.

연산자 오버로딩

일부 언어에서는 연산자를 오버로딩할 수 있다. 하지만 JAVA에서는 허용하지 않는 개념이고 이는 유지보수를 힘들게 한다. 그냥 이런게 있다라고만 생각하자.

다중 상속

일부 언어에서는 상속을 여러 부모로부터 받을 수 있게 한다. 하지만 JAVA에서는 허용하지 않는 개념이고 다중 상속은 유지보수를 힘들게하고 시스템의 복잡성을 높인다. 되도록 사용을 지양해야 하는 개념이다. 그냥 이런게 있다라고만 생각하자.

객체 연산

객체를 복사나 비교할때 주의해야 한다라는 것을 이야기 하고 있다. deep copy를 이해하면 된다. (따로 정리는 필요하지 않을 것 같아 하지 않았다.)


위 정리글은 객체지향 사고 프로세스에서 인용한 것입니다.

[ISBN 979-11-90665-21-6]

Loading script...