전체 글 54

[디자인 패턴] 옵저버 패턴

이 글은 [헤드 퍼스트 디자인 패턴]의 2장 옵저버 패턴을 정리한 글입니다. 기상 모니터링 애플리케이션 예제 요구사항 현재 기상 조건(온도, 습도, 기압)의 변화를 실시간으로 디스플레이 장비에 반영해야 합니다. 갱신된 기상 정보는 WeatherData 객체의 세터 메소드를 통해 WeatherData 내부의 상태를 변화시키는 방식으로 동작한다고 가정합니다. 디스플레이 장비는 로직이 다양하며 확장 가능하다는 것을 전제합니다. 현재는 기상 조건, 기상 통계, 기상 예보 세 가지의 디스플레이 장비들이 있습니다. 먼저 나이브하게 WeatherData 클래스를 만들어 보겠습니다. MeasurementChanged 메소드는 getter 메소드를 통해 현재 기상 정보를 가져온 후 각 디스플레이 객체의 update 메소..

디자인패턴 2023.10.06

[디자인 패턴] 전략 패턴

헤드 퍼스트 디자인 패턴 1장의 내용을 정리한 글입니다. 오리 시뮬레이션 게임 SumUduck 예제 이 게임에는 헤엄치고, 꽥꽥 소리를 내는 다양한 오리가 등장합니다. 이를 구현하기 위해 일반적인 객체지향 기법을 사용해 봅니다. 1. 슈퍼클래스 Duck 클래스를 만든 다음, Duck을 상속하는 다른 오리들을 만들어 봅니다. abstract class Duck { // 모든 오리가 꽥꽥 소리를 낼 수 있습니다. quack(); // 모든 오리가 헤엄을 칠 수 있습니다. swim(); // 모든 오리의 모양이 다르므로 display() 메소드는 추상 메소드입니다. display(); } class MallardDuck extends Duck { display() // 나는 말라드덕 } class Redhea..

디자인패턴 2023.10.02

코드스테이츠 메인프로젝트 후기

많이 배웠던 메인프로젝트 후기입니다. 코드스테이츠에서는 마지막 5주를 메인프로젝트로 보내는데요. 프론트 세 명, 백엔드 세 명이 모여서 기획부터 개발, 배포까지 진행합니다. 0. 팀 규칙 정하기 다들 프리 프로젝트(메인프로젝트 전 2주간 하는 프로젝트) 때에 소통에 대한 중요성을 느꼈기 때문에 팀 규칙을 정하는 것을 중요하게 여겼습니다. 저희 팀만의 규칙 중 가장 중요한 것은 "상주" 였습니다. 팀별 디스코드 채널이 있었는데 모든 팀원들이 디스코드 채널에 오전 9시부터 저녁 6시까지 상주하기로 하였습니다. 저는 이 규칙이 저희 팀의 생산성과 결과를 가져다 주었다고 생각합니다. 프론트든 백엔드든 각자에게 물어볼 것이 있으면 거의 실시간으로 질문할 수 있었고, 개발 변경사항 등을 모든 팀원이 공유하였으며, ..

프로젝트 2023.09.13

[자바 웹 프로그래밍] 3장 ~ 5장. 웹 서버 만들기 + 리팩토링

이 글은 [자바 웹 프로그래밍] 3장에서 5장까지 실습한 내용을 정리한 글입니다. 3장. 웹 서버 실습 요구사항 순수 자바를 사용해서 웹 서버를 만드는 경험을 하였습니다. 요구사항 localhost:8080/index.html을 입력시 webapp/index.html을 반환하기 GET, POST방식의 회원가입 + 홈화면 리다이렉트 로그인시 쿠키에 logined=true값 설정하고 리다이렉트 localhost:8080/user/list 요청시 로그인상태 확인 후 유저 리스트 반환 혹은 로그인 페이지 리다이렉트 css 적용하기 힌트를 봐 가면서 최대한 혼자 요구사항들을 구현하려고 노력하였고 3일정도(약 10시간)동안 구현하였습니다. 책에서 빠르면 4시간, 길면 8시간 정도 걸린다는 이야기가 있었는데 저는 꽤..

서적 2023.08.11

[자바 웹 프로그래밍] 2장. 문자열 계산기 구현을 통한 테스트와 리팩토링

이 글은 박재성님의 [자바 웹 프로그래밍] 책의 2장 예제를 정리한 글입니다. 1. main() 메소드를 활용한 테스트의 문제점 프로덕션 코드와 테스트 코드(main() 메소드)가 같은 클래스에 위치하는 경우 서비스하는 시점에 같이 배포된다. 이것은 테스트 코드와 프로덕션 코드를 분리함으로써 해결할 수 있다. 2. main() 메소드 하나에서 여러 테스트를 실행하는 경우의 문제점 프로덕션 코드의 복잡도가 증가할수록 main() 메소드의 복잡도가 증가하며, main() 메소드를 유지하는 데에 힘이 들어간다. 이 경우 각 메소드별로 테스트 코드를 분리하는 방법으로 해결할 수 있다. 3. + 출력을 통해 테스트를 하는 경우의 문제점 로직의 복잡도가 높은 경우 일일이 출력값을 확인하기 힘들다. JUnit 라이브..

서적 2023.08.07

코드스테이츠 44기 백엔드 과정 수료 후기

오늘 코드스테이츠를 수료했습니다. 시원섭섭한 느낌입니다. 이번 글에서는 백엔드 부트캠프를 마무리한 입장에서 회고를 작성해보고자 합니다. 시작할 당시의 나(23.02) 저는 경제학과를 2월에 졸업한 상태였습니다. 4학년 여름(22.06)부터 코딩을 찍먹해보는 경험을 하였습니다. 그러다 작년 8월 정도부터 여러 경험 중 알고리즘 문제풀이의 매력에 빠져버렸습니다. 테스트케이스를 통과하는 코드를 작성하는 과정에서 희열을 많이 느꼈습니다. 백준, 프로그래머스, 리트코드 등 문제들을 풀며 유데미에서 인도 형님의 알고리즘 강의도 듣는 등 꽤 열심히 문제풀이를 하였습니다. 점점 알고리즘과 자료구조에 익숙해지는 제 자신을 보며 든 생각은 '이거 계속하면 취업도 다 하겠지'라는 막연한 생각이었습니다. 결과적으로 보면 저는..

기타 2023.08.03

2023 정보처리기사 1회차 합격 후기

4월에 시험을 보고 오랜 시간이 지난 후 6월 9일 결과를 확인했습니다. 정보처리기사 시험이 코딩문제와 SQL문제가 점점 많이 출제되었다는 점이 저에게는 좋게 작용했던 것 같습니다. 부트캠프 진행중이었는데 다행히 프로젝트 기간이 아니었기 때문에 시간을 따로 빼서 공부할 수 있었습니다. 실기 공부는 필기 글과 비슷하게 흥달쌤과 함께했습니다. 1. 흥달쌤 실기 기출 해설강의 2. 흥달쌤 실기 교재 2회독 3. 최근 3개년 기출문제 빠르게 정리 실기시험 전 공부 상태 1. SQL, 코딩문제를 거의 풀 수 있었습니다. 직전에 SQLD를 공부하면서 SQL 쿼리문에 대한 이해를 하고 있는 상태였으며, 부트캠프에서 DB 설계와 SQL 과제들을 해결하는 과정에서 SQL문에 익숙해진 상태였습니다. C, 자바, 파이썬도 ..

취준 2023.08.03

[SQL 레벨업] 2장. SQL 기초

이 글은 SQL 레벨업 책의 2장을 정리한 것입니다. 6강. SELECT 구문 select 구문은 검색, 질의, 추출을 하기 위한 구문입니다. select구문은 from절, where절, group by절, having절을 포함할 수 있습니다. WHERE where절은 일부의 레코드만을 가져오고 싶을 때 사용합니다. 연산자로는 =, , =, 가 있습니다. where절에서 여러 조건을 결합하기 위해서는 and, or를 사용합니다. 값이 NULL인 레코드를 찾기 위해서는 is null(is not null)을 사용합니다. 어떤 값이 집합 안에 있는지, 없는지를 판단하기 위해서는 in, exists, not exists 등을 사용합니다. where 조건에서 인덱스를 사용할 수 있습니다. GROUP BY, HA..

데이터베이스 2023.08.03

[SQL 레벨업] 1장. DBMS 아키텍처

본 글은 SQL 레벨업 1장을 정리한 내용입니다. 1강. DBMS 아키텍처 개요 RDB(Relational Database) 제품은 내부 아키텍처들이 조금씩 다르지만 관계 모델이라는 수학적인 이론을 바탕으로 합니다. 사용자들은 웹 입력 양식, 애플리케이션, SQL 인터페이스를 통해 SQL 구문을 DBMS에 전달합니다. 전달된 SQL 구문은 DBMS를 통해 다양한 처리를 수행합니다. 저장 장치에 있는 데이터에 접근해서 데이터를 읽고 씁니다. 쿼리 평가 엔진 - 입력받은 SQL 구문을 분석하고, 어떤 순서로 데이터에 접근할지를 결정(실행 계획) 버퍼 매니저 - 버퍼로 사용하는 메모리 영역을 관리하는 매니저 디스크 용량 매니저 - 데이터를 어디에, 어떻게 저장할지를 관리, 데이터의 읽고 쓰기를 제어 트랜잭션 ..

데이터베이스 2023.08.01

객체지향의 사실과 오해

이 글은 일주일 동안 [객체지향의 사실과 오해]를 읽고 정리한 내용입니다. 책에서는 커피 주문을 하는 상황을 예시로 듭니다. 1. 손님은 캐셔에게 커피를 주문합니다. 2. 캐셔는 바리스타에게 커피를 제조하라는 메시지를 보냅니다. 3. 바리스타는 자신의 방식으로 커피를 완성한 다음 캐셔에게 커피 제조가 완료되었다고 알립니다. 4. 캐셔는 손님에게 커피가 완성되었다고 응답합니다. 위 커피 주문의 예시에서 객체간 관계를 설명합니다. 캐셔는 바리스타가 커피 머신을 통해 커피를 제조하든 수작업으로 커피를 제조하든 상관하지 않고 바리스타에게 커피 주문을 할 뿐입니다. 객체들은 다른 객체가 무엇을 하는지만 알고 어떻게 하는지는 모릅니다. 각 객체들은 메시지를 수신하면 응답을 할 뿐입니다. 이 특성은 각 객체가 대체가..

서적 2023.08.01