분류 전체보기 102

[Spring] 예제로 보는 Resources

1. The Resource Interface Spring의 Resource 인터페이스는 Resource에 대한 접근을 추상화하기 위한 인터페이스이다. public interface Resource extends InputStreamSource { //리소스가 있는지 없는지 확인 boolean exists(); //Stream이 열렸는지 체크 boolean isOpen(); //해당 리소스의 url을 가져온다 URL getURL() throws IOException; //해당 리소스의 파일을 가져온다 File getFile() throws IOException; //상대 경로를 통해서 다른 리소스를 가져옴 Resource createRelative(String relativePath) throws IOE..

Spring 2020.05.29

[Spring] 예제로 보는 Environment Abstraction

1. @Profile 어플리케이션 배포할 때 어느 상황에 맞춰서 DB를 붙여야하는데 이럴때 @Profile사용하면 좋다. 보통 @Configuration과 같이쓰인다. @Configuration @Profile("default") public class AppDefaultConfig { @Bean(initMethod = "init", destroyMethod = "destroy") public Connection connection(ConnectionFactory connectionFactory){ return connectionFactory.getConnection(); } } @Configuration @Profile("dev") public class AppDefaultConfig { @Bean(i..

Spring 2020.05.27

[Spring] 예제로 보는 Java-based Container Configuration

1. @Bean(intMethod, destroyMethod) public class A { @Autowired private B b; public A(B b) { this.b = b; } //@PostConstruct void init(){ log.error("A post construct"); } //@PreDestroy void destroy(){ log.error("A post destroy"); } } 기존에 사용하던 @PostConstruct , @PreDestroy 어노테이션을 사용하지 않고 아래의 코드블럭에서 보다시피 외부에서 설정이 가능하다. @Configuration public class AppConfig { @Bean public B b(){ return new B(); } @Bea..

Spring 2020.05.21

[Spring] 예제로 보는 Using JSR 330 Standard Annotations

이 파트에서는 Spring에서 사용하는 것들을 자바 표준 기술로 인터페이스만 추가한 것이다. javax.inject javax.inject 1 Maven을 사용한다면 java.inject를 사용하기 위해 pom.xml에 위와 같이 dependency를 추가해주어야 한다. 1. Limitations of JSR-330 Standard Annotations 위의 표는 Spring에서 사용되는 어노테이션을 자바 표준으로 매칭되는 표이다. 예를 들어 @Component 는 @Named로 대체가능 하지만, 실제로는 자바 표준보다는 Spring의 어노테이션을 사용한다. 굳이 사용한다면 @Inject만 사용하고 웬만하면 Spring 어노테이션을 사용하자.

Spring 2020.05.19

[JavaScript] 특정 문자열 찾기

내장함수 indexOf() 함수를 사용하면 특정 문자열이 있는지 없는지 체크가 가능하다. ※"문자열".indexOf("찾고자 하는 문자열") var testStr = "test123"; var findStr = "test"; console.log(testStr.indexOf(findStr)); //결과값 : 0 console.log(testStr.indexOf("777")); //결과값 : -1 indexOf함수는 찾는 문자열의 시작위치에 해당하는 index를 반환. 따라서 "test123"에서 "test"의 시작위치인 0을 반환 indexOf함수는 찾는 문자열이 문자열에 없을 시 ' -1 ' 을 반환. 따라서 "test123"에 "777" 문자열은 없으므로 -1을 반환

[Spring] 예제로 보는 Classpath Scanning and Managed Components

1. @ComponentScan @Configuration @ComponentScan(basePackages = "패키지명") public class AppConfig { } @Component public class B { } basePackages에 해당하는 패키지 안의 @Component 어노테이션이 붙은 class를 scanning하고 자동으로 Bean으로 등록시킨다. 즉, 위의 클래스B 는 xml에 Bean으로 등록을 안해도 Bean으로 등록시켜준다. (단, AppConfig 이 클래스는 xml에 Bean이라고 등록을 해야한다.) 2. @Repository @Repository public class JpaMovieFinder implements MovieFinder { // implementa..

Spring 2020.05.18

[Spring] 예제로 보는 Annotation-based Container Configuration

Are annotations better than XML for configuring Spring? 위의 질문은 Spring 공식 문서에서 해당 파트에서 가장 처음에 등장하는 질문이다. 과연 어노테이션으로 설정하는 것이 XML로 설정하는 것 보다 더 좋은 방법일까?? ① XML 설정 방식의 장점 XML만 보고도 스프링의 설정을 한눈에 확인 가능 설정과 소스코드의 분리 가능 -> POJO(Plain Old Java Object) ② XML 설정 방식의 단점 'XML 헬' 이라고 불릴 정도로 XML이 너무 커진다. 방대해진 XML을 관리하기 힘들어진다. 위의 XML 단점을 보면 어노테이션이 더 나은 방법이 아닌가? 라는 생각이 든다. 하지만! 어노테이션을 사용하면 소스코드와 설정의 분리가 애매해진다. -> ..

Spring 2020.05.12

[Spring] 예제로 보는 Ioc Container - Customizing the Nature of a Bean

1. Initialization Callbacks org.springframework.beans.factory.InitializingBean 인터페이스는 Container가 Bean을 설정하고 Bean을 초기화 할 수 있는 작업을 도와준다. @Getter @Slf4j @AllArgsConstructor public class ConnectionFactory implements InitializingBean { private String driverClass; private String url; private String user; private String password; private Connection connection; @Override public void afterPropertiesSet()..

Spring 2020.04.30

[Spring] 예제로 보는 Bean Scope (Feat. 동일성, 동등성)

예제 코드를 보며 설명하기 전에 우선! 여기서나오는 동일성(identity)과 동등성(equals)의 차이를 알아야한다. 1. 동일성(identity) 객체 주소가 같다. 예) (obj1 == obj2) ---> true @Test public void testIdentity(){ //동일성 테스트 A a1 = new A(); A a2 = new A(); Assert.assertTrue(a1==a2); //결과 : false A a3=a1; //a3는 a1이 가리키는 메모리를 가리키고있다. Assert.assertTrue(a1==a3); //결과 : true } class A{} 2. 동등성(equals) 객체의 값이 같다 예) obj1.equals(obj2) ---> true @Test public v..

Spring 2020.04.29

[Python] 예제 코드로 보는 배열 복사(array copy)

1. 옅은 복사 a=[1,2,3] b=a #옅은 복사 print(b) #결과 : [1,2,3] a.append(4) print(b) #결과 : [1,2,3,4] 일반 대입방식으로 배열을 선언한다면 옅은 복사가 이루어진다. 위의 경우 b = a 로 b의 배열을 생성하지만 a가 변하면 b의 값도 변한다!! 하지만 대부분이 저렇게 변하지 않게 생성을 원한다. 그럴 경우, 깊은 복사를 해야한다 2.깊은 복사 import copy a=[1,2,3] b=copy.deepcopy(a) #깊은 복사 a.append(4) print(a) #결과 : [1,2,3,4] print(b) #결과 : [1,2,3] copy.deepcopy를 사용하면 a 배열이 변해도 b 배열이 변하지 않는다. 여러분이 원하는 복사가 바로 이것!!

Python 2020.04.25