본문 바로가기
728x90

Programming79

Java 리팩토링(Refactoring)의 7가지 방법과 예제 리팩토링(Refactoring)은 코드의 품질과 효율성을 유지하기 위한 필수 프로세스입니다. 현재 프로젝트가 legacy 코드를 준용하고 있어서, 리팩토링이 필요합니다. 이 포스팅에서는 코드를 리팩토링 하기 위한 몇 가지 방법과 예시를 다뤄보려고 합니다. 아직은 부족하지만, 새로운 방법을 발견하고 학습할 때마다 지속적으로 업데이트할 생각입니다. 코드 리팩토링 방법과 예제 1. 변수 선언과 초기값을 assign 하는 부분이 분리되어 있을 필요가 없습니다. Before: String ssId = ""; long amt = 0L; ssId = svcDto.getSsId(); amt = svcDto.getAmt().longValue(); After: String ssId = svcDto.getSsId(); lo.. 2023. 3. 24.
[다그닥 기사단] 유물 강화 100레벨 달성에 필요한 유물 수의 기대값 계산하기 다그닥 기사단이라는 게임을 시작했습니다. 다그닥 기사단에는 유물이라는 시스템이 있는데, 보석을 사용해서 유물을 뽑을 수 있고, 유물은 공격력, 체력 등의 능력치를 올릴 수 있습니다. 유물 레벨은 100레벨까지인데, 1레벨 올릴 때마다 유물이 한개 소모되고, 레벨업 성공 확률은 100%에서 1%씩 감소합니다. 처음 레벨업할 때는 유물 한개당 거의 1레벨씩 오르는데, 점점 레벨업 확률이 떨어져서 소모되는 유물 수가 늘어납니다. 그래서 총 몇개의 유물이 있어야 100레벨이 될지 궁금해서 계산해보았습니다. 100레벨에 도달하기 위해 필요한 유물의 수 계산하기 결과만 우선 말씀드리자면, 100레벨이 되기위해 필요한 유물의 수는 573개입니다. 단, 개인의 운에 따라 더 적게 들수도 더 많이 들수도 있습니다. 평균.. 2023. 3. 12.
[리뷰][IT] 프로그래밍 대회에서 배우는 알고리즘 문제해결전략 Cos Pro 1급 시험 준비를 하다가 그래프이론, 유클리드 호제법, 동적 계획법 등 머리 굴려도 답이 안 나오는 문제들에 대해 이론적인 정리가 필요해서 빌렸습니다. 도서관에서 컴퓨터 서적 모여있는 곳에서 서성이다, 알고리즘 관련 서적만 모아놓은 곳에서 발견했습니다. 모르고 빌렸는데, 코딩 테스트나 대회 준비하는 분들이 많이 보는 유명한 책이라더군요 다양한 알고리즘과 문제 해결 방법에 대해 예시를 통해 쉽고 자세하게 풀어주어 놓았습니다. 같은 알고리즘에 대해서 예제도 쉬운 것부터 어려운 것까지 다양하게 나와있어서 도움이 되었습니다. 다 보지 못하고 기한이 다되어서 반납했지만, 사두고 읽을 만한 책입니다. 책은 두 권으로 되어있고, 두 권을 합쳐서 1000페이지가 넘는 큰 책입니다 저자 구종만 출판사 인사.. 2022. 11. 23.
Cos Pro 1급 Java 합격 후기 드디어 끝났다!! 두 달 가까이 준비하며, 포스팅해온 Cos Pro 1급 Java 시험이 오늘 합격하면서 드디어 끝이 났습니다. 지난번 한번 시험에 아쉽게 떨어지면서, 자신감도 없어지고, 공부할수록 벅차다는 생각이 들어서 포기하고 싶었습니다. 심지어 오늘 시험 보면서도 그만두고 나가고 싶은 충동이 있었는데, 잘 이겨내고 합격증을 쥐니 홀가분하네요~^^ 이제 시험 후기를 마지막으로 이 포스팅은 마무리를 지어야겠습니다. 시험 준비 우선 Cos Pro 공식 홈페이지에 있는 샘플 문제로 공부를 했습니다. https://www.ybmit.com/cos_pro/cos_pro_r_test.jsp MOS 공식 사이트, COS 공식 사이트, COS Pro 공식 사이트, DATA 공식 사이트 Microsoft 국제인증 자.. 2022. 11. 19.
Cos Pro 1급 - 샘플 문제 6차 10번 - 급여의 총합 구하기 문제 지문 #10 직업에 아르바이트, 판매사원이 있습니다. 직원들 급여의 총합을 계산하기 위해 아래와 같이 Job, PartTimeJob, SalesJob 클래스를 작성했습니다. Job : Job : 직업을 나타내는 클래스입니다. salary : 직업의 급여를 나타냅니다. 초기 급여는 0입니다. getSalary : 직업의 급여를 return 합니다. PartTimeJob : PartTimeJob : 아르바이트를 나타내는 클래스이며 Job을 상속합니다. workHour : 아르바이트를 한 시간입니다. payPerHour : 아르바이트의 시간 당 급여입니다. getSalary : 아르바이트 급여를 계산하여 return 합니다. SalesJob : SalesJob : 판매사원을 나타내는 클래스이며 Job을 .. 2022. 11. 18.
Cos Pro 1급 - 샘플 문제 6차 9번 - 스택으로 큐 만들기 문제 지문 #9 스택 두 개를 이용해 Queue 자료구조를 만들었을 때, Queue 자료 구조의 pop(또는 dequeue) 메서드를 구현하려 합니다. Queue란 먼저 삽입한 데이터를 먼저 빼내는 자료구조를 뜻합니다. pop 메서드를 만들기 위해 다음과 같이 프로그램 구조를 작성했습니다. 1. 스택2가 비었다면 스택1에 아무것도 남지 않을때까지 스택1에서 pop한 값을 스택2에 push 한다. 2. 스택2에서 pop한 값을 리턴한다. 두 ArrayList stack1, stack2가 매개변수로 주어질 때, 두 ArrayList를 스택으로 이용해 Queue 자료 구조의 pop 메서드를 구현하려 합니다. 위 구조를 참고하여 코드가 올바르게 동작할 수 있도록 빈칸에 주어진 func_a, func_b, fun.. 2022. 11. 18.
Cos Pro 1급 - 샘플 문제 6차 8번 - 지그재그 수열 구하기 문제 지문 #8 수열 S가 주어질 때, 이 수열의 연속된 부분 수열 중 지그재그 수열 길이의 최댓값을 구하려 합니다. 지그재그 수열이란 첫 번째 원소부터 인접한 원소의 차이가 증가 → 감소 → 증가 → 감소... 혹은 감소 → 증가 → 감소 → 증가... 순으로 나타나는 수열을 말합니다. 단, 수열의 길이는 3 이상이어야 합니다. 예를 들어 수열이 [ 2, 5, 7, 3, 4, 6, 1, 8, 9]인 경우, 연속된 부분 수열 [5, 7, 3, 4]가 부분 수열 중 가장 긴 지그재그 수열이 됩니다. 부분 수열 중 가장 긴 지그재그 수열의 길이를 구하기 위해 다음과 같이 프로그램 구조를 작성했습니다. 1. 각 숫자가 바로 이전 숫자보다 증가했는지, 혹은 감소했는지 표시한 배열을 만듭니다. 1-1. "증가"는.. 2022. 11. 18.
Cos Pro 1급 - 샘플 문제 6차 7번 - Up and Down 게임하기 문제 지문 #7 UP AND DOWN 게임은 다음과 같은 규칙에 따라 진행하는 게임입니다. 먼저 출제자가 1 이상 ~ K 이하인 자연수 중 하나를 마음속으로 생각합니다. 게임 참가자는 1 이상 ~ K 이하인 자연수 중 아무거나 하나를 말합니다. 만약, 참가자가 말한 숫자가 출제자가 생각한 숫자보다 작다면 출제자는 "UP"이라고 말합니다. 만약, 참가자가 말한 숫자가 출제자가 생각한 숫자보다 크다면 출제자는 "DOWN"이라고 말합니다. 참가자는 출제자가 말하는 "UP", "DOWN" 힌트를 잘 활용해서 출제자가 처음에 생각한 숫자를 맞추면 됩니다. 출제자가 처음에 생각할 수 있는 자연수 범위 K, 게임 참가자가 말한 숫자가 순서대로 담긴 배열 numbers, 게임 출제자가 참가자가 말한 각 숫자에 대해 답.. 2022. 11. 18.
Cos Pro 1급 - 샘플 문제 6차 6번 - 만났을 때 최대가 되게 종이접기 문제 지문 #6 4 x 4 크기인 정사각형 종이가 1 x 1 크기인 격자 칸으로 나누어져 있습니다. 이 종이를 가로축 혹은 세로축에 평행한 격자 선을 따라 한 번 접었을 때, 만나는 격자 칸에 적힌 숫자의 합이 최대가 되도록 하려 합니다. 종이를 접을 때는 만나는 격자 칸이 정확히 일치하도록 해야 합니다. 예를 들어 다음과 같이 4 x 4 크기인 종이가 있을 때, 종이는 점선 중 하나를 따라서 접을 수 있습니다. 이때, 붉은색 점선을 따라 종이를 접으면 36과 19가 적힌 칸이 정확히 만납니다. 두 숫자의 합은 55이며, 이때가 최댓값입니다. 4 x 4 크기인 정사각형 종이의 각 격자 칸에 적힌 숫자가 담긴 배열 grid가 매개변수로 주어질 때, 종이를 접었을 때 만나게 되는 격자 칸에 적힌 숫자의 합 .. 2022. 11. 18.
728x90