객체지향의 사실과 오해
·
도서관
네이버 부캠을 하고 있는데 만나는 사람마다 책을 추천해달라고 요청을 해왔습니다. 많은 책을 추천받았기에 한권씩 읽으며 다양한 사람과 공유해보고자 새롭게 카테고리를 만들고 글을 시작해봅니다. 첫번재 책은 객체지향의 사실과 오해라는 토끼책이에요 🐰🐰🐰 자 시작해보겠습니ㅏ~@#!객체 = 실세계(?)?>"객체지향이란 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법이다."객체지향을 대학교 수업에서 배울 때 아마 자동차나 동물 상속 예제들은 한번쯤 봤을겁니다.책을 읽어보면 객체 ≠ 실생활이라는데 왜 자꾸 비유해왔을까 생각해봤었습니다.답은 간단해요. 학습에 너무나 효과적이거든요!하지만 정확한 객체지향에 대해서 책에서는"객체지향 설계는 현실을 모방하는 것이 아니라, ..
파일 시스템
·
CS
외부에서 전송된 파일을 내 컴퓨터에 안전하게 저장하고 찾기 위해서는 파일 시스템이 필요합니다.만약 파일 시스템이 없다면 어떻게 될까요? 해당 답은 이 글을 전부 다 읽고 나면 정리가 될 것입니다.기본 개념들파일(📁): 관련된 데이터들을 하나의 단위로 묶어서 저장한 것.크게 2가지로 나뉩니다1. 텍스트 파일 사람이 읽을 수 있는 문자로 구성된 파일로서 아스키 또는 UTF-8등의 문자 인코딩을 사용합니다. 우리가 자주 사용하는 메모장 혹은 vim 명령어로 직접 편집이 가능합니다.2. 바이너리 파일컴퓨터가 직접 해석하는 이진 데이터로 구성된 파일로 압축률이 높고 처리속도가 빠릅니다. 일반적으로 실행 파일, 이미지, 오디오, 비디오 등 모든 데이터를 의미합니다. 디렉토리(🗂️): 파일들을 논리적으로 그룹화한..
Process Management와 System Call(커널 헷갈리는 개념 정리)
·
CS
1. 시스템 콜의 깊은 이해swift에서는 출력을 원할 때 print메서드를 사용합니다. 제가 만든 건 아니고 Swift 라이브러리에 구현된 함수입니다.print는 I/O메서드입니다. (원하는 값을 출력해주기에)그런데 유저모드에서는 직접 I/O가 불가능 합니다. 그렇기 때문에 내부의 시스템 콜을 거쳐 커널에게 "화면에 출력해줘!!"라고 요청을 해야합니다.1.1 시스템 콜 래퍼 루틴내부에는 write() 라는 시스템 콜 래퍼가 숨어있습니다mov eax, 4 ; write 시스템 콜 번호mov ebx, 1 ; stdoutmov ecx, msg ; 출력할 문자열mov edx, len ; 문자열 길이int 0x80 ; 시스템 콜 호출!위는 예시의 어셈블..
커맨드 패턴
·
디자인패턴
🎯 커맨드 패턴이란 무엇일까??요청을 객체의 형태로 캡슐화하여 매개변수화하는 행동 디자인 패턴수행할 동작을 객체 안에 캡슐화해 요청자(호출자)와 수신자(실행자) 사이를 분리합니다.어떤 작업 => 객체가 되는거고 필요에 따라 객체에게 전달.📺 리모콘 예시로 이해하기버튼 → 누르기 → 명령 → TV (On/Off)버튼은 TV에 대해 아무것도 모름 (삼성TV인지, LG TV인지)연결된 명령을 통해 TV를 제어요청자와 수신자가 완전히 분리🔧 해결하는 문제들1. 코드 결합도 감소요청자와 수신자 간의 직접 연결 제거2. 작업의 지연 및 예약 실행명령을 즉시 실행하지 않고 저장했다가 나중에 실행3. 작업 취소 기능이전 상태를 저장하여 실행 취소 기능을 쉽게 구현4. 작업 로깅모든 변경사항을 추적하고 필요시 재실..
데코레이터패턴
·
디자인패턴
데코레이터 패턴이 뭔가요?간단히 말하면 기존 객체를 수정하지 않고 새로운 기능을 추가하는 방법입니다.스타벅스에서 커피를 주문한다고 생각해보세요. 기본 아메리카노에 샷 추가, 휘핑크림 추가, 시럽 추가... 이런 식으로 원하는 옵션을 계속 덧붙일 수 있죠. 데코레이터 패턴이 바로 이런 개념입니다.왜 좋은가요?상속의 한계를 극복할 수 있어요. 상속으로 모든 조합을 만들려면 클래스가 엄청 많아집니다:라떼 클래스휘핑라떼 클래스바닐라휘핑라떼 클래스샷추가바닐라휘핑라떄 클래스...이건 너무 비효율적이죠. 데코레이터 패턴을 쓰면 런타임에 필요한 기능만 조합할 수 있습니다핵심 특징:기존 객체를 수정하지 않고 새로운 기능 추가런타임에 동적으로 데코레이션 적용/제거여러 데코레이터를 체인 형태로 연결 가능단일 책임 원칙(SR..
RxSwift(9) - Scheduler
·
반응형프로그래밍
🧐Scheduelr?Swift에서 멀티스레딩은 주로 GCD를 통해 처리합니다. 반면 RxSwift에서는 Scheduelr라는 추상화된 개념을 사용합니다.하지만 scheduler != threadScheduler와 쓰레드 관계하나의 쓰레드에 여러개의 스케쥴러가 존재할 수 있고여러개의 쓰레드에 하나의 스케쥴러가 존재할 수 있습니다.Scheduler종류CurrentThreadScheduelrpublic class CurrentThreadScheduler : ImmediateSchedulerType { public static let instance = CurrentThreadScheduler()}: 기본 스케쥴러로, Serial Schduler로 동작합니다. MainSchedulerpublic fina..
RxSwift(8)-에러처리
·
반응형프로그래밍
에러와 Observable 존재Observable에서 에러가 발생하면 해당 시퀀스는 즉시 종료됩니다.// 에러 발생 시 Observable의 동작someObservable .subscribe( onNext: { value in print("값: \(value)") }, onError: { error in print("에러 발생: \(error)") // 이 시점에서 Observable은 종료됨 }, onCompleted: { print("완료") // 에러 발생 시 이 부분은 실행되지 않음 } )실무에서 흔히 발생하는 에러 상황은 뭐가 있을까..
RxSwift(7)-BehaviorRelay
·
반응형프로그래밍
BehaviorSubjecthttps://codeisfuture.tistory.com/125 RxSwift(2)-Subject1. Subject란?RxSwift에서 Subject는 Observable과 Observer의 특성을 모두 갖춘 하이브리드 요소입니다. Observable처럼 값을 방출할 수 있으며, 동시에 Observer처럼 다른 Observable을 구독할 수도 있습니다.흠...codeisfuture.tistory.com를 기억하시는가??? 아주 초반에 공부했던것이다. combine의 CurrentValueSubject와 비슷한 것으로 초기값을 가지고 구독시 최신 값을 즉시 수신하고 onNext, onError, onCompleted호출이 가능했다. BehaviorRelayBehaviorRel..