- 컴프리헨션 (리스트, 딕트, 세트)
파이썬 중급 가이드: 객체지향 프로그래밍 심화
파이썬을 한 단계 더 깊게 이해하기 위해서는 객체지향 프로그래밍(OOP)의 구조와 원리를 체득하는 것이 필수적입니다. 객체지향은 현실 세계의 사물과 개념을 프로그램 코드로 옮기는 강력한 도구이며, 코드의 재사용성과 유지보수성을 획기적으로 향상시킵니다. 중급 단계에서는 클래스와 객체의 기본 개념에서 한 발 더 나아가, 상속, 다형성, 마법 메서드, 클래스/정적 메서드, 추상 클래스와 같은 고급 기능을 다루게 됩니다.
클래스와 객체 다시 보기
클래스는 객체를 위한 설계도이자 틀입니다. 이 틀에는 데이터(속성)와 동작(메서드)이 정의됩니다. 클래스를 바탕으로 실제로 메모리에 만들어지는 실체가 바로 객체, 혹은 인스턴스입니다. 예를 들어, class Dog:
처럼 Dog
라는 설계도를 정의하고, my_dog = Dog()
처럼 구체적 대상을 생성할 수 있습니다. 이 과정에서 객체마다 자신만의 속성과 행동을 가지지만, 동일한 구조와 기능을 공유할 수 있습니다.
상속과 다형성
상속은 기존 클래스를 확장하는 방법입니다. 이미 잘 정의된 클래스를 토대로 새로운 클래스를 만들고, 필요한 부분만 추가 혹은 수정할 수 있습니다. 부모 클래스로부터 속성과 메서드를 물려받으면서도 자식 클래스에서 특정 동작을 덮어쓰거나(오버라이딩) 새롭게 정의할 수 있습니다. 다양한 객체가 같은 메서드 이름으로 서로 다른 동작을 하게 만드는 다형성은 파이썬 코드의 유연성과 확장성을 크게 높입니다.
예를 들어, Animal
이라는 부모 클래스를 만들고, 이를 상속받는 Dog
, Cat
등의 자식 클래스를 만들어 각각의 speak()
메서드가 다르게 동작하도록 구현할 수 있습니다. 이는 복잡한 구조에서도 동일한 인터페이스로 객체를 다룰 수 있게 해줍니다.
마법 메서드(스페셜 메서드)
파이썬의 클래스에는 init, str, add 등 "__"로 감싸인 특별한 이름의 메서드들이 있습니다. 이러한 마법 메서드는 파이썬의 다양한 내장 동작(생성자, 연산자 오버로딩, 문자열 변환 등)을 사용자 정의 객체에 맞춰 유연하게 구현할 수 있게 해줍니다. 예를 들어, __str__
을 정의하면 객체를 print할 때 원하는 문자열이 출력되며, __eq__
를 오버라이딩하면 두 객체의 동등성 비교 방식을 바꿀 수 있습니다.
클래스와 정적 메서드
클래스 메서드는 클래스 자체를 첫 번째 인자로 받아 동작하기 때문에 인스턴스가 아닌, 클래스의 속성을 다루거나 인스턴스 생성과 관련된 처리를 담당할 때 주로 사용합니다. 반면, 정적 메서드는 클래스/인스턴스와 무관하게 동작하는 함수로, 관련 로직을 클래스 내에 깔끔하게 묶을 때 활용합니다. 각각 @classmethod
와 @staticmethod
데코레이터로 정의할 수 있습니다.
추상 클래스와 인터페이스
프로젝트 규모가 커지면 비슷한 동작을 하는 여러 클래스가 등장합니다. 각기 다른 클래스가 공통된 메서드를 반드시 구현하도록 강제하고 싶을 때는 추상 클래스를 도입합니다. 파이썬에서는 abc
모듈을 사용해 추상 클래스를 정의할 수 있으며, 추상 메서드는 반드시 하위 클래스에서 구현해야 합니다. 이를 통해 일관성 있고 견고한 객체 구조를 설계할 수 있습니다.
마치며
객체지향 프로그래밍을 제대로 이해하는 것은 더 크고 복잡한 파이썬 프로젝트를 다룰 때 큰 힘이 됩니다. 각 개념을 직접 구현해보며 자신의 코드에 어떻게 녹여낼 수 있는지 연습해 보세요. 이것이 중급 파이썬 개발자로 나아가는 가장 확실한 길입니다.