본문 바로가기

IT

자바 리플렉션(reflection) 자바 리플렉션이란자바 리플렉션 API(Java Reflection API)는 자바 클래스, 인터페이스, 메서드, 필드 등의 정보를 동적으로 검색하고, 분석하고, 조작할 수 있는 기능을 제공한다. 이를 통해 실행 중인 자바 애플리케이션에서 객체를 조작하거나 클래스의 동적 로딩, 메서드 호출 등을 가능하게 한다.// 클래스 로딩Class myClass = Class.forName("com.example.MyClass");// 객체 생성Object myObject = myClass.newInstance();// 메서드 호출Method myMethod = myClass.getMethod("myMethod", String.class);myMethod.invoke(myObject, "hello");// 필드 접근F.. 더보기
스프링 팩토리 빈(Factory Bean) 스프링 빈은 기본적으로 클래스 이름과 프로퍼티로 정의된다. 스프링은 지정된 클래스 이름을 가지고 리플렉션을 이용해서 해당 클래스의 오브젝트를 만든다. 클래스의 이름을 갖고 있다면 다음과 같은 방법으로 새로운 오브젝트를 생성할 수 있다. Class의 newInstance() 메소드는 해당 클래스의 파라미터가 없는 생성자를 호출하고 그 결과 생성되는 오브젝트를 돌려주는 리플렉션 API 이다. Date now = (Date) Class.forName("java.util.Date").newInstance(); 스프링은 내부적으로 리플렉션 API를 이용해서 빈 정의에 나오는 클래스 이름을 가지고 빈 오브젝트를 생성한다. 클래스 정보를 가지고 디폴트 생성자를 통해 오브젝트를 만드는 방법 외에도 빈을 만들 수 있는 .. 더보기
스프링 트랜잭션 (Spring Transaction) step2 : proxy, decorate 이전에 step1에서 트랜잭션 + AOP 탄생에 대해 간략한 큰 그림을 그려보았다. 그 과정에서 어떤 노력들이 있었는지 확인해보려고 한다. 필자는 토비의 스프링 3.1을 참고하여 나름대로 해석하여 정리한 내용이다.public void upgradeLevels() throws Exception { TransactionStatus status = this.transactionManager.getTransaction(new DefaultTransactionDefinition()); try { List users = userDao.getAll(); for (User user : users){ if(canUpgradeLevel(user)){ upgradeLevel(user); } .. 더보기
스프링 트랜잭션 (Spring Transaction) step1 트랜잭션은 데이터베이스 시스템에서 데이터를 일관성있게 처리하기 위한 단위 작업 단위이다. 데이터베이스에 대한 변경 작업은 여러 개의 SQL 문으로 이루어져 있을 수 있는데, 이러한 SQL 문을 하나의 논리적인 작업으로 묶어서 처리하는 것이다.트랜잭션은 아래와 같은 네가지 특징을 가진다.원자성(Atomicity): 트랜잭션에 포함된 작업은 전부 성공하거나 전부 실패해야 한다. 즉, 트랜잭션 내의 모든 작업은 한 개의 논리적인 단위로 간주되어야 하며, 어떤 작업이라도 실패하면 트랜잭션 전체가 실패해야 한다.일관성(Consistency): 트랜잭션은 데이터베이스에 일관성 있는 상태를 유지해야 한다. 즉, 트랜잭션을 수행하기 전과 후의 데이터베이스 상태가 일관성 있어야 한다.격리성(Isolation): 동시에 .. 더보기
Annotation(어노테이션) 만들기 + spring @Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Indexedpublic @interface Component { String value() default "";}스프링에서 제공하는 Component를 보자. 스프링은 @Component를 등록하여 bean을 만드는 방법이 있다. 스프링은 ComponentScan으로 Component가 달려있는 Service, Repository 등을 스캔한다. 나는 이게 궁금했다. 이 Component에 대한 의구심이 들었고 그 전에 어노테이션은 어떻게 만드는지 부터 확인할 필요가 있었다.@Documented : Java doc에 문서화 여부를 결정@Retention : 어노테이션.. 더보기
옵저버 패턴(Observer pattern) 정의옵저버 패턴은 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴을 말한다,e.g.) 유튜브 채널을 구독 후 알림설정 버튼을 누르면 유튜브 알림이 뜨게 설계한다고 가정할 경우, 주제 객체는 유튜브 채널, 옵저버는 구독자가 된다.주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용되며 발행/구독 모델로 알려져 있기도 하다.구조이 패턴의 핵심은 옵저버 또는 리스너(Listener)라고 불리는 하나 이상의 객체를 관찰 대상이 되는 객체에 등록시키는 것이다.구현 원리이벤트를 발생시키는 Class B가 있고, 해당 클래스가 발생하는 이벤트를 수신 받고 싶어하는 Class A가 있다고.. 더보기
팩토리 메소드 패턴(Factory Method Pattern) 📌 팩토리 메소드 패턴이란 ?자바 디자인패턴 중 하나로 객체의 생성을 대신 수행해주는 공장이라고 할 수 있다.객체의 생성은 하위 클래스에서 대신한다.객체를 직접 생성하지 않고 메소드를 통해서 간접적으로 생성한 후 반환하는 형식특징)Factory 클래스를 이용하여 객체 생성하나의 메서드로 여러 개의 종류의 객체를 생성합니다.abstract, interface을 활용해 객체 생성을 서브 클래스에 위임 => 서브 클래스는 팩토리 메서드를 구현해 객체를 생성Product :팩토리 메소드가 생성하는 객체의 인터페이스 정의ConcreteProduct :Product 클래스에 정의된 인터페이스를 실제로 구현하는 클래스Creator :Product 타입의 객체를 반환하는 팩토리 메서드를 선언하는 클래스팩토리 메서드를.. 더보기
트랜잭션(Transaction) 트랜잭션(Transaction)트랜잭션(Transaction)이란, 데이터베이스 상태를 변화시키는 작업의 단위❔데이터베이스 상태 변화SELECT * FROM TODOLIST;INSERT INTO TODOLIST VALUES(1, 'TODO');UPDATE TODOLIST SET TODO = 'TODO2' WHERE ID = 1;DELETE FROM TODOLIST WHERE ID = 1;질의문(SQL)을 이용하여 데이터베이스에 접근하여 상태 변화를 준다. 트랜잭션의 작업 단위라는 것은, 사람이 정해둔 기준에 따라 구분되어 정해진다.EX)사용자가 새로운 TO-DO를 작성한다.새롭게 작성된 TO-DO가 포함된 TO-DO-LIST가 보여진다.INSERT INTO TODOLIST VALUES(1, 'TODO').. 더보기

728x90