본문 바로가기

프로그래밍

(63)
[이펙티브 자바] 습관적으로 사용하는 Object 메소드 equals의 일반 규약을 지켜 재정의하라 String와 같은 class가 같은지 확인하는 메소드입니다. class에서 equals와 hashcode를 오버라이딩해본 사진이다. hashcode도 오버라이딩하는 이유는 논리적으로 같은 객체라면 같은 hashcode를 반환하기 위해서이다. Speaker의 해시 코드를 재정의 해주지 않으면, 값이 두개가 들어가게 되어 Map의 값이 2개는 일이 벌어지게 된다. hashCode를 재정의할때, Objects.hasCode로 재정의할 수 있다. 하지만, 속도가 상대적으로 더 느리다. 해시코드를 지연 초기화(lazy initialization) 하는 방법 지연초기화를 통해 캐쉬처리하면 유용한데 스레드 안전성까지 고려해야한다. 실제 업무에서는 lombok을 사용하여 @..
[이펙티브 자바] 객체 생성과 파괴(2) 1. Boxing type 대신 Primitive Type을 권장한다. 왼쪽 사진이 Boxing Type으로 계산 했을 경우고 오른쪽이 primitive Type으로 사용하였을 경우이다. 실제 실행 속도를 계산해보면 10배정도의 빠른 실험 결과를 볼 수 있다. Boxing Type을 남용하지 않도록 주의하는 것 뿐만 아니라, 의도치 않은 Auto Boxing을 조심해야한다. 2. UtilClass에서 또한 primitive type을 권장한다. 숫자 타입인지 검증하는 유틸을 만든다고 생각한다면 반환값을 boolean 과 같이 프리미티브 타입을 권장한다. 단, primitive type이 항상 옳은 것은 아니다. price가 null인것과 0은 의미가 다르다. 0은 이벤트 중 0원으로 측정할 수 있는것이고..
[이펙티브 자바] 객체의 생성과 파괴 1. Constructor와 static Factory method의 비교 생성자는 저희가 흔히 알고 있는 방식이 Movie에 있는 값들을 받아 생성하는 식으로 많이 사용한다. static Factory method 방식은 빈 생성자를 만든 후, return 을 해주는 방식을 말하고 있다. 그런데 이게 좋은건가? 라는 생각을 하게 된다. 약간 예제로 설명하게 되면다면, 밑에 같은 상황으로 사용할수 있을것같다. API 에서 받은 Reqeust Parameter 값을 원하는 값으로 변환시킬수 있다. 또한, 파라미터가 한개면 from으로 두개 이상이면 of로 표현한다. static Factory metho를 사용하면 장점들이 있다. 1. 이름을 가질수 있다. 2. Simple하고 명확하게 사용할 수 있다. 3..
Spring으로 비디오 스트리밍 만들어보기 공부를 하다 집중력이 떨어지면 유튜브 보는 것이 요즘 삶의 낙이다. 갑자기 번뜩 생각이 났다. Spring boot로 스트리밍을 만들어 볼까? 첫번째로 생각한 방법은 video 태그에 spring boot statics 경로를 넣는 것이다. 다들 알다 시피, spring boot static은 정적으로 파일을 들을 넣는곳이다. 이런식으로 넣게 되면 포트 설정을 8080 으로 한다고 가정하에 localhost:8080/Dynamite.mp4 를 url에 치게 되면 이런형식으로 동영상이 나오게 된다. 우리가 원하는 건 원하는 위치에 동영상에 띄우게 하는 것이기 때문에 컨트롤러에 url를 넣고 video 태그에서 불러오는 방식으로 진행을 하였다. 컨트롤러를 위처럼 지정해주고 video 태그에서 요청해준다. 그..
[Spring] 스프링 IoC, Bean, DI 정리 IoC (Inverrsion of Control) 일반적인 (의존성에 대한) 제어권: "내가 사용할 의존성은 내가 만든다." 일반적으로 우리가 아는 자바 사용법에서는 객체를 생성하여 사용하는 것이 일반적이다. IoC: "내가 사용할 의존성을 누군가 알아서 주겠지" 스프링에서는 객체를 생성하여 하기 보다는 생성자로 service의 의존성을 받게 된다. 즉, Controller 단에서 객체를 주는게 아닌 Controller의 밖에서 주는 것으로 제어가 역전 되었다라고 표현이 된다. 즉, 의존성을 주는 것이 자신 class가 아닌 다른 곳에서 의존성을 주기 때문에 제어의 역전이라고도 한다. Bean Spring IoC 컨테이너가 관리하는 자바 객체를 빈(Bean)이라는 용어로 부른다. new 로 새로운 객체를..
콜백 지옥 벗어나기 두번 쨰 프로젝트로 맡은 SM 업무에서 수정할 일이 있어 소스 코드를 보니 밑에 와 같이 나왔다. 아무래도 오래된 프로젝트이고, 초급 개발자 분들이 지나갔던 만큼 하드 코딩으로 된 부분도 많았고, 다른 클래스를 갔다가 또 거기서 다른 클래스를 가는 결합도과 굉장히 큰 프로세스 되어 있었다. * 현재 프로젝트는 자바를 연결해서 하는것은 거의 없었고 mybatis.xml 파일에 직접 찾아 SQL을 쓰는 프로젝트라고 알아주셨으면 좋겠다. 거의 모든 작업은 프론트에서 진행되며, 회사 내부망에서만 사이트가 허용하는 프로젝트입니다. 소스가 너무 길고 depth가 깊어 뭐가 뭔지 알기 힘들었다. 수정은 할 수 있었지만 소스를 파악하는 시간이 많이 걸렸다. 혹시나 잘못 수정하게 되면 기존의 잘 작동되었던게 안될까봐 겁..
tab 순서 좀 변경해주세요 제가 만드는 프로젝트는 자동차 회사의 부품관련하여 국내 공장에서 쓸 프로젝트였다. 일반 사용자도 있겠지만 그렇지 않은 분도 사용하는 시스템이여서 수정해야 하는 부분이 있었다. 예시로 쿠팡 로그인 하는 페이지로 예를 들것입니다. 보통 사용자가 보기에는 id와 password를 입력하면 들어가는 일반적인 로그인 창으로 볼 수 있지만, 수정 해야 하는 부분이 있었다. 마우스가 아닌 tab 키를 눌러 사용하는 분들을 위해 입력 순서대로 focus가 이동이 되어야 접근성이 좋다는 평가를 받는다. 크롬, 파이어폭스 에서는 어느정도 지원을 받지만, 콘텐츠 종류에 따라 기본적으로 지원되는 게 있고 안되는게 있고 순서도 엉망이라 좋은 화면이라고는 표현할 수 없다. 그래서 tabIndex을 넣어 순서를 넣어주는것이였다. ..
[이펙티브 자바/ Effective Java] - 생성자 대신 정적 팩터리 메서드를 고려하라 클라이언트가 클래스의 인스턴스를 얻는 전통적인 수단은 public 생성자이다. 하지만 모든 프로그래머가 꼭 알아둬야 할 기법이 하나 더 있다. 클래스는 생성자와 별도로 정적 팩터리 메서드를 제공할 수 있다. 원래는 valueOf 사용하기 위해서는 new valueOf 와 같은 객체 생성이 필요하지만 static 메서드를 사용하면 생성없이 사용할 수 있다. 기존의 방법으로는 class객체를 선언하고 안에있는 메서드를 호출하는 식이라 불편함을 느낄수 있다. 하지만 static을 사용할 정적 메서드는 장점과 단점 모두 존재하기 때문에 잘 이해하고 사용해야 한다. 먼저 좋은 점으로는 ( 장점 ) 이름을 가질 수 있다. 생성자에 넘기는 매개변수와 생성자 자체만으로는 반환될 객체의 특성을 제대로 설명하지 못한다. ..