Reference Fluent Python docs.python.org Stackoverflow Wikipedia Interface 객체지향 프로그래밍에서 인터페이스는 객체가 "X"라는 타입이 되기 위해 꼭 가져야 할 메서드들의 집합이다. 사례를 통해 인터페이스에 대해 알아가 보자 간단하게 Bike를 생각해보자 Bike가 되기 위해 꼭 있어야 할게 무엇인가? 일단 움직이기 위해 바퀴가 있어야 하고 움직일 줄 알아야 하며 멈출 줄도 알아야 한다. 이런 부분들은 정말 Bike에게 필수적인 부분들이다. 만약 저 세개중에 하나라도 없다면 그게 Bike라고 할 수 있을까? 인터페이스의 목적은 위 사례를 보았듯이 만약 "Bike"라는 타입이 있으면 그 타입이 되기 위한 객체들에게 꼭 필요한 속성들을 강제하고 특정 ..
Reference Fluent Python docs.python.org Stackoverflow geeksforgeeks for구문의 동작원리? 이터레이터와 이터러블에 대해 알기 전에 우리에게 너무나도 익숙한 코드 한 줄을 봐보겠다. number = {'one': 1, 'two': 2, 'three': 3} for i in number: print(i) 이런 간단한 반복문 실행 결과는 파이썬을 조금이라도 배운 사람들에겐 누워서 떡먹기다. 예상대로 number 딕셔너리의 키값들이 콘솔에 출력된다. 그런데 호기심이 많은 필자에게 매번 for구문은 마법처럼 느껴졌다. 어떤 값이 출력되는지는 알지만 어떻게 동작하는지는 정확히 알지 못했다. 그냥 for구문 문법대로 쓰면 for구문이 알아서 해당 객체의 값을 반복..
def outer_func(): score_list = [] record = {} def inner_func(sub_name, score): score_list.append(score) record[sub_name] = score average = sum(score_list) / len(score_list) return f'평균점수 = {average}, 기록 = {record}' return inner_func 필자는 클로저 형태의 함수를 처음 마주했을 때 외부 함수가 내부 함수 객체를 그대로 반환하는 부분에 대해 이해가 가질 않았다. 지금 다시 생각해보면 그때 필자는 그냥 냉정하게 객체라는 개념에 대한 이해가 부족하지 않았나 싶다. (사실 지금도 부족하다) 과거로 돌아가서 클로저를 다시 보게 된다면 ..
def tag(name, *content, cls=None, **attrs): """HTML 테그 만들기""" if cls is None: attrs['class'] = cls if attrs: attr_str = ''.join(f' {attr}="{value}"' for attr, value in sorted(attrs.items())) else: attr_str = '' if content: return '\n'.join(f'{c}' for c in content) else: return f'' print(tag('h1', 'HelloWorld!', cls='navbar')) >>>HelloWorld! 위 코드는 책에서 본 HTML 코드를 만드는 함수인데 필자는 이 코드를 보고 한 번에 이해하지 못했..