Java & Spring
-
1장 오브젝트와 의존관계 (1.1 초난감 DAO ~ 1.2 DAO의 분리)Java & Spring/토비의 스프링 3.1 2021. 5. 13. 17:45
1장 오브젝트와 의존관계 스프링의 핵심 철학 : 객체지향 프로그래밍 객체의 라이프 사이클과 관계에 집중 디자인 패턴, 리팩토링, 단위 테스트 등과 같은 설계와 지식을 요구 1.1 초난감 DAO 두 가지 이상의 관심을 포함하고 있거나, 중복되는 코드를 가지고 있는 경우 유지 / 보수에 어려움을 겪는다. 하기 예시 코드를 보면서 어떤 문제점이 있는지 생각해보자. // ... import statement pubilc class UserDao { public void add(User user) throws ClassNotFoundException, SQLException { Class.forName("com.mysql.jdbc.Driver"); Connection c = DriverManger.getConne..
-
xml 설정과 Java Config 설정Java & Spring/기본 개념 정리 2021. 4. 9. 01:19
두 설정의 비교를 상세하게 나열하는 글이 아닙니다. 혹여나, 정확한 지식을 얻고자 하신분들께 죄송합니다. 프로젝트를 하면서 느낀점 java config 설정을 읽어오도록 xml에 설정해줬는데, 404를 처리하기 위해 error page 정의 또한 xml에서 했더니, 모든 404 요청이 error page로 옮겨졌다. 현재 진행하는 프로젝트는 일반 View Controller와 API Controller를 혼합한 서버의 형태인데, API Controller 에서는 못찾는 리소스에 대해서 JSON 형식으로 응답해주기를 바랬다. nohandlerfoundexception을 정의해서 구분해주고자 했으나, Bean으로 등록하는 방법과 xml에서 noHandlerException을 true로 설정해도 뱉어주지 않았..
-
자바 참조 유형 (Strong, Soft, Weak, Phantom Reference)Java & Spring/자바 2021. 2. 28. 22:54
자바 참조 유형 강한 참조(Strong Reference) 일반적으로 new를 통해서 객체를 생성하게 되면 생기게 되는 참조. 강한 참조를 통해 참조되고 있는 객체는 가비지 컬렉션의 대상에서 제외된다. 소프트 참조(Soft Reference) java.lang.ref.SoftReference 객체를 참조하는 경우가 SoftReference 객체만 존재하면, GC의 대상이 됨 일반적으로는 메모리 여유에 따라 GC의 대상 여부가 결정 메모리 여유가 충분하면 GC가 수행되더라도 수거되지 않는다. JVM의 메모리가 부족하다면(Out Of Memory에 가깝다면) 힙 영역에서 제거된다. 약한 참조(Weak Reference) java.lang.ref.WeakReference GC가 발생하면 무조건 수거됨 GC의 ..
-
Checked Exception vs Unchecked ExceptionJava & Spring/자바 2021. 2. 28. 22:24
Exception과 Error An exception is represented by an instance of the class Throwable (a direct subclass of Object) or one of its subclasses. Throwable and all its subclasses are, collectively, the exception classes. (subclass of Throwable must not be generic) The classes Exception and Error are direct subclasses of Throwable. Exception is the superclass of all the exceptions from which ordinary pr..
-
Spring Boot 롬복 및 테스트 트러블 슈팅Java & Spring/기타 2021. 2. 15. 00:07
lombok Gradle 설정 이슈 Gradle 버전이 업데이트 되면서 설정이 조금 변했다. Lombok Gradle용 플러그인을 사용하는 설정 plugins { ... id "io.freefair.lombok" version "5.3.0" // 롬복 Gradle plugin 설정 } 플러그인을 사용하지 않는 설정 repositories { mavenCentral() } dependencies { compileOnly 'org.projectlombok:lombok:1.18.16' annotationProcessor 'org.projectlombok:lombok:1.18.16' testCompileOnly 'org.projectlombok:lombok:1.18.16' testAnnotationProcess..
-
Spring IoC/DIJava & Spring/기본 개념 정리 2021. 1. 30. 00:11
Spring IoC/DI 컨테이너 컨테이너 인스턴스의 생명주기를 관리 생성된 인스턴스에게 추가 기능을 제공 ex ) WAS의 Servlet 컨테이너 IoC(Inversion of Control) 제어의 역전 컨테이너가 개발자(코드) 대신 오브젝트의 제어권을 가지고 있어서 제어의 역전이라함 ex) 서블릿 클래스는 개발자가 만들지만, 서블릿을 메소드에 맞게 호출하는 것은 WAS DI(Dependency Injection) 의존성 주입 클래스 사이의 의존 관계를 Bean 설정 정보를 바탕으로 컨테이너가 자동으로 연결 어노테이션을 통해 사용 코드 예시 // 미적용 사례 class 엔진 { } class 자동차 { 엔진 v5 = new 엔진(); } // 적용 사례 @Component class 엔진 { } @C..
-
String vs (StringBuilder vs StringBuffer) (JAVA)Java & Spring/자바 2020. 10. 20. 20:35
StringBuffer vs StringBuilder (vs String) String 불변(immutable)의 속성을 가짐 (StringBuilder와 StringBuffer는 mutable) string을 더하기 연산(+)을 하면 새로운 메모리 영역을 가리키게 변경 더해지기 전 기존 문자열은 나중에 GC에 의해 사라짐 즉, 새로운 String 인스턴스가 생성되는 것 StringBuilder vs StringBuffer 가장 큰 차이점은 동기화(Synchronized)의 유무이다. StringBuilder 성능은 StringBuffer보다 좋지만, 동기화를 지원하지 않기 때문에, 싱글 쓰레드 환경에서 활용하는 것이 좋음 StringBuffer 동기화(Synchronized)를 지원하여 멀티 쓰레드 환..
-
Final 키워드 (JAVA)Java & Spring/자바 2020. 10. 20. 20:34
final keyword class, method, 변수 앞에 final을 선언하여 각각의 특징을 갖는다. final class => 다른 클래스에서 상속 불가 final method => 다른 메소드에서 오버라이딩 불가 final variable => immutable 상수 값으로 선언 ~> 새로 할당할 수 없는 변수 finally try-catch , try-catch-resource 구문을 사용할 때, 정상 작동과 에러 발생의 경우 모두 포함해서 마무리 해야하는 작업이 있을 때, 해당하는 코드를 작성하는 코드블록 finalize() GC에 의해 호출되는 함수 ~> 절대 호출해서는 안되는 함수 Object 클래스에 정의되어 있으며, GC 발생 시점이 불분명하기 때문에 이 메소드가 실행된다는 보장은 없..