본문 바로가기 메뉴 바로가기

How to be awesome

프로필사진
  • 글쓰기
  • 관리
  • 태그
  • 방명록
  • RSS

How to be awesome

검색하기 폼
  • 분류 전체보기 (145)
    • Java (32)
    • Algorithm (26)
    • JSP & Servlet (0)
    • Spring Framework (14)
    • Git & Github (6)
    • Database (11)
    • Linux (3)
    • Design Pattern (12)
    • JPA (7)
    • Project (14)
    • JavaScript (4)
    • Development (10)
    • HTML&CSS (1)
    • AWS (5)
  • 방명록

분류 전체보기 (145)
String은 항상 StringBuilder로 변환될까?

JDK 1.5 버전 이후부터, String의 + 연산은 컴파일시에 StringBuilder를 사용하도록 자동변환되어 성능 최적화가 이뤄진다고 알려져 있습니다. 그러나 String은 항상 StringBuilder로 변환되지 않습니다. String 연산을 수행하는 몇가지의 예제를 준비했습니다. String을 연산하는 소스코드를 컴파일하고, 다시 디컴파일하여 성능최적화가 이뤄졌는지 확인해보겠습니다. (디컴파일러는 JAD를 사용하였으며, 예제코드들은 "012"라는 문자열을 이어붙여서 만드는 작업을 수행합니다.) 예제1) 한줄로 모두 선언한 경우 //컴파일 전 소스파일 String str1 = "0" + "1" + "2"; //컴파일 이 후, 디컴파일 한 소스파일 String str1 = "012"; 한줄로 모두..

Java 2020. 4. 1. 22:12
적절한 메서드 위치에 대한 고찰

개발은 '데이터'를 할당하는 작업이다. 어떤 개발영역이든 '데이터'를 다루고 할당하는 작업을 한다. 여기서 말하는 '데이터'는 DB에 저장되는 값이 될 수도 있고, 사용자에게 적절하게 반환되어서 보여지는 값이 될 수도 있다. 우리가 만든 코드들은 결국 데이터를 할당하는 작업을 한다. 다시말해 (낯선)코드를 읽고 파악하는 과정은 데이터가 어떤식으로 다루어지고 변경되어지고 할당되어지는지 확인하는 과정이다. 코드를 읽어나가는 사람 입장에서 데이터들이 어떤방식으로 할당되어지는지 예측할 수 없다면 그 코드는 읽기 좋은 코드라고 말할 수 없다. 데이터가 예측되는 메서드를 만들자. DB 값을 변경하기 위한 데이터를 할당하는 작업. 사용자에게 보여주기 위한 데이터를 할당하는 작업. 이 정도 수준의 할당은 아주 낮은 추..

Design Pattern 2020. 3. 26. 22:36
다형성을 이용한 클린코드 지향하기

GoogleTechTalks의 "The Clean Code Talks -- Inheritance, Polymorphism, & Testing" 을 참고하여 정리하고 각색하였습니다. https://www.youtube.com/watch?v=4F72VULWFvc if문을 제거합시다. 왜 if문을 제거해야 할까요? (이 포스팅에서는 switch문을 포함한 모든 조건문을 if문이라고 칭하겠습니다.) if 문은 코드의 가독성을 저해시킵니다. if 문은 테스트를 불편하게 만듭니다. if 문은 유지보수하기 어렵게 만듭니다. 모든 if문을 제거할 수는 없습니다. 다만, 대부분의 if문은 다형성을 이용하여서 제거 될 수 있습니다. 다형성을 활용하여 제거 할 수 있는 if문은 2가지 경우가 있습니다. 객체가 다른 상태에 ..

Design Pattern 2020. 2. 16. 14:28
LSP(리스코프 치환 원칙) - 오리와 오리장난감은 진짜 LSP 위반일까?

LSP(Liskov Substitution Principle - 리스코프 치환 원칙) 서브타입은 언제나 자신이 기반타입 (base type) (상위 타입) 으로 교체할 수 있어야 한다. S-O-L-I-D로 유명한 다섯가지 객체지향 설계 원칙중에서 LSP는 '상속'에 관한 지침을 이야기 합니다. 오리와 오리장난감 LSP를 설명하는 유명한 예제로 오리와 오리장난감이 있습니다. 오리와 오리장난감이 유사한 점이 있다고 오리장난감이 오리를 상속받게 되면 LSP를 위반하게 된다는 예제입니다. 왜냐하면 오리장난감은 배터리가 있어야 제대로된 동작을 하기 떄문입니다. 만약 오리를 기대하던 클라이언트(사용자)에게 오리 대신 오리장난감을 쥐어준다면, 클라이언트는 자신이 원하는 행동을 기대하기 어렵습니다. 오리장난감은 기반타..

Design Pattern 2019. 11. 17. 18:49
스프링 부트에서 CORS 문제 해결하기

방법1. 특정 컨트롤러나 요청에 대해서 Cross Origin 허용하기 @CrossOrigin 애노테이션 사용하기 @RestController @CrossOrigin(origins = "http://localhost:63342") //해당 origin 승인하기 @RequestMapping("/api/books") public class VocaTestApiController { ... } 방법2. 전역설정을 통해서 Cross Origin 허용하기 WebMvcConfigurer의 addCorsMappings 메소드 활용하기 import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.con..

Spring Framework 2019. 10. 19. 15:31
스프링 부트로 GraphQL 시작하기

※이 포스팅은 https://www.baeldung.com/spring-graphql 을 번역하고, 예제 코드와 내용을 각색한 포스팅입니다. 1. 개요 GraphQL은 REST API의 대안으로 Facebook에서 제시한 새로운 Web API 컨셉입니다. 이 포스팅에서는 스프링 부트(Spring Boot)를 사용하여 웹 애플리케이션에 GraphQL서버를 구축하는 방법을 소개하겠습니다. (개인적으로 사용한 예제는 스프링 부트 2.1.8버전, 자바 8버전, JPA를 사용하였습니다.) 2. GraphQL이 뭐지? 기존 REST API는 다양한 HTTP Method가 서버에 존재하는 리소스(Resource)와 대응되어서 동작합니다. 이는 클라이언트의 요청사항과 리소스(Resource)가 잘 들어맞지 않는다면 (..

Spring Framework 2019. 9. 26. 00:11
EnumSet이 new 연산자를 사용하지 않는 이유

EnumSet을 사용하는 방법 EnumSet은 다른 컬렉션들과 다르게 new 연산자 사용이 불가능합니다. EnumSet은 아래와 같은 방법으로 사용합니다. //DayOfWeek라는 Enum을 다루는 Set으로 비어있는 Set을 반환 EnumSet enumSet1 = EnumSet.noneOf(DayOfWeek.class); //모든 DayOfWeek Enum의 값을 담고있는 Set을 반환 EnumSet enumSet2 = EnumSet.allOf(DayOfWeek.class); 정적 팩토리 메소드(static factory method)만으로 EnumSet의 구현 객체를 반환받을 수 있습니다. 왜 이렇게 만든 걸까요? EnumSet 내부를 살펴보자 (아래 코드는 설명을 위해서 간소화한 코드입니다.) pu..

Java 2019. 9. 12. 12:00
VOCATEST 1. JPA가 만들어주는 SQL 출력문 확인하고 리팩토링하기

SQL 출력문을 반드시 확인하자. JPA에 익숙하지 않을때는 아무래도 구현하는 것에 더 집중하면서 실제 SQL 쿼리문이 어떤식으로 나오게 되는지 유심히 보지 못한 것이 사실이다. 이번 프로젝트에는 꼼꼼히 볼려고 노력해봤는데 SQL문을 확인해면 크게 2가지 문제가 있었다. 문제 1. 불필요한 Outer Join (optional 속성을 반드시 명시하자) 관계를 맞는 엔티티간의 관계가 반드시 존재하는지, 혹은 선택적인지에 따라 실제 두 테이블(도메인)을 조인하는 전략이 달라지는데, 만약 관계가 반드시 존재한다면 (= 테이블상의 FK가 반드시 존재한다면), optional 속성을 통해서 이를 명시해야한다. 그렇지 않다면 null인 경우도 대비해야 하기 떄문에 outer join이 발생한다. (+ 추가적으로 @..

Project 2019. 8. 18. 16:05
이전 1 2 3 4 5 6 7 ··· 19 다음
이전 다음

Blog is powered by Tistory / Designed by Tistory

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.