전체 글
-
중첩클래스의 쓰임 > 이펙티브 자바 아이템 24BackEnd/자바 2020. 12. 26. 13:25
중첩클래스에는 정적 멤버 클래스, 비정적 멤버 클래스,익명클래스,지역클래스 네가지이다. 첫번째를 제외한 나머지는 내부클래스에 해당한다. 비정적 멤버 클래스의 인스턴스는 바깐 클래스의 인스턴스와 암묵적으로 연결된다. 그래서 비정적 멤버 클래스의 인스턴스 메서드에서 정규화된 this 를 사용해 바깥 인스턴스의 메서드를 호출하거나 바깥 인스턴스의 참조를 가져올 수 있다. 정규화된 this ? 클래스명.this 바깥클래스의 이름을 명시하는 용법 바깥 클래스로의 숨은 외부 참조를 갖는 것은 시간과 공간이 소비되고, GC가 바깥클래스의 인스턴스를 수거하지 못해 메모리 누수가 생길 수 있다. 비정적 멤버 클래스는 바깥 인스턴스 없이는 생성할 수 없다. 드물게 직접 바깥 인스턴스 클래스.new 내부클래스를 호출해 수동..
-
상속 , dynamic dispatchBackEnd/자바 2020. 12. 26. 10:46
※ 상속 상속 : 상위클래스의 변수, 메서드들을 하위 클래스가 물려받는 것 이미 존재하는 클래스를 기반으로 새로운 클래스를 작성하며 코드를 재사용할 수 있고, 같은 메서드라도 각 하위 클래스에서 재정의(Overriding) 해 객체 지향에 중요한 부분인 다형성을 구현한다. extends 키워드를 통해 클래스를 상속할 수 있으며, 복잡성을 줄이고 코드의 간결함을 위해 단일 상속만 가능하다. //single class Animal{ void eat(){System.out.println("eating..."); } } class Dog extends Animal{ void bark(){ System.out.println("barking...");} } //Multi Level class Animal{ void..
-
프록시 패턴BackEnd/자바 2020. 12. 20. 20:05
실제 기능을 수행하는 객체 Real Object 대신 가상의 객체 Proxy Object를 사용해 로직의 흐름을 제어하는 디자인 패턴. 원래 하려던 기능을 수행하며 그외의 부가적인 작업(로깅, 인증, 네트워크 통신 등)을 수행하기에 좋다. 비용이 많이 드는 연산(DB 쿼리, 대용량 텍스트 파일 등)을 실제로 필요한 시점에 수행할 수 있다. 사용자 입장에서는 프록시 객체나 실제 객체나 사용법은 유사하므로 사용성이 좋다. 만약 책을 대여하고 반납하는 메서드에서 다른 부가 작업을 수행하고 싶다고 하면, BookService 인터페이스를 이용해 정적인 방식, 동적인 방식으로 프록시 클래스를 생성할 수 있다. public class Book { private String title; public String ge..
-
JVM, JRE, JDK, 메모리BackEnd/자바 2020. 12. 14. 21:34
일반 프로그램은 운영체제에서 바로 실행되는 반면, 자바 프로그램은 JVM 을 거쳐 실행된다. JVM 이란 (Java Virtual Machine) 자바 가상 머신으로 자바 바이트 코드를 인터프리터와 JIT 컴파일러를 이용해 OS 에 특화된 코드로 변환한다. 바이트 코드를 실행하는 표준의 의미 JAVA SE 바이트 코드를 실행하는 표준을 구현한 구현체도 JVM이라는 용어를 사용한다. Oracle, Azul, Amazon-corretto, AdoptOpenJDK 등 벤더에 따라 구현이 다르다. 바이트 코드 자바 컴파일을 하면 .class 파일이 나오고 .class 안에 있는 코드가 바이트 코드다. 이 바이트코드는 실제 실행될 때 다시 한번 기계가 읽을 수 있는 형태(native code)로 interpret..
-
자바 SOLID 원칙BackEnd/자바 2020. 12. 12. 16:05
S : Single Responsibility Principle 단일 책임 원칙 - 단 하나의 책임 , 책임이 많아지면 클래스 내부 함수끼리 강한 결합이 발생할 가능성이 많고, 이는 유지보수 비용의 증가로 이어진다. O : Open-Closed Principle - 코드의 변경에는 폐쇄적, 수정과 확장에는 개방적 , 다형성 L : 리스코프 치환원칙 - 자식 클래스는 부모클래스에서 가능한 행위를 수행할 수 있어야 한다. I : Interface Segregation Principle 인터페이스 분리원칙 - 하나의 일반적인 인터페이스보다 여러개의 구체적인 인터페이스가 낫다. D : Dependency Inversion Principle 의존 역전 원칙 - 의존관계를 맺을 때, 변화하기 쉬운 것보단 변화가 어..
-
트랜젝션BackEnd/스프링 2020. 12. 6. 20:45
트랜젝션 설정 1. tx 네임스페이스를 이용한 트랜잭션 설정 tx 네임스페이스를 통해 트랜젝션 처리된 프록시 객체를 만들어 적용한다. 2. @Transactional 어노테이션을 이용한 설정 @Transactional 은 스프링 AOP를 기반하고 있는데 스프링 AOP 는 다이나믹 프록시를 기반으로 동작한다. 트랜젝션의 전파 트랜젝션 설정이 된 메서드 내에서 또 다른 트랜젝션이 설정된 메서드를 호출할 때 트랜젝션의 전파 방식을 선택할 수 있다. 예를 들면 아래 코드에서 insertAndPlusCount() 메소드 내 insert() 가 성공, plusCount() 가 실패할 때 트랜젝션을 어떻게 할 것인지 정할 수 있다. @Transactional public int insert(){ ... } @Tran..
-
messageConverterBackEnd/스프링 2020. 11. 22. 18:38
ajax 로 응답을 주고 받을 때 json 설정은 MappingJackson2HttpMessageConverter 를 이용해서 해오다, 같은 로직을 처리하지만 페이지마다 데이터형식을 다르게 보낼 때 메서드를 나누어 만들지 않도록 ContentNegotiatingViewResolver를 이용할 수 있다. ContentNegotiatingViewResolver 은 하나의 url 로 다양한 contentType 으로 응답할 수 있도록 한다. contentNegotiaingViewResolever 는 아래와 같은 사항들을 고려해 return 형식을 결정한다. 1. URL 뒤에 붙는 확장자 2. URL의 특정 파라미터에 설정되는 값 3. Request Header 중 Accept 항목에 설정되어 있는 값 4. 1..