목차 FastAPI에서의 상속은 주로 SQLAlchemy 모델, Pydantic 모델, 그리고 라우터에 적용된다. 한 줄 한 줄 더듬으며 개발하다 보니, 그리고 파이썬의 상속이 너무 간결하다 보니 그 기능을 오히려 잊게 될 때가 있는데, 또다시 잊어버렸을 나중의 나를 위해서 굳이 글을 분리해서 정리한다. SQLAlchemy 모델의 상속 SQLAlchemy는 ORM 라이브러리로, 디비 테이블을 파이썬 클래스로 표현한다. 이때 'Base'라는 SQLAlchemy의 클래스를 상속받아 사용해야 하는데, 이는 나의 경우 db.py에 다음과 같이 선언되어 있다. Base: DeclarativeMeta = declarative_base() 위와 같이 한 번만 선언하고 모든 모델에서 이 클래스를 상속받아 사용하게 되..
메서드 오버로딩과 오버라이딩은 모두 자바의 다형성을 구현하는 방법이다. 게다가 이름과 구현과정까지 나름 비슷해서 가끔 헷갈릴 때가 있는데, 오늘도 헷갈린 김에 잊지 않으려 정리를 한다. Method Overloading 가장 먼저 짚고 넘어가야 할 오버로딩과 오버라이딩의 근본적인 차이는 두 행위가 구현되는 타이밍이다. 오버로딩의 경우 컴파일 과정에서 구현되며, 오버라이딩은 실행시, 혹은 런타임으로 구현된다. 계속해서 오버로딩은 같은 클래스 안에서 두 개 이상의 같은 이름을 가진 메서드를 정의하는 것을 가리키며, 여기엔 아래와 같은 몇 가지 규칙이 존재한다. 메서드 이름이 같아야 한다. 리턴 타입과 예외처리는 같아도 되고 달라도 된다. 파라미터의 개수가 다르거나, 같다면 타입이 달라야 한다. 즉, 시그니처..
생성자 글에서도 적었지만, 부모 클래스가 기본 생성자를 가지고 있지 않으면 자녀 클래스의 생성자는 반드시 부모의 매개변수가 있는 생성자를 첫 줄에 호출해야 하며, 그렇지 않을 경우 컴파일 오류가 발생한다. 사실 부모가 기본 생성자를 가지고 있는 경우에도 자녀 클래스 생성자에서 호출해주어야 하는 건 같지만 이 경우에는 컴파일러가 알아서 추가해주기 때문에 명시적으로 할 필요가 없을 뿐이다. 왜 이런 귀찮은 작업을 수행해야 하는 걸까? 정답부터 말하자면 상속을 위해선 부모 클래스가 자녀 클래스보다 먼저 존재해야 하기 때문이다. 상속받은 클래스 멤버는 기본적으롤 부모 클래스에 속한 것이므로 부모가 먼저 존재하지 않으면 자녀 클래스에서 호출해 사용하는 것이 불가능하다. 따라서 반드시 자녀 클래스보다 부모 클래스가..
자바에서 생성자는 클래스의 네 가지 구성요소(필드, 메서드, 생성자, 내부 클래스)중 하나이며 메서드와 비슷한 코드 블럭, 혹은 특별한 메서드이다. 위 문장은 메서드를 어떻게 정의하느냐에 따라 달라지는 미묘한 의미를 가졌지만, 어쨌거나 중요한 것은 생성자 역시 메서드, 혹은 그에 준하는 코드 블럭이라는 것이다. 생성자는 매개변수의 유무에 따라 기본 생성자(Default or no-arg Constructor) - 매개변수가 없는 생성자 매개변수가 있는 생성자(Parameterized Constructor) 로 나뉘며 일반적인 메서드와는 다른 생성자만의 특징은 아래와 같은 것들이 있다. 클래스의 멤버(Member)가 아니므로 상속 및 오버 라이딩의 대상이 되지 않는다. 생성자의 이름은 반드시 클래스의 이름..
Object 클래스는 자바의 클래스 상속 계통도에서 최상위에 위치한 클래스이다. 즉, 자바의 모든 클래스는 Object클래스로부터 확장된다. 자바 컴파일러는 컴파일링 과정에서 아무런 상속을 받지 않는 클래스에 자동으로 extends Object를 추가하여 Object 클래스를 상속받도록 한다. class ParentEx { // 컴파일러가 "extends Object" 자동 추가 } class ChildEx extends ParentEx { } ChildEx는 ParentEx를 상속받고 있지만, ParentEx는 아무것도 상속받고 있지 않으므로 컴파일러가 extends Object를 자동으로 추가해 준다. 바꿔 말하면, 모든 클래스는 Object 클래스의 멤버들을 자동으로 상속받아 사용할 수 있다는 뜻이..
상속 상속은 객체지향 프로그래밍의 핵심개념 중 하나다. 꼭 자바뿐 아니라, 객체지향 프로그래밍 설계를 지원하는 모든 언어에 적용되는 개념이라고 할 수도 있다. 자바 언어에서 상속이란 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 문법요소이다. 두 개의 클래스를 상, 하위 클래스로 나누어 상위 클래스의 멤버(필드, 메서드, 내부 클래스)를 하위 클래스와 공유하는 것을 의미하기도 한다. 이 경우 두 개의 클래스를 상속관계에 있다고 하며, 하위 클래스는 상위 클래스의 모든 멤버를 상속받게 된다. 따라서 하위 클래스의 멤버 개수는 언제나 상위 클래스의 멤버 개수보다 같거나 많다. 또한 "~클래스로부터 상속받았다"는 표현보다는 "~클래스로부터 확장되었다"가 더 정확한 표현이며, 두 클래스 간 상속 관계를 설..
- Total
- Today
- Yesterday
- a6000
- spring
- 세계여행
- RX100M5
- 스트림
- Python
- 유럽여행
- 자바
- 세계일주
- 알고리즘
- 남미
- 야경
- BOJ
- 기술면접
- 파이썬
- 백준
- Algorithm
- 면접 준비
- java
- 리스트
- 맛집
- Backjoon
- 지지
- 동적계획법
- 칼이사
- 세모
- 중남미
- 스프링
- 여행
- 유럽
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |