Q.
- 클래스의 구성요소, 인터페이스의 구성요소가 무엇이 있는지 개념을 정리하세요.
- 메소드 및 생성자의 오버로딩, 상속과 오버라이딩이 무엇인지 개념을 정리하세요.
- OOP(Object Oriented Programming : 객체지향 프로그래밍)의 4대 요소의 개념을 정리하세요.
A.
1.
클래스의 구성요소
자바에서의 클래스란 객체를 만들기 위한 일종의 도구로 객체의 속성(state)와 행동(behavior)이 표현된 객체에 대한 일종의 설계도이다. 클래스의 구성요소는 속성 값을 표현하는 인스턴스 변수(Memeber Field), 행동 값을 표현하는 메소드(Member Method), 객체의 초기화를 담당하는 생성자(Constructor) 그리고 클래스의 내부에 존재할 수 있는 내부 클래스(Inner Class)가 있다.
- 멤버 필드(Member Field) : 한 클래스 내부에 존재하고 메소드 밖에 존재하는 변수를 가리켜 멤버필드라 칭하며 이는 각각 클래스 변수(Static variable)과 인스턴스 변수(Instance variable)로 나뉜다. 클래스 변수는 모든 인스턴스가 공유하는 변수이며 클래스 혹은 특정 인스턴스에서 클래스 변수의 값을 변화시키면 해당 클래스를 객체화 한 모든 인스턴스의 값도 변화한다.
- 멤버 메소드(Member Method) : 메소드는 입력을 받아 어떤 일을 처리한 후 결과를 반환하는 일종의 함수로 크게 반환 자료형이 있는지, 매개변수를 가지는지에 따라 세분화하여 구분할 수 있다. 반환 자료형이 있는 경우는 해당 자료형을 기술하고 없는 경우에는 void를 써 표기한다.
- 생성자(Constructor) : 생성자는 클래스가 인스턴스를 생성할 때 인스턴스의 값을 초기화하는 역할을 수행한다. 문법적으로는 메소드와 유사한 형태를 띄고 있지만 일반적인 메소드와는 달리 반환 자료형을 명시하지 않는다는 특징을 가지고 있다. 생성자의 이름은 반드시 해당 클래스의 이름과 일치하여야 한다.
인터페이스의 구성요소
인터페이스는 추상클래스를 보다 추상화한 개념으로 자바 버전 7까지는 상수와 추상 메소드만을 가질 수 있었으나 자바 버전 8에서 인터페이스에 default 메소드를 추가해 사용할 수 있게 되었다. 인터페이스의 default 메소드가 가지는 default 값은 접근제어를 뜻하는 default가 아니라 해당 메소드가 추상메소드가 아님을 기술하는 표현이라는 부분을 유의해야 한다. 인터페이스는 인스턴스를 생성할 수 없기 때문에 객체화 할 수 없다는 특징을 가지고 있다.
- 상수(Constant) : 인터페이스의 멤버 필드는 사용자가 명시를 하던 그렇지 않던 언제나 public static final의 값을 지닌다. 즉, 사용자가 해당 값을 코드상에 명시하지 않더라도 반드시 언제나 상수의 값을 지닌다.
- 추상 메소드(Abstract Method) : 인터페이스의 멤버 메소드는 사용자가 명시를 하던 그렇지 않던 언제나 public abstract의 값을 가진다. 사용자가 코드상에 default를 명시하여 메소드가 추상메소드가 아님을 명시하지 않는 이상 인터페이스에서의 모든 메소드는 추상메소드이다.
- default 메소드 : default 메소드는 자바 버전 8에서 추가된 기능으로, 이 기능을 통해 인터페이스에서도 추상 메소드가 아닌 메소드를 구현할 수 있게 되었다.
2.
메소드와 생성자의 오버로딩
오버로딩은 같은 이름의 메소드 혹은 생성자를 한 개의 클래스에서 두 개 이상 사용하는 것을 말한다. 단, 형태가 완전히 같아서는 안되고 매개변수에서 차이가 있어야만 한다. 따라서 오버로딩을 할 수 있는 조건은 첫 번째, 메소드의 이름이 같아야 한다는 것. 두 번째, 매개변수의 수 혹은 자료형이 달라야 한다는 것, 이 두 가지이다.
자바는 클래스의 메소드와 생성자의 오버로딩을 허용하며, 이는 특정 코드를 조금 더 효율적으로 작성할 수 있도록 도와준다. 예를들어 생성자의 오버로딩이 허용되는 경우, 이를 객체화할 때 인스턴스를 보다 유연하게 설계할 수 있게 되는데 오버로딩이 허용되지 않는 상황에서는 같은 효과를 내기 위해 우회적으로 코드를 작성해야 하는 것과 달리 훨씬 간결하게 해당 기능을 구현할 수 있게 된다.
상속
상속은 객체 지향의 특징을 지니는 언어가 가지는 특장점 중 하나로 한 개의 클래스가 가지는 특징을 다른 클래스에 적용하여 사용할 수 있는 기능을 말한다. extends로 표현되는 상속은 표현 그대로 부모가 자식에게 유산을 상속하듯 상속을 주는 부모 클래스(Super Class)의 특징을 자식 클래스(Sub Class)가 그대로 사용할 수 있도록 허용하는 기능이다.
상속은 특정 기능이 반복되어 등장하지만 그러한 기능들이 완전히 동일한 형태가 아닐 때 사용하기 유용한데, 가장 보편적인(혹은 기본적인) 특징을 지니는 클래스를 부모 클래스로 두어 자식 클래스들이 해당 부모 클래스가 가지는 기능들을 공유하면서도 약간의 변형을 두어 코드를 보다 유연하게 짤 수 있도록 도와준다. 만약 유지보수적인 면에서 문제가 생겨 반복되는 기능을 수정해야 하는 상황이 발생하면, 부모 클래스와 자식 클래스가 연결되어 있다는 점에 중점을 두어 코드를 효율적으로 수정할 수 있다.
추상클래스와 인터페이스는 상속을 위해 존재하는 기능들이다.
오버라이딩
오버라이딩이란 부모 클래스에서 상속받은 특정 메소드를 자식 클래스에서 재정의 해 사용하는 것을 의미한다. 상대적으로 오버로딩과 비슷한 형태의 개념이기 때문에 헷갈리기 쉬운데, 오버로딩은 한 클래스 내에서 일어나는 메소드 및 생성자의 재정의, 오버라이딩은 부모와 자식 클래스 사이에서 일어나는 메소드의 재정의라고 생각하면 이해하기 쉽다.
오버라이딩은 앞서 설명한 상속 기능과 맞물려 부모 클래스와의 형태적인 공통점을 유지하면서 자식 클래스만의 개성을 표현할 수 있는 기능이지만 말 그대로 부모 클래스의 메소드를 재정의하여 '덮어 쓰는' 기능이기 때문에 코드를 설계할 때 유지보수적인 부분을 염두하여 하는 것이 좋다. 강력한 기능인 만큼 조금은 섬세한 접근이 필요해 보이는 부분이다.
추상클래스와 인터페이스를 부모로 두고 있는 클래스의 경우, 추상클래스와 인터페이스에 추상 메소드가 있다면 자식 클래스는 해당 메소드를 반드시 오버라이딩 해야 한다. 이러한 기능은 특정 프로젝트를 분업해서 수행할 때, 특정 기능을 반드시 구현하도록 강제할 수 있는 장치로 작동할 수 있다. (분업시 안정성을 높일수 있는 방법)
3.
OOP의 4대 요소
객체 지향의 특징을 가진 언어는 다음과 같은 특징을 가지며 이러한 특징을 보통 객체 지향의 4대 요소라고 일컫는다.
- 추상화(Abstraction)
- 캡슐화(Encapsulation)
- 상속성(Inheritance)
- 다형성(Polymorphism)
추상화
추상화란 복잡하고 구체적인 현실을 코드상에 필요한 정보들로 간략화할 수 있는 능력을 의미한다. 가령 사람이라는 대상에 대해 객체 지향 언어는 사람을 대표할 수 있는 특징들을 속성(state)와 행동(behavior)의 형태로 간략화하여 표현할 수 있다. 예를 들어 사람을 표현할 수 있는 속성은 '이름', '나이', '직업', '성별' 등이 될 수 있고, 행동은 '밥을 먹는다(eatMeal)', '열심히 일을 한다(workHard)', '술을 마신다(drinkAlcoholicDrink)' 등이 될 수 있다. 실제로는 매우 복잡하고 구체적인 대상을 추상화하고 간략화하여 표현한 것이다.
캡슐화
캡슐화란 클래스 내부에서 혹은 메소드 내부에서 특정 대상의 속성 혹은 행동을 보안 등의 이유로 감출 수 있는 능력을 의미한다. 클래스에서 멤버 필드를 private화 하여 외부에서 접근하지 못하도록 하는 것이 대표적인 케이스로 이는 외부에서 해당 클래스의 필드를 직접적으로 제어하지 못하도록 하기 위함이다. Setter 메소드와 Getter 메소드가 이 개념과 관련이 깊다.
상속성
상속성은 앞서 살펴본 상속과 관련이 깊다.
다형성
다형성은 한 개의 형태가 두 개 이상의 많은 기능으로 표현될 수 있는 능력을 의미하며, 앞서 살펴본 오버로딩 및 오버라이딩과 관련이 깊다. 부모 클래스를 자료형으로 갖는 자식 클래스의 인스턴스를 만드는 기능 역시 이 다형성과 관련이 깊은 기능이다.
'국비학원' 카테고리의 다른 글
[중간점검] 자바 국비학원 50% 진행상황 후기 (0) | 2021.12.14 |
---|---|
자바 국비 4주차 과제 (0) | 2021.09.26 |