SW 공학 및 테스팅(5) - OOC(Object-Oriented Concepts)

Charlie·2026년 3월 25일

SE&Testing

목록 보기
5/8

Object-Oriented Concept

Class Concept

클래스는 캡슐화 되어 구성되며, Interface와 Body로 나눠져있다.

  • Interface
    Interface는 보여지는 영역으로 서비스를 제공하는 다소 추상적인 영역이다.
  • Body
    Body는 Interface와 달리 숨겨져있으며 object의 기능을 구현해둔 요소를 말한다.

이 때, 캡슐화(Encapsulation)는 interface와 body를 구분해서 불필요한 정보를 외부에 노출하지 않는 것을 말한다.

Default Constructor

arguments를 가지지 않는 Constructor를 말한다.

만약에 Class가 Constructor를 가지지 않는다면 시스템은 자동적으로 Default Constructor를 제공한다. C++에서 Class의 다른 Constructor가 존재한다면 자동적으로 만들어주지 않기 때문에, Array를 재정의할 때 에러가 발생한다.

명시적 선언이 필수적인 이유는 만약 개발자가 특정 값을 넣기 위해 파라미터가 있는 Constructor를 만들게 되면, 시스템은 더 이상 Default Constructor를 만들어주지 않는다.

Inheritance Concept

상속은 클래스 간의 관계를 정의할 때, 가장 핵심이 되는 개념이다. 상속은 기존 브모 클래스의 특성을 자식 클래스가 그대로 물려받아 새로운 클래스를 만드는 매커니즘이다.

상속의 가장 큰 목적은 코드의 중복을 피하고 재사용성을 극대화하여 효율적인 코드 관리를 하기 위함입니다.

클래스 중복 관리 및 재사용

부모 클래스는 Base Class, Parents, Super Class 등으로 불리고, 자식 클래스는 Derived Class, Child, Sub class로 불린다.

새로운 클래스는 이미 존재하는 클래스의 모든 정보를 재사용하면서 새로운 정보를 추가하거나 이미 존재하는 정보를 수정할 수 있다.

서브 클래스의 생성

서브 클래스의 객체가 생성될 때, 부모 클래스의 데이터도 함께 초기화 되어야하므로, 생성자에서 부모 클래스의 초기화(super)를 호출하는 과정을 말한다.

절차에 대해서 알아보면, 1) 부모와 자식 클래스 모두에 데이터를 입력한다. 그 다음 2) 생성자를 호출하여 객체를 생성해 부모/자식 클래스를 모두 초기화한다. 또한 자식 클래스의 생성자의 초기화 목록에서 부모 클래스의 생성자를 호출한다.

타입 변환

상속에서 파생되는 아주 중요한 요소인 Polymorphism을 곧 배우게 될텐데, 그 바탕이 되는 규칙으로 부모 클래스가 요구되는 변수 자리에 자식 클래스의 객체가 대신 들어갈 수 있다는 것이다.

말 그대로 자식은 부모 대신 자식 클래스가 적용되는 것은 가능하지만, 부모는 자식 대신 적용될 수 없다는 것이다.

Overriding & Polymorphism

Overriding

오버라이딩은 부모 클래스로부터 상속받은 메서드를 자식 클래스의 목적에 맞게 재정의하는 기법이다. 총 3가지 목적으로 오버라이딩을 진행할 수 있는데, 각각 확장, 적응, 최적화이다.

확장(Extension)

부모 클래스의 기존 행위를 그대로 유지하면서, 자식 클래스만의 추가적인 동작을 덧붙일 때 사용한다.

부모 클래스가 가지는 메서드를 이용하면서 그 메서드에 자식 클래스의 정보를 이용해 추가적인 기능을 확장할 수 있다.

적응(Adaptation)

Sub Class의 행동을 명시적으로 나타내기 위해 Super Class의 행동을 재정의한다. 다시 말하면 부모 클래스의 행위를 자식 클래스의 상황에 맞게 명시적으로 변경해 적용할 때 사용한다.

최적화(Optimization)

특정 자식 클래스에 맞춰 퍼포먼스(계산 속도 등)를 극대화하는 알고리즘으로 대체할 때 사용한다. 성능을 위해 오버라이딩하는 역할이다.

다소 추상적인 개념이라 이해가 안될 수 있지만, 예를 들어 다각형 면적을 구할 때, 삼각형은 공식이 존재할 때, 이를 overriding해서 성능을 향상시킬 수 있다.

동적 바인딩

동적 바인딩은 실행 시점에 변수에 할당된 객체를 파악해 객체에 맞는 함수를 동적으로 실행하는 매커니즘이다. 클래스에 대한 동적 바인딩이 일어나기에, 오버라이딩 된 메소드가 클래스에 맞게 자동으로 선정된다.

정적 바인딩과는 시점이 다른데, 동적 바인딩은 Run Time 시점이지만 정적 바인딩은 Compile Time에 할당된다.

다형성(Polymorphism)

Extend, Implement 관계인 다른 클래스의 객체를 부모 클래스나 인터페이스 형식을 변수에 담을 수 있고, Overriding 된 이름이 같은 메소드가 해당 클래스에 맞게 실행되는 것이다. 즉, 코드는 한 줄이지만 상황에 따라 다양한 형태로 해석되고 동작한다는 뜻이다.

여러 종류의 자식 객체들을 각각의 타입으로 관리하지 않고, 부모 타입의 배열로 하나로 묶어 관리한다.

Abstract Class & Interface

Abstract Class

하나 이상의 추상 메서드를 가진 클래스이다. 이때 추상 메서드란 선언만 하고 구현을 안한 메서드를 말한다.

추상클래스가 존재하는 이유는 다형성 코드를 만들기 위해서이다. 여러 자식 클래스를 하나로 묶어 효율적으로 관리하려면 부모클래스의 배열을 만들어야 한다.

Concrete Class

모든 동작을 구현한 클래스로 객체를 가진다. 실질적으로 Abstract와 완전히 반대되는 개념이다.

인터페이스의 개념

Interface는 포함된 모든 메서드가 구현부가 없는 추상 메서드로 이뤄진 극단적인 추상 클래스를 말한다. 일반적인 변수는 가지지 않는다. Interface는 항상 public, abstract이므로 별도로 public, abstract로 선언할 필요 없다.
업로드중..

Java에서 다중 상속(부모가 여러명인 경우)은 금지하지만, 클래스가 하나의 부모를 상속받으며 여러 인터페이스를 동시에 다중으로 구현하는 것은 허용된다.

둘 이상의 인터페이스를 구현하려면 클래스 선언에서 implements 키워드 뒤에 쉼표로 구분된 인터페이스 이름 목록을 사용한다.
업로드중..

인터페이스 사용

다른 클래스간 Communication 과정에서 사용되고, 오직 추상적 명령으로만 이루어지고 컴포넌트를 연결할 때 사용된다.

업로드중..

Strong Coupling은 Concrete Class를 가르키는 연결을 말하고, Weak Coupling은 Abstract Class나 Interface를 가르키는 연결을 말한다.

profile
찬찬히 써내려가는 개발일지

0개의 댓글