CH1. 깨끗한 코드 코드가 존재하리라 코드: 요구사항을 상세히 표현하는 수단 나쁜 코드 나쁜 코드 → 생산성 떨어짐 → 생산성 높여야 된다는 압력 → 더 나쁜 코드 → … 시간을 덜여 깨끗한 코드를 만드는 노력은 비용을 절감한다. 1. 비야네 스트롭스트룹 효율성 성능 철저한 오류 처리 깨끗한 코드는 한 가지를 잘 한다 2. 그래디 부치 가독성, 명쾌한 추상화 3. 큰 데이브 토마스 다른 사람이 고치기 쉬울 만큼의 가독성 테스트 케이스(TDD)를 가진다. 4. 마이클 페더스 주의 깊게 짠 코드, 세세한 사항까지 꼼꼼하게 신경쓴 코드 5. 론 제프리스 중복을 피하고 한 기능만 수행 작게 추상화하기 6. 워드 커닝햄 짐작했던 기능을 그대로 수행한다면 깨끗한 코드다.

SQL 중심적인 개발의 문제점 애플리케이션을 개발할 때는 보통 객체 지향 언어로 개발한다. 데이터베이스는 대부분 관계형 DB를 사용한다. → 지금 시대는 객체를 관계형 DB에 관리함. 무한 반복되고, 지루한 코드. CRUD만 무한 반복해서 개발함. 중간에 필드가 수정되는 경우, 모든 SQL문을 수정해야함. 패러다임의 불일치: 객체 vs 관계형 데이터베이스 객체(Object) → RDB, NoSQL, File, OODB 등 다양한 형태로 저장할 수 있음. 하지만 현실적인 대안은 RDB를 선택한다. 객체 → SQL → RDB: 이런 과정으로 RDB에 저장한다. 객체와 관계형 데이터베이스의 차이 상속 데이터베이스 테이블에는 상속이 없다 → 슈퍼타입(ex. Item), 서브타입(ex. Album) 관계로 설계함..
1. 자료형 리스트 리스트 컴프리헨션 ex. 0~19 중에서 홀수만 포함하는 리스트 array = [i for i in range(20) if i % 2 == 1] N * M 크기의 2차원 리스트를 만들 때 유용하다. array = [[0] * m for _ in range(n)] 람다 표현식 활용 array = list(map(lambda x: x+10, [1, 2, 3])) # [11, 12, 13] 리스트 관련 기타 메서드 원소 삽입: array.append(2) 기본 정렬: array.sort() 원소 뒤집기: array.reverse() 특정 인덱스에 데이터 추가: array.insert(2, 3): 인덱스 2에 3 추가 특정 값을 갖는 원소 제거(값을 가진 원소가 여러 개면 하나만 제거함): ..
한동안 회사 다니면서 javascript만 했더니 python을 그새 다 까먹었다... 문법 복습 겸 리트코드 쉬운 문제 몇 개 끄적여봤다. Two Sum - LeetCode Two Sum - LeetCode Can you solve this real interview question? Two Sum - Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target. You may assume that each input would have exactly one solution, and you may not leetcode.com 1) 내 풀이: Bru..
* record: 특정 값 타입을 담는데 특화됨. DTO로 쓰기 좋음 보통 보일러 플레이트 코드는 lombok을 사용하여 중복된 코드를 줄인다. public record Example(String name, String series) {} 컴파일러는 헤더를 통해 내부 필드를 추측한다. -> getter, setter, toString, equals, hashCode를 선언하지 않아도 자동으로 구현된다. getter를 사용할 때: getName()이 아니라, name()과 같이 사용한다. 그 외의 특징 - 불변 객체(final)이고, 한번 값이 정해지면 값을 변경할 수 없다. - 각 필드는 private final으로 정의된다. - 자동으로 생성된 메소드는 @Override로 수정할 수 있다. - 컴팩트 ..

1. The element 목표: to-do 앱을 만들어보자. 일단 lib/server/database.js에 in-memory DB가 있다고 가정하자. // In a real app, this data would live in a database, // rather than in memory. But for now, we cheat. const db = new Map(); export function getTodos(userid) { if (!db.get(userid)) { db.set(userid, [{ id: crypto.randomUUID(), description: 'Learn SvelteKit', done: false }]); } return db.get(userid); } export fun..

1. What is SvelteKit? Svelte: 컴포넌트 프레임워크 SvelteKit: 앱 프레임워크 SvelteKit이 제공하는 기능 Routing 서버 렌더링, 서버 작업 Data fetching 등등... 2. Routing SvelteKit은 파일 시스템 베이스 라우팅을 사용한다: 즉, URL로 라우팅한다. home about home this is the home page. about을 누르면 -> about으로 이동(about 폴더 속의 +page.svelte로 이동) 서로 다른 페이지들이 공통 UI를 공유하는 경우, +layout.svelte로 같은 경로에 있는 라우터들이 UI를 공유할 수 있다. 예를 들어 +layout.svelte에 다음과 같이 공동으로 쓸 컴포넌트를 넣으면 하위 폴..

1. If blocks Log in 버튼을 눌렀을 때 -> Log out 버튼으로 변경 Log out 버튼을 눌렀을 때 -> Log in 버튼으로 변경 {#if user.loggedIn} Log out {/if} {#if !user.loggedIn} Log in {/if} # 기호: Block opening tag를 의미 / 기호: Block closing tag를 의미 : 기호: Block continuation tag를 의미 2. Else blocks if user.loggedIn과 if !user.loggedIn은 mutually exclusive이기 때문에 else 블록을 사용할 수 있다. {#if user.loggedIn} Log out {:else} Log in {/if} 3. Else-if ..

Props란: - 상위 컴포넌트에서 하위 컴포넌트로 전달되는 데이터(Properties) - export: 하위 컴포넌트로 데이터 전달 - import: 하위 컴포넌트에서 props 받아서 사용 1. Declaring props 1-1. Nested.svelte: answer라는 속성을 받아서 이 값을 출력하는 역할. The answer is {answer} 1-2. App.svelte: answer를 import로 들고와서 answer를 42로 설정 -> Nested.svelte에서 이 속성을 받아서 화면에 출력함 2. Default values 기본값을 명시할 수 있다. The answer is {answer} 3. Spread props object prop를 출력할 때: 하나씩 명시하는 것 대신 ..

1. Assignments on: 이벤트이이름 = "{핸들러함수}" : 이벤트 리스너 등록 이벤트 이름에는 click, change와 같은 DOM event가 들어간다. 버튼을 누를 때마다 숫자 증가 Clicked {count} {count === 1 ? 'time' : 'times'} 2. Declarations 다른 반응성 declarations를 사용하여 변수를 동기화할 수 있다. $ 표현식: 반응성 변수/함수에 사용 선언형 문법: 리액티브 변수를 정의(변수가 변경될 때마다 자동으로 업데이트 된다.) 아래의 코드와 같이 count값이 바뀔 때마다 업데이트되는 doubled를 정의할 수 있다. 실행형 문법: 참조된 값이 변경될 때마다 $: 의 자바스크립트가 실행된다. 예를 들어) $: console...

1. Adding data Hello world 대문자로 출력하기 Hello {name.toUpperCase()}! 2. Styling p element에 스타일 추가하기 This is a paragraph. 3. Nested components 모든 컴포넌트를 하나의 파일에 넣는 건 비효율적이다. 다른 파일에서 컴포넌트를 import해서 들고오자. .svelte 파일: HTML, CSS, JS를 캡슐화한 코드를 가짐. 이 코드 블럭들은 재사용 가능. 3-1. Nested.svelte 파일: p 컴포넌트 This is another paragraph. 3-2. App.svelte: Nested를 가져와서 화면에 넣음 이때 Nested는 p 컴포넌트이지만 App.svelte의 style에 영향을 받지 않는..