분류 전체보기
-
[Clean Code] 형식 맞추기Dev/정리 2022. 5. 17. 21:03
포맷팅이 중요한 이유 1. 가독성에 필수적이다 코드를 수월하게 읽어나갈 수 있다. 아마추어처럼 보이지 않는다. 포맷팅으로 인해 코드를 잘못해석해 버그를 발생할 위험을 줄인다. 2. 200라인 협업에서의 대부분의 코드들도 200라인 정도를 유지한다 코드 길이가 200라인을 넘어간다면, 클래스가 여러 개의 일을 하고 있을 수 있다. SRP에 위배된다. 3. 밀접한 개념은 서로 가까이 둔다. 행 묶음은 완결된 생각 하나를 표현하기 때문에 개념은 빈 행으로 분리한다. 변수는 사용되는 위치에서 최대한 가까이 선언한다. Java Class Declarations Class 내부 코드 순서 1. static 변수 public -> protected -> package -> private 순서 2. instance 변..
-
[Clean Code] 함수Dev/정리 2022. 5. 15. 11:24
SOLID (객체지향설계) 객체지향 설계의 5가지 원칙 1. SRP 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 클래스는 하나의 기능만 가지며, 어떤 변화에 의해 클래스를 변경해야 하는 이유는 오직 하나뿐이여야 한다. SRP 책임이 분명해지기 때문에, 변경에 의한 연쇄작용에서 자유로워 질 수 있다. 가독성 양상과 유지보수가 용이해진다. 실전에는 쉽지 않지만 늘 상기해야 한다. 2. OCP 개방/폐쇄 원칙 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 변경을 위한 비용을 줄이고, 확장을 위한 비용은 가능한 극대화 해야 한다. 요구사항의 변경이나 추가사항이 발생하더라도, 기존 구성요소에는 수정이 일어나지 않고, 기존 구성요소를 쉽게 확장해서 재사용한다. 객체지향의 추상화의 ..
-
[Clean Code] 깨끗한 코드, 의미 있는 이름Dev/정리 2022. 5. 14. 21:22
나쁜 코드란? - 성능이 나쁜 코드 - 의미가 모호한 코드 - 중복된 코드 나쁜 코드가 나쁜 이유 - 깨진 유리창 법칙 나쁜 코드는 깨진 유리창처럼 계속 나쁜 코드가 만들어지도록 한다. - 생산성 저하 나쁜 코드는 생산성을 저하 시킨다. - 새로운 시스템을 만들어야한다 현시스템을 유지보수하며, 대체할 새로운 시스템 개발은 현실적으로 매우 어렵다. 클린 코드 - 성능이 좋은 코드 - 의미가 명확한 코드(= 가독성이 좋은 코드) - 중복이 제거된 코드 -> 명료한 코드 간단한 코드 - 모든 테스트를 통과한다. - 중복이 없다. - 시스템 내 모든 설계 아이디어를 표현한다. - 클래스, 메서드, 함수 등을 최대한 줄인다. 의미 있는 이름 짓기 - 의도를 분명히 밝히기 // 잘못된 변수 int a; String..
-
AWS Error Code: SignatureDoesNotMatch 해결방법삽질모음/에러해결 2022. 5. 2. 19:04
로컬에선 정상적으로 파일 업로드가 되는 것을 확인하였는데, 서버 반영 후 com.amazonaws.services.s3.model.AmazonS3Exception: The request signature we calculated does not match the signature you provided. key를 확인해보라는 오류가 발생하였다. 구글링 해보니 yml에 적혀진 SecretKey 에 / 나 % 가 있으면 인식이 안되는 문제이다. 해결방법 / 나 % 가 없는 SecretKey가 생성될 때 까지 액세스키를 만든 후, yml에 있는 키를 변경해준다.
-
[알고리즘] 최근접 점쌍 찾기Computer Science/Algorithm 2021. 12. 16. 03:06
최근접 점쌍 찾기 2차원 평면상에 있는 N개의 점들 중에서 서로의 거리가 가장 가까운 두 점을 찾는 문제 간단한 방법 모든 상의 거리를 모두 계산하여 가장 가까운 쌍을 찾는 것 시간 복잡도 O(N^2) 정렬을 사용한 방법 합병 정렬 알고리즘에서 사용하는 분할-정복 기법을 사용 시간 복잡도 O(N log N) 분할-정복 기법을 사용한 최근접 점쌍 찾기 알고리즘 X 좌표 값을 사용해 점을 정렬한 다음 반으로 나눔 가장 가까운 쌍을 이루는 두 점은 모두 한쪽 절반에 있든지 아니면 하나는 한쪽 절반에, 다른 하나는 나머지 절반에 있음 가장 가까운 쌍을 이루는 두 점이 분할선(dividing line)을 가로지르는 경우 효과적으로 검사할 수 있는 방법이 필요 알고리즘 동작 과정 동작 과정을 표로 나타 낼 수도 있..
-
[알고리즘] 그라함 스캔 알고리즘Computer Science/Algorithm 2021. 12. 15. 12:28
그라함 스캔 알고리즘 1972년 로날드 그라함에 의해 개발된 알고리즘 주어진 점 집합으로부터 단순 폐쇄 다각형을 만든 다음, y좌표 값이 가장 작은 점부터 시작해 다각형의 꼭지점들을 순서대로 방문하면서 볼록 껍질에 포함될지 여부를 검사하는 것이다. 볼록 껍질에 포함되는지 검사 방법 p[1], p[2], ..., p[M]이 부분 볼록 껍질이라 하고 새로운 점 p[i]를 추가하고자 할 때, ccw(p[M], p[M-1], p[i])≥ 0 이면 p[M]을 제거 p[M-1], p[M], p[i]가 우회전이면, p[M]을 제거하고, 좌회전이면 p[i]를 포함한다. 그라함 스캔 알고리즘 동작 과정 먼저 y 점이 가장 작은 점을 선택한 후, 그 점에서 부터 가장 작은 각도를 만드는 순서대로 번호를 매겨줍니다. 처음 ..
-
[알고리즘] 최적 이진 탐색 트리Computer Science/Algorithm 2021. 12. 14. 20:02
최적 이진 탐색 트리 트리 내의 키와 각 키가 탐색될 확률이 주어져 있을 때, 그 트리의 평균 탐색 비용, 즉 평균 비교 횟수를 계산하고 이를 최소화하는 탐색트리를 구축하는 문제 이진 탐색 트리 루트의 왼쪽 서브트리에 있는 원소의 키 값은 루트보다 작고, 루트의 오른쪽 서브트리에 있는 원소의 카 값은 루트보다 큰 이진 트리 점화식 최적 이진 탐색 트리 구하기 1. A[i, j] 테이블과 k 테이블을 그려줍니다. A테이블 대각선엔, 문제에서 주어진 확률을 K테이블 대각선엔, 순서대로 초기 값을 적어줍니다. 2. 점화식을 이용하여 테이블의 값을 채워줍니다. 3. 이진 탐색 트리 그리기 - k테이블에서 1행 가장 맨 끝 값을 가져옵니다. k[1, 4] = 3 값이 3이기 때문에, 이는 3번 노드가 최상단임을 ..
-
[알고리즘] 스트링 편집 거리Computer Science/Algorithm 2021. 12. 14. 19:19
스트링 편집 거리(string edit distance) 두 스트링의 유사도를 측정하기 위해 사용 Levenshtein distance(LD)라고도 함 원래 스트링을 S, 목표 스트링을 T S를 T로 변환하는 데 필요한 삽입, 삭제, 대치 연산의 최소 비용 편집 거리가 커질수록, 두 스트링의 유사도는 낮아지게 됨 논문이나 보고서의 표절 검사, DNA 염기 서열의 유사도 검사 등에 사용됨 동적 계획법의 적용 스트링 편집 거리 예시를 들어 설명하겠습니다. S = GUMBO T = GAMBOL U -> A 로 교체 L 을 추가 따라서, GUMBO를 GAMBOL로 변경하는 최소 편집 거리는 2임을 알 수 있습니다. 스트링 편집 거리를 구하기 위해선, 간단히 표로 작성하여 구할 수 있습니다. 1. 초기 테이블을 ..