| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
- string
- 클린코드 파이썬
- 깨끗한 코드
- 데이터 사이언스
- 데이터과학
- programmers
- 자바
- 데이터사이언스
- Java
- 알고리즘
- 코딩테스트
- 문자열
- Data Science
- 파이썬
- Python
- softeer
- data science methodology
- Coursera
- 클린코드
- IBM
- 부스트캠프
- 코세라
- 프로그래머스
- AI Mathematics
- Clean Code
- 오블완
- 티스토리챌린지
- 코테
- Boostcamp AI
- 소프티어
- Today
- Total
목록전체 글 (77)
떼닝로그
오류 처리는 중요하다. 하지만 오류 처리로 인해 프로그램 논리를 이해하기 어려워진다면 깨끗한 코드라 부르기 어렵다. 오류 코드보다 예외를 사용하라 - 예외를 지원하지 않는 언어는 오류를 처리하고 보고하는 방법이 제한적이었다. 아래의 코드를 보자. class DeviceController(): ... def sendShutDown(self): self.handle = self.getHandle(self.DEV1) # 디바이스 상태 점검 if self.handle != DeviceHandle.INVALID: # 레코드 필드에 디바이스 상태를 저장한다. self.retrieveDeviceRecord(self.handle) # 디바이스가 일시정지 상태가 아니라면 종료한다. if self.record.getSta..
- 남들이 변수에 의존하지 않게 만들기 위해 변수를 비공개로 정의한다. 자료 추상화 - 아래 첫 번째와 두 번째 코드 모두 2차원 점을 표현하지만, 한 클래스는 구현을 외부로 노출하고 다른 클래스는 구현을 완전히 숨긴다. # 6-1 class Point(): def __init__(self): self.x = 0.0 self.y = 0.0 # 6-2 class Point(): def __init__(self): pass def getX(self): pass def getY(self): pass def setCartesian(self, x:double, y:double): pass def getR(self): pass def getTheta(self): pass def setPolar(r:double, t..
- 프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야 한다. - 코드 형식을 맞추기 위한 간단한 규칙을 정하고, 그 규칙을 착실히 따라야 한다. - 팀으로 일한다면 팀이 합의해 규칙을 정하고 모두가 그 규칙을 따라야 한다. - 필요하다면 규칙을 자동으로 적용하는 도구를 활용한다. 형식을 맞추는 목적 - 코드 형식은 중요하다! - 융통성 없이 맹목적으로 따르면 안 된다... - 오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다. - 오랜 시간이 지나 원래 코드의 흔적을 더 이상 찾아보기 어려울 정도로 코드가 바뀌어도 맨 처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속 영향을 미친다. 적절한 행 길이를 유지하라 - 위 이미지는 JUnit, FitNesse,..
- 잘 달린 주석은 그 어느 정보보다 유용하다! - 주석은 사실 기껏해야 필요악이지만... 실패를 만회하기 위해 우리는 주석을 사용한다...! - 코드는 변화하고 진화하지만, 주석이 언제나 코드를 따라가지는 못한다. 주석이 코드에서 분리되어 점점 더 부정확한 고아로 변하는 사례가 너무도 흔하다... MockRequest request; private final String HTTP_DATE_REGEXP = "[SMTWF][a-z]{2}\\,\\s[0-9]]{2}\\s[JFMASOND][a-z]{2}\\s"+ "[0-9]{4}\\s[0-9]{2}\\:[0-9]{2}\\:[0-9]{2}\\sGMT"; private Response response; private FitNesseContext context; ..
5.1 캐시 5.1.1 캐시란? - 캐시(cache)는 일부 데이터를 데이터 출력 위치와 가까운 지점에 일시적으로 저장함 - 데이터 저장을 전제로 함 5.1.2 어디에 사용되나? - 아래 그림의 브라우저 캐시는 웹 브라우저가 접속한 페이지를 캐시하는 것. 이를 통해 웹 서버 접속을 줄이고 브라우저 표시 고속화 가능 - 웹 서버 자체의 부하를 줄이기 위해 웹 서버와 클라이언트 사이에 캐시 서버를 배치하는 방법을 나타내고 있는 것이 아래 그림 5.1.3 정리 - 캐시의 장점은 데이터에 고속으로 액세스할 수 있고, 실제 데이터에 대한 액세스 부하를 줄일 수 있다는 것 - 캐시는 참조 빈도가 높은 데이터와 캐시의 데이터가 손실되어도 문제가 없는 시스템에 적합함 - 데이터 갱신 빈도가 높은 시스템, 대량의 데이터..
4.1 직렬/병렬 4.1.1 직렬/병렬이란? - CPU 제조사가 클럭(Clock) 속도를 올리는 대신에 코어 수를 늘려서 소비 전력과 발열 문제를 해결하려고 방침 전환 - 대규모 웹 서비스에서는 방대한 수의 사용자 요청을 처리해야 하므로 수많은 서버를 배치해서 병렬로 처리 - 여러 개의 물건이 일직선으로 나열되어 있는 것을 직렬, 두 줄 이상으로 나열되어 있는 것을 병렬 - 1차선 구간은 혼잡해지기 쉽고, 합류점이나 분기점에서 사고가 발생하기 쉽기 때문에 전체 흐름을 느리게 만드는 병목지점(Bottleneck) - 해결책은 1차선 구간을 3차선으로 만드는 것...! - 특정 기간 내에 하나의 CPU로 처리할 수 있는 양에는 한계가 있지만, 여러 개의 CPU를 배치하면 처리량을 늘릴 수 있음. - 다수의 ..
3.1 3계층형 시스템의 구성도 - 아래 나열되어있는 세 개는 모두 서버이고, 스위치를 경유해서 연결되어 있다. - 서버 내부에 나열되어 있는 CPU, 메모리, 디스크, NIC/HBA와 같은 하드웨어 부품은 모두 앞 장에서 설명한 물리 장치 - 그 위에는 CPU와 메모리 영역을 확대한 것. 이것이 바로 Operating System의 영역 3.2 주요 개념 설명 3.2.1 프로세스와 스레드 - 프로세스 및 스레드는 프로그램 실행 파일 자체가 아니라 OS 상에서 실행되어 어느 정도 독립성을 가지고 동작하는 것. 마치 사람이 숨울 쉬기 시작하면서 활동하는 것과 같은 의미 - 프로세스 및 스레드가 활동하려면 메모리 공간이 필요. 커널에 의해 메모리상에서 확보됨 - 다양한 처리를 하면서 데이터를 주고받기 위해 ..
- 프로그래밍 초창기에는 시스템을 루틴과 하위 루틴으로 나눴으나, 지금은 함수만 살아남았다. - 가장 기본적인 단위가 함수. # 좋지 않은 코드 def testableHtml(pageData:PageData, includeSuiteSetup:bool) -> str: try: wikiPage = pageData.getWikiPage() buffer = StringBuffer() if pageData.hasAttribute("Test"): if includeSuiteSetup: suiteSetup = PageCrawlerImpl.getInheritedPage(SuiteResponder.SUITE_SETUP_NAME, wikiPage) if suiteSetup != NULL: pagePath = suiteSe..