STUDY 35

백준/5430번, AC/C++

백준 5430번 AC c++ 문제풀이 문제 설명 배열이 주어지면 해당 배열을 뒤집거나(R), 처음 숫자를 버리는 연산(D)을 시행한 뒤 최종 결과를 출력한다. 주의할 점 실제로 배열을 뒤집을 생각을 하면 시간초과의 길로 빠지게 된다. 배열의 실제 순서는 상관 없다는 것을 깨달으면 문제가 비교적 쉽게 풀린다. c++의 string에는 split 함수가 없기 때문에 직접 구현하거나, find를 써야 한다. 입력형태가 독특하다는 점을 유의해야 한다. 생각의 흐름 배열을 매번 뒤집으면 시간 초과가 날테니까 덱을 써서 현재 진행 방향에 따라 front나 back으로 다르게 접근하는 게 좋겠다. 비어있는데 에러인 경우나 진행 방향은 bool형 변수를 두어서 확인해야겠네 split 없는데 직접 구현하기 귀찮다.. 근..

[Clean Code] 13장 동시성

Clean Code 내용 정리; 13장 동시성 여러 스레드를 동시에 돌리는 이유와 어려움, 이런 어려움에 대처하고 깨끗한 코드를 작성하는 방법을 제안하며 동시성(Concurrency)을 테스트하는 방법과 그 문제점에 대해 이야기한다. 동시성(Concurrency)이란? 동시성: '무엇'을 '언제'까지 돌릴지 하는 것에 대한 결합(Coupling)* 을 분리하는 전략. *결합도: 어떤 모듈이 다른 모듈에 의존하는 정도 동시성은 때로 성능을 높여준다. 프로그램이 거대한 루프가 아닌 작은 협력 프로그램으로 비춰지며, 시스템 자체를 이해하기 쉽고 문제를 분리하기도 쉬워지고, 응답 시간과 작업 처리량을 개선시킬 수도 있다. 그러나, 항상 성능을 높여주는 것이 절대 아니다. 오히려 동시..

STUDY/Books 2021.06.09

[Clean Code] 12장 창발성

Clean Code 내용 정리; 12장 창발성 착실하게 따르기만 하면 우수한 설계가 나오는 단순한 설계 규칙 네 가지에 대해 설명한다. 1. 모든 테스트를 실행하라 테스트가 불가능한 시스템은 검증도 불가능하다. 오류가 날 것이 두려워 리팩터링을 하기도 망설여진다. 테스트가 가능한 시스템을 만들면 크기가 작고 목적 하나만 수행하는 클래스가 나오기 때문에 설계 품질이 높아진다. '테스트 케이스를 만들고 계속 돌려라' 2. 리팩터링: 중복을 없애라 우수한 설계에서 중복은 추가적인 작업과 위험, 불필요한 복잡도를 뜻하기 때문에 없애야할 대상이다. 단 몇 줄이라도 중복을 제거하겠다는 의지로 소규모 재사용의 기회를 포착한다면 시스템 복잡도를 극적으로 줄일 수 있다. //size와 isEmpty 함수를..

STUDY/Books 2021.06.05

[Clean Code] 11장 시스템

Clean Code 내용 정리; 11장 시스템 깨끗한 코드로 구현함으로써 낮은 추상화 수준에서 관심사를 분리하는 것에서 더 나아가 높은 추상화 수준, 즉 시스템 수준에서도 깨끗함을 유지하는 방법을 살펴본다. 시스템 제작과 시스템 사용을 분리하라. 실제로 필요할 때까지 객체를 생성하지 않는 '초기화 지연', '계산 지연'기법 은 불필요한 부하가 걸리지 않고 어떤 경우에도 null 포인터를 반환하지 않는다는 장점이 있지만, 남발되었을 때는 모듈성이 깨지고 중복이 심각해지기에 전반적이고 일관적인 다른 방식을 취할 필요가 있다. 시스템 생성과 시스템 사용을 분리하는 방법에는 다음과 같은 것들이 있다. Main 분리 : 생성과 관련한 코드는 모두 main이나 main이 호출하는 모듈로..

STUDY/Books 2021.06.04

[Clean Code] 10장 클래스

Clean Code 스터디 내용 정리; 10장 클래스 이번 장에서는 깨끗한 클래스에 대해 이야기한다. 기본 클래스 체계 표준 자바 관례 public static 변수 -> private static 변수 -> private 인스턴스 변수 -> public 함수 -> private 함수 이때 private 함수는 자신을 호출하는 공개 함수 직후에 넣는다. 즉, 추상화 단계가 순차적으로 내려간다. 변수와 유틸리티 함수는 최대한 비공개로 유지하려고 노력하되, 때에 따라 protected로 테스트 코드의 접근을 허용한다. 깨끗한 클래스를 만들려면? 1. 단일 책임 원칙 (Single Responsibility Principle, SRP) 클래스는 하나의 책임을 맡게 하여 클래스를 변경하는 이유를 단 하나로 만들..

STUDY/Books 2021.05.30

[Clean Code] 9장 단위 테스트

Clean Code 스터디 내용 정리; 9장 단위 테스트 깨끗한 테스트 코드의 중요성과 테스트 코드를 작성할 때 신경 써야할 부분에 대해 다룬다. TDD 법칙 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 깨끗한 테스트 케이스의 중요성 테스트 코드는 실제 코드의 유연성, 유지보수성, 재사용성을 보존하고 강화하기 때문에 매우 중요하다. 테스트 케이스가 있다면 코드가 아무리 부실하고 설계가 모호하여도 별다른 우려와 공포 없이 안심하고 아키텍쳐를 개선할 수 있다. 테스트 코드가 지저분하면 실제 코드를 변경하는 능력과 코드 구조를 개선하는 능력이 떨어진..

STUDY/Books 2021.05.25

[Clean Code] 8장 경계

Clean Code 스터디 내용 정리; 8장 경계 오픈 소스, 외부 패키지 등의 외부 코드를 우리 코드에 깔끔하게 통합하는 기법과 기교에 대해 설명한다. 1. 새로운 클래스로 경계를 감싼다. 경계 인터페이스를 이용할 때 여기 저기 인수로 넘기고 반환값으로 사용하면 인터페이스가 변할 경우 수정할 코드가 상당히 많아진다. 따라서 경계 인터페이스의 인스턴스는 이를 이용하는 클래스나 클래스 계열 밖으로 노출되지 않도록 주의해야 한다. 새로운 클래스로 경계 인터페이스를 캡슐화하면 해당 클래스 안에서 객체 유형을 관리하고 변환하기 때문에 인터페이스의 변경에 따른 영향을 통제할 수 있다. // 1. Object를 변환하는 코드가 여러 번 중복되기에 깨끗한 코드가 아님. Map sensors = new HashMap(..

STUDY/Books 2021.05.24

[Clean Code] 7장 오류 처리

Clean Code 스터디 내용 정리; 7장 오류 처리 오류 처리 코드로 인해 프로그램 논리를 이해하기 어려워진다면 깨끗한 코드라고 볼 수 없기 때문에, 이번 장에서는 우아하고 고상하게 오류를 처리하는 기법과 고려 사항 몇 가지를 다룬다. 미확인 예외를 사용한다. 오류 코드보다는 예외를 사용하여 프로그램 논리와 오류 처리 코드를 분리하는 게 좋다. 확인된 예외도 유용한 때가 있긴 하지만, 일반적인 애플리케이션에서는 이익보다는 연쇄적인 수정때문에 일어나는 비용이 더 크므로 쓰지 않는 편이 낫다. 예외를 던질 때는 오류 메시지에 전후 상황에 대한 정보를 담아 함께 넘겨준다. try-catch-finally 부터 작성한다. 예외가 발생할 코드를 짤 때는, 강제로 예외를 일으키는 테스트 케이스를 작성한 후 테스..

STUDY/Books 2021.05.23

[Clean Code] 6장 객체와 자료 구조

Clean Code 스터디 내용 정리; 6장 객체와 자료구조 이 장에서는 객체와 자료구조의 차이와 특징 그리고 바람직한 구현방법을 소개한다. 객체 추상화 뒤로 자료를 숨긴다. 구현을 외부로 노출하지 않는다. 자료를 다루는 함수만 공개한다. 객체 지향 코드는 새로운 함수를 추가하려면 모든 클래스를 고쳐야 하기 때문에 어렵지만, 기존 함수를 변경하지 않으면서 새 클래스를 추가하기는 쉽다. public interface Point { double getX(); double getY(); void setCartesian(double x, double y); double getR(); double getTheta(); void setPolar(double r, double theta); } public class..

STUDY/Books 2021.05.21

[Clean Code] 5장 형식 맞추기

Clean Code 스터디 내용 정리; 5장 형식 맞추기 프로그래머라면 코드 형식을 맞추기 위한 규칙을 정하고 그 규칙을 착실히 따라야 한다. 코드 형식은 의사소통의 일환이기에 너무도 중요하다. 코드는 바뀌고 사라질지라도 개발자의 스타일과 규율은 사라지지 않는다. 이번 장에서는 원활한 소통을 돕는 코드 형식에 대해 다룬다. 1. 적절한 길이를 유지한다. 한 행은 120자 미만으로, 한 파일은 200줄 정도로 유지하도록 하자. 일반적으로 긴 것보다는 짧은 게 이해하기 쉽다. 2. 공백으로 개념을 분리한다. 가로 공백으로 별개의 개념이라는 것을 강조할 수 있고, 일련의 행 묶음을 빈 행으로 분리함으로써 완결된 생각을 분리할 수 있다. 들여쓰기 또한 범위로 이뤄진 계층을 표현하는 데에 사용되므로 짧고 간단한 ..

STUDY/Books 2021.05.18