0519 개발일지

Yesol Lee·2022년 5월 19일
0

개발일지 - 2022

목록 보기
58/187

오늘 한 일

  • 백준 알고리즘 풀고 블로그에 정리 (7개)
  • 인프런 영상강의 일부 (실무 올인원 기본기 클래스)

알고리즘

앞으로 별도 시리즈에 문제 1개당 짧은 글로 정리하려고 한다. 오늘은 7개를 작성했다.

프로그래밍 패러다임

1. 절차지향 (Procedural Programming)

작업들을 함수로 만들어 순서대로 배치, 실행. 데이터와 함수가 분리되어 있음

2. 객체 지향 (Object-Oriented Programming)

관련된 데이터, 함수가 하나의 객체 안에 저정되고 각각의 객체들이 서로 협력해서 일을 수행함. 유연성과 확장성이 높다.

3. 함수형 프로그래밍 (Functional Programming)

외부 상태를 갖지 않는 함수(순수함수)의 연속으로 프로그래밍. 객체 지향에서 객체 외부에서 멤버 변수를 변경함으로 인해 해당 멤버 변수를 이용하는 함수들의 출력값이 달라지는 문제를 해결하기 위한 대안.

  • 순수함수: 외부 상태에 상관없이 같은 입력값을 주었을 때 항상 같은 출력값을 내는 함수로 외부 데이터 사용 시 예측하지 못하는 side effect 발생을 방지하기 위해 사용함

객체지향 개념

속성 (attribute, 멤버 변수)

  • 인스턴스 변수: 인스턴스별로 독립적으로 가지는 값. 주로 __init__등 생성 시 주입
  • 클래스 변수: 클래스 자체에 정의되는 변수.
  • 코딩 처음 배울 때 인스턴스와 클래스의 개념을 잘 이해하지 못해서 변수를 사용할 때도 어려움이 많았었다. 예를 들어 a, b, c라는 스탯을 가진 캐릭터가 4개 있었는데, 각각 다른 스탯을 가지기 위해 4개의 클래스를 만들었었다.
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 구조에 대해 고민을 하고 개발을 시작해야 할 것이다.

인터페이스 (interface)

인터페이스란 객체의 메서드를 정의만 하고 세부 동작은 해당 인터페이스를 상속받는 클래스에서 구현하게 하는 방식이다. 이 부분도 처음 개발할 때 이해하지 못했던 부분 중 하나이고 아직도 그 필요성을 정확히 이해하지 못했었다.

하지만 이번에 다시 예시와 함께 공부해보니 같은 개념으로 묶인 클래스들을 파악하기 쉬울 것 같다는 생각이 들었다.

용어정리

  • silver bullet: 소설에서 늑대인간을 한 방에 죽이는 마법같은 완벽한 수단으로 어떤 문제를 빠르고 정확하게 해결할 수 있는 완벽한 방법을 말한다. 보통 그런 방법은 없다는 말을 하기 위해 쓰인다. (ex. There is no silver bullet that~)
  • Agflation (애그플레이션): 농업을 뜻하는 'agriculture'와 물가상승을 의미하는 'inflation'의 합성어. 농산물의 가격이 오르면서 일반 물가가 상승하는 현상
profile
문서화를 좋아하는 개발자

0개의 댓글