전체 글

전체 글

    Write a test code right now

    테스트를 작성을 망설이는 분들께 올립니다. Needs of Developers 우리 개발자들의 Needs 가 무엇인지 살펴봅시다. 가독성이 좋은 코드를 추구한다. 훌륭한 설계를 추구한다. OOP 의 원칙을 잘 지킨 유지보수성과 확장성이 좋은 코드를 추구한다. 한 문장으로 정리해볼까요? 가독성이 좋으며 유지보수성과 확장성이 좋은 코드를 작성하는 것. How 개발자의 니즈를 충족시키기 위해 어떤 노력을 해야 할까요? OOP 를 공부한다. 클린 코드를 공부한다. DDD 를 공부한다. 코드 리뷰를 한다. 등등 ... Needs of Company 회사의 Needs 는 무엇일까요? 수익 왜 갑자기 회사의 니즈가 나왔는지 아래에서 살펴보시죠. Startup and Agile 대부분의 스타트업들은 Agile(민첩한)..

    동시성 이슈(Concurrency Issue)

    Concurrency 주말에(2022-03-19. Sat) [OKKY - 스프링 쓰레드 ...] 에 관한 질문에 답변을 하면서, Spring 을 사용하면서 꼭 알아야할 동시성 이슈에 대해서 공유하고자 합니다. 동시성 이슈란? 동시성 이슈란 여러 스레드가 동시에 같은 인스턴스의 필드 값을 변경하면서 발생하는 문제를 의미합니다. 핵심은 멀티 스레드와 변경 입니다. WAS 와 멀티 스레드 Tomcat 과 같은 서블릿을 지원하는 WAS 는 Servlet Container 이며, 멀티 스레드와 관련된 처리를 지원합니다. 따라서, 개발자는 멀티 스레드 관련 코드를 신경 쓰지 않고, Single Thread Programming 을 하듯 코드를 작성하면 됩니다. 하지만, 멀티 스레드 환경에서 주의 하면서 코딩해야하는..

    POJO, JavaBean, Entity, VO, DTO

    다양한 객체 디자인 POJO, JavaBean, Entity, VO, DTO 에 대해서 배워보자. POJO(Plain Old Java Object) 정의 특정 프레임워크에 대한 참조가 없는 간단한 유형 public class EmployeePojo { public String firstName; public String lastName; private LocalDate startDate; public EmployeePojo(String firstName, String lastName, LocalDate startDate) { this.firstName = firstName; this.lastName = lastName; this.startDate = startDate; } public String nam..

    TDD with Agile

    TDD with Agile TDD 란 무엇일까? TDD 는 기능 구현에 중점을 둔 테스트 방법론이다. TDD 는 왜 필요할까? 이름만 들으면 알만한 인하우스 회사들은 대부분 TDD 를 하지 않을까 생각한다. 또한 스타트업도 마찬가지일 것이다. 한번 이런 생각을 해보면 좋을 것 같다. 왜 유명한 회사들, 개발 문화가 좋은 회사들은 TDD 를 하는 것일까? TDD 는 애자일 선언문 원칙과 익스트림 프로그래밍에 뿌리를 둔다. 애자일 선언문 애자일 선언문을 보면 개인과 상호작용, 작동하는 소프트웨어, 고객과의 협력, 변화에 대응하기를 더 높은 가치로 두고있다. 다시 돌아와서, 스타트업에서 왜 Agile 한 문화를 선택하고 있는지 생각해 보자. Agile 은 민첩한 이라는 의미를 가지고 있다. 스타트업은 매 순간..

    Java Stream 기초

    Java Stream 기초 Stream 은 데이터 컬렉션 반복을 멋지게 처리하는 기능이다. Collection vs Stream Collection 의 주제는 데이터이고, Stream 은 계산이다. 컬렉션은 Iterator 와 같은 외부 반복자를 직접 이용해야하며, 스트림은 내부 반복자를 사용한다. Loop vs Stream Stream 의 장점 Stream 이 Loop 에 비해 갖는 장점이 무엇일까? 내가 생각했을때의 가장 큰 장점 중 하나는 표현력이 좋다는 것이다. 표현력이 좋다는 것은 가독성이 좋다는 것을 의미한다. // 내부 반복 사용 : WHAT 중심 Employee topDeveloper = employees.stream() .filter(employee -> "Developer".equals..

    자바 어노테이션

    Java Annotation 어노테이션은 Java SE 5 에서 Generics 와 함께 등장하였다. 어노테이션의 사전적 의미는 주석이지만, 자바 언어에서 사용하는 주석(//, /*, /**) 과는 다르다. 주석의 등장 배경 어노테이션의 사전적 의미인 주석의 등장 배경을 먼저 보자. 주석이 없던 시절에는, 소스 코드와 문서화가 별도로 진행되었다. 따라서, 소스 코드가 변경되면 그에 알맞은 문서를 찾아서 변경해줘야 했었다. 자고로 개발자는 귀찮은 것을 매우 싫어한다. 따라서, 소스 코드만 변경하고 문서를 변경하지 않는 일이 자주 발생하였고, 코드와 문서의 버전 불일치 문제를 해결하고자 탄생하게 되었다. 어노테이션의 등장 배경 어노테이션이 등장하기 전에는 프로그램 설정 파일들이 XML 형태로 작성되었다. 컴..

    2020 카카오 신입 공채 : 문자열 압축

    문자열 압축 프로그래머스 문자열 압축 해설 aabbaccc -> 2a2ba3c s 의 길이는 1

    이것이 코딩 테스트다 : 편집 거리

    편집 거리 책 이것이 코딩 테스트다의 편집 거리 해설 ✔ 두 문자가 같은 경우 : dp[i][j] = dp[i - 1][j - 1] ✔ 두 문자가 다른 경우 : dp[i][j] = 1 + MIN(dp[i][j - 1], dp[i - 1][j], dp[i - 1][j - 1]) 두 문자가 같은 경우 점화식이 위 처럼 되는 이유는 다음과 같다. 두 번째 그림에서 3번을 예시로 설명하겠다. S 를 가지고 SA 를 만들기 위한 최소 편집 거리에 교체 연산을 추가로 실시 즉, SAU -> SAT 로 만들기 위한 것이라고 생각하면 된다. * DP[2][3] = DP[1][2] + 교체 연산 근데 만약에 U 랑 T 문자가 같다고하면 교체 연산을 추가로 할 필요가 없기 때문에 왼쪽 위의 값을 그대로 대입해주면 된다. ..