본문 바로가기

도서/프로그래밍44

[쓰면서 익히는 알고리즘과 자료구조](0) 왜 알고리즘을 배워야 할까? 왜 알고리즘을 배워야 할까? 알고리즘 문제 해결 경험을 통해 실제 개발에서 어떤 문제를 해결하는데 도움이 된다. 노트 레이아웃을 이용한 알고리즘 문제 풀이 접근 방법 문제 분석과 함께 어떤 알고리즘과 자료구조가 적절한지 파악한다. 문제로 부터 요구사항과 제한사항을 수집한다 어떤 식으로 접근할지 다양한 아이디어를 제시한다. 코딩을 통합개발 환경 도움 없이 화이트 보드나 종이에 연습한다 시간/공간 복잡도를 고려한다. 어떤 테스트 케이스를 통과하는지에 대해서 고려한다. Constraints (범위, 제한사항) 문자열, 배열 그리고 숫자 배열을 얼마나 많은 요쇼들을 가질 수 있는가? 문자열의 경우 길이가 얼마나 길어질 수 있는가? 숫자의 경우 최댓값과 최솟값은 얼마인가? 어떤 요소들이 있는가? 숫자의 경우 정수.. 2023. 1. 25.
[헤드퍼스트 디자인패턴](3) 데코레이터 패턴(Dacorator Pattern) 상속맨 디자인에 눈을 뜨다 상속 남용 → 실행 중에 클래스를 꾸미는 방법을 배웁니다. 데코레이터 패턴을 배우면 기존 클래스 코드를 바꾸지 않고도 객체에 새로운 임무를 추가할 수 있습니다. 스타버즈라는 빠르게 성장한 커피 업체가 있습니다. 처음에는 Beverage 라는 추상 클래스를 만들고 모든 음료를 이 클래스의 서브 클래스로 구현하였습니다. 하지만 음료와 옵션의 종류가 늘자 DarkRoastWithWhip, DecafWithSteamedMilk 같은 수많은 클래스가 폭발적으로 생겨났습니다. 이 스타버즈는 어떠한 디자인 원칙을 어기지 않은걸까요? (힌트 2가지) (정답 확실 X) 애플리케이션에서 달라지는 부분을 찾아내고 달라지지 않는 부분과 분리한다. 구현보다는 인터페이스에 맞춰서 프로그래밍한다. 상속보.. 2023. 1. 25.
[헤드퍼스트 디자인패턴](2) 옵저버 패턴 : 객체들에게 연락 돌리기 소프트웨어 개발에서 바뀌지 않는 단 하나 = 변화 확장성 : 디스플레이 요소를 더하거나 뺄 수도 있다. 디자인 원칙 애플리케이션에서 달라지는 부분을 찾아내고 달라지지 않는 부분과 분리한다. 신문사 + 구독자 = 옵저버 패턴 신문사를 주제(subject), 구독자를 옵저버(observer) 느슨한 결합의 위력(Loose Coupling) 주제는 옵저버가 특정 인터페이스를 구현한다는 사실만 압니다. 옵저버는 언제든지 새로 추가할 수 있습니다. 새로운 형식의 옵저버를 추가할 때도 주제를 변경할 필요가 전혀 없습니다. 주제와 옵저버는 서로 독립적으로 재사용할 수 있습니다. 주제나 옵저버가 달라져도 서로에게 영향을 미치지 않습니다. 디자인 원칙 상호작용하는 객체 사이에는 가능하면 느슨한.. 2023. 1. 24.
[헤드퍼스트 디자인패턴](1) 전략패턴 소프트웨어를 고칠 때 기존 코드에 미치는 영향을 최소한으로 줄이면서 작업할 수 있는 방법이 있다면 정말 행복하지 않을까요? 디자인 원칙 애플리케이션에서 달라지는 부분을 찾아내고 달라지지 않는 부분과 분리한다 바뀌는 부분은 따로 뽑아서 캡슐화 한다. 그러면 나중에 바뀌지 않는 부분에는 영향을 미치지 않고 그 부분만 고치거나 확장할 수 있다. 디자인 원칙 구현보다는 인터페이스에 맞춰서 프로그래밍한다 핵심은 실제 실행 시에 쓰이는 객체가 코드에 고정되지 않도록 상위 형식 (supertype)에 맞춰 프로그래밍 해서 다형성을 활용해야 한다는 점에 있습니다. 인터페이스 다형성 캡슐화 로 만들면 프로그램이 변화에 되게 유연해 진다. 이런 식으로 두 클래스를 합치는 것을 구성(composition)을 이용한다. 라고.. 2023. 1. 23.