본문 바로가기

개발

(15)
[실험실-1] Delegate를 여러 번 정의하면 어떻게 될까? 뭐 대충 이런 코드가 있다고 가정해보자 class TestViewController: UIViewController, UITextFieldDelegate { let textfield = TestTextField() override func viewDidLoad() { super.viewDidLoad() textfield.delegate = self view.addSubview(textfield) textfield.backgroundColor = .blue textfield.snp.makeConstraints { $0.top.equalToSuperview().offset(100) $0.leading.equalToSuperview().offset(20) $0.trailing.equalToSuperview()..
Clean Architecture + MVVM(ReactorKit) - 1 그 동안 길다면 길고 짧다면 짧은 시간동안 조금 더 유연한 소프트웨어를 만들기 위해 여러가지 구조들을 경험하게 되었습니다. MVC -> MVVM -> MVVM-C?(내마음대로 Coordinator) -> ReactorKit 구조를 변경하면서 UI의 변경에 대하여 유지보수가 수월해지는 느낌은 있었으나 아직 비지니스 로직 부분에서의 변경과 확장성에 있어서 많은 불편함이 있는 것 같아 Clean Architecture를 공부하고 적용해 보기로 마음을 먹었어요. :) 클린 아키텍처란? 클린 아키텍처는 로버트.C.마틴(aka.밥 아저씨)가 2012년 8월에 블로그에 클린 아키텍처라는 제목으로 글을 기재하면서 알려지게 되었는데요 로버트 마틴에 대하여 설명하자면 우리가 알고 있는 수많은 개발 방법론들을 창시한 분이라..
[Swift] 클로저와 함수 그리고 값 캡쳐(Closures, functions and value capture) Swift에서 함수는 값을 어떠한 방식으로 전달을 하며 클로저는 어떠한 방식으로 값을 캡처하는지에 대하여 실험을 해 보고 알아보자 환경: XCode 12.3(Swift 5.3) [실험] Closure 실험 1. (String 전달) var name = "Lee" let closure = { [name] in print("closure: \(name)") } name = "Jang" let doing = closure doing() // 어떤 것이 출력 될까요? // 1. Lee // 2. Jang // 3. Compiler Error 실험 2. (Class 전달) class Person { var name: String? } let person = Person() person.name = "Lee" le..
[Django] ASGI란? ASGI(Asynchronous Server Gateway Interface) 그대로 읽어 보면 비동기 서버 게이트웨이 인터페이스인데 이게 무엇인고 하니 web server와 프레임워크(Django), 어플리케이션을 비동기로 연결해 주는 Python의 표준 인터페이스라고 보면 된다. 여러 프로토콜 스타일을 처리 할 수 있다(HTTP, HTTP/2, WebSocket 포함)
[Django] 장고 시작시 생성되는 파일들 django-admin startproject project 를 하게 되면 project를 django 프로젝트를 생성하게 된다 project/#1 manage.py#2 project/#3 __init__.py#4 settings.py#5 urls.py#6 asgi.py#7 wsgi.py#8 #1 루트 디렉터리이며 프로젝트의 컨테이너 입니다. #2 프로젝트와 다양한 방법으로 상호작용하는 커맨드라인의 유틸 #3 이 디렉터리 내부에는 프로젝트를 위한 실제 Python 패키지들이 저장 된다. 이 디렉터리 내의 이름을 이용하여,(project.urls와 같은 식으로) 프로젝트의 어디서나 Python 패키지들을 import할 수 있다. #4 Python으로 하여금 해당 디렉터리를 패키지처럼 다루라고 알려주는 용도..
[Python] 리스트(list)와 튜플(tuple) 활용 리스트에 요소 추가 append: 요소 하나를 추가 extend: 리스트를 연결하여 확장 insert: 특정 인덱스에 요소 추가 append(element)는 리스트의 끝에 요소 하나를 추가한다. >>> a = [10, 20, 30] >>> a.append(500) >>> a [10, 20, 30, 500] >>> len(a) 4 extend(list)는 리스트 끝에 다른 리스트를 연결하여 리스트를 확장 >>> a = [1,2,3] >>> a.extend(4) ##리스트가 아닌 요소를 넣으면 error를 반환한다. Traceback (most recent call last): File "", line 1, in TypeError: 'int' object is not iterable >>> a.extend..
[Python] 파이썬 함수 그리고 람다 함수 1. 파이썬에서 함수의 기본 사용법 def print_hello_world(): print("hello world") def plus(a, b): return a + b print_hello_world() >>> hello world a = plus(5, 4) a >>> 9 2. 파이썬에서 합수는 객체이다. (일급객체란?) 따하서 함수를 호출 할 때 함수를 넘길 수 있다. >>> def add(a,b): ... return a + b ... >>> def calculate(func, arg1, arg2): ... print('calulation: ', func.__name__) ... print('result: ', func(arg1,arg2)) ... >>> calculate(add, 4, 6) #ad..
[Git] 원격 저장소에 push 된 파일 ignore 추가 원격 저장소에 이미 올라가 있는 파일을 git ignore에 추가하고 싶은 경우 그냥 ignore에 추가시키면 추가가 되지 않는데 아래의 명령을 실행 해 주면 깃의 캐시를 다 날린 다음 다시 add를 시켜줘서 원활하게 진행이 된다 $ git rm -r --cached . $ git add . $ git commit -m "Chore .gitignore" $ git push