일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- array
- Javscript
- 오버라이딩
- Linux
- JavaScript
- 자바스크립트
- 랜덤넘버
- Hook
- stylesheet
- TypeScript
- 스프링부트
- Android
- 코틀린
- 안드로이드
- 리액트
- 구글맵스
- RecyclerView
- fragment
- GoogleMaps
- React
- 랜덤번호
- TextView
- npm
- button
- nodejs
- Java
- SpringBoot
- scrollview
- JS
- Kotlin
- Today
- Total
타닥타닥 개발자의 일상
클래스 vs 인터페이스 vs 추상 메서드 는 언제 어떻게 사용하는가? 본문
클래스와 인터페이스는 객체지향 프로그래밍에서 다른 역할을 수행하며, 사용하는 상황에 따라 선택된다.
클래스(Class)란?
- 클래스는 객체지향 프로그래밍에서 데이터와 메서드(함수)의 모음.
- 객체의 설계도 혹은 틀로, 객체를 생성하기 위한 모든 특징과 행위를 정의.
- 클래스는 구체적인 객체를 생성하기 위한 템플릿이며, 객체의 상태(속성)와 동작(메서드)을 정의.
class Car:
def __init__(self, make, model):
self.make = make
self.model = model
def start_engine(self):
print("Engine started")
추상 클래스란?
-추상 클래스는 일부 메서드의 구현을 하지 않은 추상 메서드를 포함할 수 있는 클래스.
-추상 메서드는 하위 클래스에서 반드시 구현.
-직접 객체를 생성할 수 없으며, 상속을 통해 하위 클래스에서 추상 메서드를 구현한 후에 해당 하위 클래스의 객체 생성 가
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
pass
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius * self.radius
인터페이스(Interface)란?
- 인터페이스는 일종의 추상 클래스로, 모든 메서드가 추상 메서드인 특별한 형태의 클래스.
- 인터페이스는 객체의 동작 방식을 정의하지만, 실제 동작 내용은 제공하지 않는다.
- 여러 클래스가 동일한 동작 방식을 가져야 하는 경우 인터페이스를 사용하여 일관성을 유지한다.
- Java와 같은 언어에서는 인터페이스를 사용하여 다중 상속을 지원.
from abc import ABC, abstractmethod
class Flyable(ABC):
@abstractmethod
def fly(self):
pass
class Bird(Flyable):
def fly(self):
print("Bird is flying")
추상 메서드(Abstract Method)란?
- 추상 메서드는 메서드의 선언만 있고 구현이 없는 메서드.
- 추상 메서드는 해당 메서드를 가지는 클래스가 반드시 구현해한다.
- 추상 메서드는 일반적으로 추상 클래스나 인터페이스에서 정의.
- 추상 메서드를 포함하는 클래스는 반드시 추상 클래스로 선언.
클래스는 객체의 구체적인 모습을 정의.
인터페이스는 객체의 동작 방식을 정의.
추상 메서드는 구현이 없는 메서드를 의미.
이들을 적절히 조합하여 객체지향 프로그래밍에서 유연하고 확장 가능한 구조를 설계한다.
클래스(Class)의 특징
1.구현 가능한 메서드 포함
- 클래스는 데이터와 그 데이터를 처리하는 메서드(동작)를 함께 포함
- 클래스는 구체적인 객체의 속성과 행동을 정의하며, 객체를 생성하는 데 사용.
2. 단일 상속
- 대부분의 언어에서 클래스는 단일 상속만을 지원. 즉, 한 클래스는 하나의 클래스만을 직접적으로 상속 받는다.
3.인스턴스 생성 가능
- 클래스는 객체를 생성하여 해당 객체의 인스턴스를 만들 수 있다.
4.일반 메서드와 속성을 가진다.
- 클래스는 일반 메서드와 속성을 가질 수 있어, 객체의 특정 동작 이외의 일반적인 기능도 포함 가능하다.
인터페이스(Interface)의 특징
1.추상 메서드만 포함
- 인터페이스는 모든 메서드가 추상 메서드로 이루어져 있다. 즉, 메서드의 선언만 있고 구현은 없다.
2. 다중 상속
- 인터페이스는 다중 상속을 지원하므로, 여러 인터페이스를 동시에 구현할 수 있습니다.
3.인스턴스 생성 불가
- 인터페이스는 객체를 직접적으로 생성할 수 없으며, 해당 인터페이스를 구현하는 클래스에서 구현해야 한다.
4.구현 강제:
- 클래스가 인터페이스를 구현한다면, 해당 클래스는 인터페이스에서 정의한 모든 메서드를 반드시 구현해야 한다.
추상 클래스의(Abstract class) 특징
1.추상 메서드 포함
- 하나 이상의 추상 메서드를 포함. 추상 메서드는 본체(구현)가 없고 선언 존재.
- 하위 클래스에서는 추상 메서드를 반드시 구현.
2. 인스턴스 생성 불가:
- 추상 클래스로 직접 객체(인스턴스)를 생성 불가. 주로 상속을 통해 하위 클래스에서 구현을 강제화하는 용도로 사용.
3. 일반 메서드 포함:
- 추상 클래스는 추상 메서드뿐만 아니라 일반 메서드도 포함.
4.다중 상속 가능:
- 추상 클래스는 다른 클래스와 마찬가지로 다중 상속이 가능. 여러 추상 클래스를 상속하여 하나의 클래스에서 여러 기능을 동시에 활용.
클래스와 인스턴스는 언제 사용하는가
*클래스 사용 시
- 구체적인 객체를 표현하고자 할 때.
- 단일 상속만 필요한 경우.
- 객체의 상태와 동작을 함께 다룰 필요가 있는 경우.
*인터페이스 사용 시
- 다중 상속이 필요한 경우.
- 여러 클래스 간에 공통적인 동작을 정의하고 싶을 때.
- 클래스 간의 결합도를 낮추고 유연성을 높이고자 할 때.
- 특정 동작을 보장하고 강제하고자 할 때.
*추상 클래스 사용 시
-객체들 간의 공통된 특성과 동작이 필요할 때
-하위 클래스에서 특정 메서드의 구현을 강제화할 때
-코드의 일관성과 유지보수성을 높일 때
-다중 상속을 활용할 때
'코딩 기록 > 유용한 IT 팁' 카테고리의 다른 글
REST vs RESTFUL 는 무엇인가? 둘의 미묘한 차이점 (0) | 2024.03.03 |
---|---|
오버라이드 VS 오버로드의 차이점 알아보기 (0) | 2024.03.03 |
깃허브에서 간단하게 프론트 페이지 배포하는 방법 (0) | 2023.04.18 |
upsplash API를 Chat GPT에 적용하고 이미지 바로 Chat GPT 통해서 받기 (0) | 2023.04.18 |