본문 바로가기

도서51

[03] 객체지향의 사실과 오해 - 타입과 추상화 NOTION AI 타입과 추상화는 프로그래밍에서 중요한 개념입니다. 타입은 데이터의 종류를 정의하고 제한하는데 사용됩니다. 추상화는 복잡한 개념이나 데이터를 단순화하고 일반화하는 과정을 의미합니다. 이러한 개념을 이해하면 프로그래밍에서 더 효율적이고 유지보수가 쉬운 코드를 작성할 수 있습니다. 타입은 변수, 상수, 함수 등에 적용됩니다. 각각의 타입은 특정한 속성과 동작을 가지며, 이를 토대로 프로그래밍 언어는 타입 검사와 타입 추론을 수행합니다. 타입은 컴파일 시간에 오류를 방지하고 코드의 안정성을 높이는 역할을 합니다. 추상화는 개념이나 데이터를 단순화하여 복잡성을 줄이는 과정입니다. 이를 통해 코드의 가독성을 높이고 개발자가 코드를 이해하고 관리하기 쉽게 만듭니다. 추상화는 객체 지향 프로그래밍에서.. 2023. 12. 28.
[02] 객체지향의 사실과 오해 - 이상한 나라의 객체 객체지향 패러다임은 지식을 추상화하고 추상화한 지식을 객체 안에 캡슐화함으로써 실세계 문제에 내재된 복잡성을 관리하려고 한다. 객체를 발견하고 창조하는 것은 지식과 행동을 구조화하는 문제다. -레베카 워프스브록(Rebecca Wirfs-Borck)[Wirts-Brock 1990] 객체의 다양한 특성을 효과적으로 설명하기 위해서는 객체는 상태(state), 행동(behavior), 식별자(identity)를 지닌 실체로 보는 것이 가장 효과적이다. 상태 이상한 나라의 엘리스에서 엘리스는 작은 문을 통과하기 위해 특정 행동을 통해서 몸의 키를 늘리거나 줄인다. 부채질을 하면 키가 20cm 작아지고, 차를 마시면 30cm 커지는 등의 상태 변경이 일어난다. 엘리스의 키를 추정하기 위해서는 이러한 행동의 순서를.. 2023. 12. 27.
[01] 객체지향의 사실과 오해 - 협력하는 객체들의 공동체 시너지를 생각하라. 전체는 부분의 합보다 크다. - 스티븐 코비(Stephen R. Covey) 객체지향의 목표는 실세계를 모방하는 것이 아니다. 오히려 새로운 세계를 창조하는 것이다. 실세계 모방이라는 객체지향의 개념은 훌륭한 프로그램을 설계하고 구현하는 실무적인 관점에서는 부적합하지만 객체지향이라는 용어에 담긴 기본 사상을 이해하고 학습하는 데는 매우 효과적이다. 커피를 주문하는 과정은 캐시어와 바리스타, 손님의 역할과 책임 협력이라는 세 가지 개념이 한데 어울려 조화를 이루며 만들어 낸 것이다. 객체 지향의 가장 중요한 개념 세 가지는 역할, 책임, 협력이다. 협력 객체들의 요청과 응답이 각각 연쇄적으로 일어나며 일이 처리 된다. 역할과 책임 역할은 책임을 내포한다. 여러 사람이 동일한 역할을 수행.. 2023. 12. 26.
직장에서 쓸모 있는 고수의 업무노트 ## 법칙1 체면은 버리고 싸움닭이 되어야 할 때다 - 싸움닭 정신 = '엑스트라 원 마일' 정신 (남 보다 한 걸음 더 나아가려는 부단한 노력 - GRIT = 관심사를 분명히 하라, 질적으로 다른 연습을 하라. 높은 목적의식을 가져라. 그리고 희망을 품어라 - 당신이 힘든 시간을 지날 떄, 모든 것이 당신에게 반대하는 것처럼 보일 때, 당신이 단 1분도 더 참을 수 없다고 느낄 때, 결코 포기하지 마라! 왜냐하면 그 순간이 바로 그 경로가 바뀔 시간과 장소이기 때문이다. ## 법칙2 양으로 승부하라! 현실에서는 항상 호날두가 메시를 이긴다. - 혁신가들은 '스나이퍼'가 아니라 '람보형 인재(난사 = 다작)' ## 법칙3 딴지 걸기의 위력을 맛봐라 - 레드팀을 구성하라 (미 육군에서 블루팀의 승리를 돕기.. 2023. 11. 14.
도파민네이션, 중독의 원인 https://product.kyobobook.co.kr/detail/S000001029426 도파민네이션 | 애나 렘키 - 교보문고도파민네이션 | “쾌락과 고통의 지휘자 도피만을 둘러싼 위험하고도 매혹적인 이야기” 뇌과학자 정재승, 1만 시간의 법칙 다니엘 레버틴 강력 추천!도파민네이션(dopamine nation)이란? 과학자들product.kyobobook.co.kr 우리 모두 각자만의 중독을 가지고 현대사회를 살아간다. 현대사회는 행복을 추구하고 쉽게 도파민을 얻을 수 있다. 내가 어렸을 때 게임이 마치 삶의 전부인 것처럼 빠져든 적이 있었다. 게임은 뇌의 도파민을 분비 시키고, 많은 도파민이 분비된 만큼, 게임을 하지 않고 있을 때는 그에 상응하는 혹은 더 큰 고통을 느끼게 된다. 그에 대한 해.. 2023. 6. 19.
곽재식의 먹는 화학 이야기 https://product.kyobobook.co.kr/detail/S000061532830 곽재식의 먹는 화학 이야기 | 곽재식 - 교보문고 곽재식의 먹는 화학 이야기 | 알고 먹으면 더욱 맛있는 집밥 속 과학 이야기* 요리, 과학, 역사, 일러스트와 에세이의 만남 * 식재료의 역사와 조리 과정의 화학 원리를 특유의 입담과 지식으로 product.kyobobook.co.kr 우리가 평소에 먹는 음식들에 대해서 과학적인 해석 및 재미있는 이야기들이 있다. 초반에는 조금 지루했는데 계속 읽다보니 어느새 몰입해서 읽게 되었다. 16가지 음식에 대한 재미있는 내용이 쓰여있다. 그 중 기억에 남는 내용이 있었는데 효모에 대한 내용이 가장 재미있었다. 우리가 평소에 먹는 빵은 밀가루로 만드는데 그 식감이 밀가루.. 2023. 6. 17.
스프링 부트 3 백엔드 개발자 되기 (3) 데이터베이스 조작이 편해지는 ORM 05장 데이터베이스 조작이 편해지는 ORM DBMS(database management system) ORM(object-relation mapping) 자바의 객체와 데이터베이스를 연결하는 프로그래밍 기법 장점1. SQL을 직접 작성하지 않고 사용하는 언어로 데이터베이스에 접근할 수 있습니다. 장점2. 객체지향적으로 코드를 작성할 수 있기 때문에 비지니스 로직에만 집중할 수 있습니다. 장점3. 데이터베이스 시스템이 추상화되어 있기 때문에 MySQL에서 PostrgreSQL로 전환한다고 해도 추가로 드는 작업이 거의 없습니다. 즉, 데이터베이스 시스템에 대한 종속성이 줄어듭니다. 장점4. 매핑하는 정보가 명확하기 때문에 ERD에 대한 의존도를 낮출 수 있고 유지보수할 때 유리합니다. 단점1. 프로젝트의 .. 2023. 5. 22.
스프링 부트 3 백엔드 개발자 되기 (2) 스프링 부트 3와 테스트 03장 스프링 부트 3 구조 이해하기 3.3 스프링 부트 요청-응답 과정 한 방에 이해하기 3장 학습 마무리 04장 스프링 부트 3 와 테스트 JUnit 테스트 사이클 이해하기 4.3 제대로 테스트 코드 작성해보기 @SpringBootTest 메인 애플리케이션 클래스에 추가하는 애너테이션인 @SpringBootApplication이 있는 클래스를 찾고 그 클래스에 포함되어 있는 빈을 찾은 다음 테스트용 애플리케이션 컨텍스트라는 것을 만듭니다. @AutoConfigureMockMvc MockMvc는 어플리케이션을 서버에 배포하지 않고도 테스트용 MVC 환경을 만들어 요청 및 전송. 응답 기능을 제공하는 유틸리티 클래스입니다. 2023. 5. 21.
스프링 부트 3 백엔드 개발자 되기 (1) 스프링 콘셉트 공부하기 스프링 콘셉트 공부하기 2.2.1 제어의 역전과 의존성 주입 IoC(Inversion of Control)란? // 일반적인 코드 public class A { private B b = new B(); } // IoC , 코드에서 객체를 생성하지 않음, 어디선가 받아온 객체를 b에 할당 public class IoC { private B b; IoC(IB b) { this.b = b; } } DI(Dependency Injection)란? 스프링은 객체들을 관리하기 위해 제어의 역전(IoC)를 사용합니다. 그리고 IoC를 구현하기 위해 사용하는 방법이 의존성 주입(DI) 입니다. // 의존성 주입 public class A { @Autowired B b; // 스프링 컨테이너가 DI(만들어서 넣어줌) 해.. 2023. 5. 21.
[쓰면서 익히는 알고리즘과 자료구조](8) 정렬(Sort) 8.1 거품 정렬(Bubble Sort) 거품 정렬은 정렬 중에서 가장 직관적인 정렬 방식이다. def bubble_sort(arr): n = len(arr) for i in range(n): done_sort = True for j in range(n - i - 1): if arr[j] > arr[j + i]: arr[j], arr[j +1] = arr[j + 1], arr[j] done_sort = False if done_sort: break return arr 8.2 삽입 정렬(Insertion Sort) def insertion_sort(arr): n = len(arr) for i in range(1, n): key_item = arr[i] j = i - 1 while j >= 0 and arr.. 2023. 2. 13.