앞으로 별도 시리즈에 문제 1개당 짧은 글로 정리하려고 한다. 오늘은 7개를 작성했다.
작업들을 함수로 만들어 순서대로 배치, 실행. 데이터와 함수가 분리되어 있음
관련된 데이터, 함수가 하나의 객체 안에 저정되고 각각의 객체들이 서로 협력해서 일을 수행함. 유연성과 확장성이 높다.
외부 상태를 갖지 않는 함수(순수함수)의 연속으로 프로그래밍. 객체 지향에서 객체 외부에서 멤버 변수를 변경함으로 인해 해당 멤버 변수를 이용하는 함수들의 출력값이 달라지는 문제를 해결하기 위한 대안.
순수함수
: 외부 상태에 상관없이 같은 입력값을 주었을 때 항상 같은 출력값을 내는 함수로 외부 데이터 사용 시 예측하지 못하는 side effect 발생을 방지하기 위해 사용함인스턴스 변수
: 인스턴스별로 독립적으로 가지는 값. 주로 __init__
등 생성 시 주입클래스 변수
: 클래스 자체에 정의되는 변수.class Father:
a = 10
b = 20
c = 30
class Mother:
a = 20
b = 30
c = 15
사실 이 부분은 Character라는 하나의 class를 만들어 각 인스턴스에 값을 설정해주면 되는 것이었다.
class Character:
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
mother = Character(20, 30, 15)
father = Character(10, 20, 30)
생각을 덜 하고 코딩하기 시작하면 위와 같이 불필요한 class를 많이 만들게 된다. 코드의 중복을 줄이고 간소화하려면 미리 class 구조에 대해 고민을 하고 개발을 시작해야 할 것이다.
인터페이스란 객체의 메서드를 정의만 하고 세부 동작은 해당 인터페이스를 상속받는 클래스에서 구현하게 하는 방식이다. 이 부분도 처음 개발할 때 이해하지 못했던 부분 중 하나이고 아직도 그 필요성을 정확히 이해하지 못했었다.
하지만 이번에 다시 예시와 함께 공부해보니 같은 개념으로 묶인 클래스들을 파악하기 쉬울 것 같다는 생각이 들었다.
silver bullet
: 소설에서 늑대인간을 한 방에 죽이는 마법같은 완벽한 수단으로 어떤 문제를 빠르고 정확하게 해결할 수 있는 완벽한 방법을 말한다. 보통 그런 방법은 없다는 말을 하기 위해 쓰인다. (ex. There is no silver bullet that~)Agflation (애그플레이션)
: 농업을 뜻하는 'agriculture'와 물가상승을 의미하는 'inflation'의 합성어. 농산물의 가격이 오르면서 일반 물가가 상승하는 현상