ioc 의 사고

spring 을 배우 기 시 작 했 을 때 spring 의 두 가지 특성 은 IOC 와 AOP, ioc 의 해석 은 다음 과 같다.
IoC (Inversion of Control) 는 반전 을 제어 하 는 것 을 '주입 의존' (DI = Dependence Injection) 이 라 고도 한다.
IOC 의 기본 개념 은 대상 을 만 들 지 않 지만 만 드 는 방식 을 설명 하 는 것 이다.코드 에 서 는 대상 과 서비스 와 직접 연결 되 지 않 지만 설정 파일 에서 어떤 구성 요소 가 어떤 서 비 스 를 필요 로 하 는 지 설명 합 니 다.용 기 는 이것들 을 한데 연결 하 는 것 을 책임 진다.
그 원 리 는 OO 디자인 원칙 을 바탕 으로 하 는 The Hollywood Principle: Don 't call us, we' ll call you (나 를 찾 지 마, 내 가 너 를 찾 아 올 게) 다.모든 구성 요소 가 수 동적 (Passive) 이 고 모든 구성 요소 의 초기 화 와 호출 은 용기 가 책임 지 는 것 이다.구성 요 소 는 용기 에 있 고 용기 가 관리 합 니 다.
쉽게 말 하면 용기 가 프로그램 간 의 관 계 를 제어 하 는 것 이지 전통 적 인 실현 이 아니 라 프로그램 코드 가 직접 조작 하 는 것 이다.이것 이 바로 이른바 '반전 제어' 의 개념 이다. 통제 권 은 응용 코드 에서 외부 용기 로 바 뀌 었 고 통제 권 의 이전 은 이른바 반전 이다.AOP 의 설명 은:
절단면 프로 그래 밍: Aspect Oriented Programming
AOP 는 OOP 의 연장선 으로 (Aspect Oriented Programming) 의 줄 임 말로 절단면 을 대상 으로 프로 그래 밍 한 다 는 뜻 이다.
   주요 기능 은 로그 기록, 성능 통계, 안전 제어, 사무 처리, 이상 처리 등 이다.
   주요 의 도 는 로그 기록, 성능 통계, 안전 통제, 사무 처리, 이상 처리 등 코드 를 업무 논리 코드 에서 구분 하고 이런 행위 에 대한 분 리 를 통 해 우 리 는 이들 을 비 지도 업무 논리 적 방법 으로 독립 시 켜 이런 행 위 를 바 꿀 때 업무 논리 에 영향 을 주지 않 는 코드 로 바 꾸 기 를 원한 다.
   사전 컴 파일 방식 과 런 타임 동적 대 리 를 통 해 현재 소스 코드 를 수정 하지 않 은 상태 에서 프로그램 동적 통일 에 기능 을 추가 할 수 있 는 기술 입 니 다.AOP 는 실제 적 으로 GoF 디자인 모델 의 연장 이 고 디자인 모델 이 꾸준히 추구 하 는 것 은 호출 자 와 피 호출 자 간 의 결합 이다. AOP 는 이런 목표 의 실현 이 라 고 할 수 있다.
Spring 에 서 는 절단면 프로 그래 밍 을 위 한 풍부 한 지원 을 제공 하여 응용 업무 논리 와 시스템 급 서비스 (예 를 들 어 감사 (auditing) 와 사무 (transaction) 관 리 를 분리 하여 내부 집적 적 인 개발 을 할 수 있 습 니 다.응용 대상 은 그들 이 해 야 할 일 인 업무 논 리 를 완성 하 는 것 만 을 실현 할 뿐이다.로그 나 트 랜 잭 션 지원 등 다른 시스템 급 관심 사 는 책임 지지 않 습 니 다.
  위의 이런 개념 들 은 모두 우리 가 배우 기 시 작 했 을 때 이론 지식 이 었 는데 사실은 처음에 아무 도 이런 것 을 완전히 이해 하지 못 했다.이 글 은 주로 IOC 를 설명 하고 AOP 에 대해 서 는 소개 만 한다.멀리 떨어져 서 대상 을 향 한 과정 과 과정 을 이야기 하 다.왜 대상 을 대상 으로 하 는 것 이 과정 을 대상 으로 하 는 것 보다 좋 습 니까?사실은 소프트웨어 개발 과정 에서 소프트웨어 가 변화 하 는 곳 이 점점 많아 지 는 것 이다.각양각색의 변화.전통 적 인 과정 을 향 한 디자인 을 초래 하 다.소프트웨어 변화 에 적응 하지 못 하고 있다.점점 커지 는 수요.프로 세 스 를 위 한 프로 그래 밍 방법 이 나 쁜 것 은 아니다.만약 에 우리 의 소프트웨어 가 개발 되 자마자 정형 화 되 고 변화 가 없 으 며 업그레이드 되 었 다 면 저 는 개인 적 으로 대상 을 대상 으로 하 는 것 과 과정 을 대상 으로 하 는 것 이 어떤 면 에서 차이 가 없 을 것 이 라 고 생각 합 니 다. 대상 을 대상 으로 하 는 장점 은 바로 소프트웨어 개발 과정 에서 의 변화 에 대응 하고 과정 을 대상 으로 하 는 것 보다 더 잘 적응 할 수 있다 는 것 입 니 다.더 좋 은 확장 시스템.변화 에 적응 하 다.한 마디 로 대상 을 대상 으로 하 는 것 이 과정 을 대상 으로 하 는 것 보다 변화 에 더 잘 적응 할 수 있다 고 생각 합 니 다. 사실은 본 편 에서 말 한 IOC 도 마찬가지 입 니 다.소프트웨어 개발 에 변화 가 없다 면 IOC 도 소 용이 없다.디자인 패턴 포함.AOP, 소프트웨어 모드 등등.우 리 는 우선 비교 분석 을 배 워 야 한다.먼저 가설 을 배우 고 수요 의 변 화 를 가설 하 는 것 을 배 워 야 한다.이렇게 해야만 디자인 모델 을 더욱 잘 이해 할 수 있다.IOC, AOP 등 전형 적 인 사상 들.멀리 떨어져 서 본문의 토론 으로 돌아가다.예 를 들다.다음 예 는 한 걸음 한 걸음 변화 한다.변화 에 주의 한 후 지난번 과 대비 하여,
그래, 어디 있어?이렇게 해야만 우 리 는 IOC 사상 을 더욱 잘 이해 할 수 있다.한 사람 이 북경 에 가면 그 는 기차, 자동차, 비행기 등 공 구 를 탈 수 있 는 예 를 들 수 있다.클래스 는 다음 과 같 습 니 다.
class Car{
    public void run(){
    System.out.println("-----------by Car-----------");   
}
}
class Person{
   public void goToBJ(){
      Car car=new Car();
      car.run();
      
}
}
public class Client(){
  public static void main(String args[]){
     Person person=new Person()
     person.goToBJ();
      
}
}

이것 은 한 사람 이 자동 차 를 타고 북경 에 가 는 예 이다.물론 이 사람 이 계속 차 를 타고 북경 에 가면별일 아니 야.그 는 어느 날 갑자기 기 차 를 타고 북경 에 가 고 싶 어 졌 다.그러면 우 리 는 우선 기차 류 를 하나 늘 려 야 한다.물론 이것 도 필수 입 니 다.
정확 한, OCP 원칙, 확장 개방, 수정 닫 기.우 리 는 지금 기능 을 새로 늘 리 려 고 하 는데, 종 류 를 새로 늘 리 는 것 은 필수 적 이다.(여기 서 내 가 강조 하 는 것 은 의문 을 피 하 는 것 이다) 우 리 는 기차 류 를 새로 늘 린 후에 우 리 는 반드시 우 리 를 수정 해 야 한 다 는 것 을 알 게 되 었 다.
의 Person 류.이 점 은 매우 좋 지 않다.이것 도 우리 가 주목 하 는 부분 이다.우 리 는 수정 에 대한 폐쇄 를 강조 한다.우 리 는 가능 한 한 우리 류 에 대한 수정 을 줄 여야 한다.여기 서 코드 를 재 구성 합 시다.도구 인터페이스 가 추가 되 었 습 니 다.인터페이스 로 실현 하 다.
class Person{
	private GongJu gongju;
        public Person(GongJu gongju){//     IOC       。
	  	this.gongju=gongju;
	  }
      public void goToBJ(){
       gongju.run();        
     }
}

Class Car implements GongJu{
  public void run(){
  System.out.println("-----------by Car-----------");   

}
}
//      
Class HuoChe implements GongJu{
     public void run(){
     System.out.println("-----------by HuoChe -----------");   
}
}
//    
public interface GongJu{
	  public void run();
}

public Class Client(){
    public static void main(String args[]){
    GongJu gongju=new Car();//     。      ,     GongJu gongju=new HuoChe();  
    Person person=new Person(gongju);
    person.getToBJ();
 }
 }

재 구성 후의 코드 를 통 해 우 리 는 확장 성 을 발견 하고 큰 향상 을 얻 었 다.앞으로 사람 이 비행 기 를 타고 다른 방식 으로 북경 에 가 려 면우 리 는 하나의 클래스 만 추가 하면 GongJu 인 터 페 이 스 를 실현 할 수 있다.클 라 이언 트 에서 조금 만 더 수정 해 주세요.기 존 코드 를 고 칠 필요 가 없습니다.유지 가능성 이 크게 향상 되 었 습 니 다.우 리 는 다시 코드 를 재 구성 하여 공장 류 를 새로 만 들 었 다.클 라 이언 트 류 의 코드 를 공장 류 로 옮 겨 라.변 화 는 다음 과 같다.
class Factroy{
   public void BJ(){
    GongJu gongju=new Car();
    Person person=new Person(gongju);
    person.getToBJ();
 }
}
public Class Client {
   Factory factory =new Factory();
   factory.BJ();
}

여기 서 우 리 는 Factory 류 의 의존 주입 을 통 해 반전 통 제 를 실현 했다.앞으로 수요 의 어떤 변화 도 우 리 는 공장 류 의 변화 에 만 관심 을 가지 면 된다.물론 코드 를 수정 하 는 것 은 우리 에 게 결코 좋 지 않다.이런 상황 에서 스프링 은 비교적 좋 은 변경 방식 을 제시 했다.xml 파일 설정 을 통 해 의존 주입 을 실현 합 니 다.이후 에 우 리 는 xml 파일 만 수정 하면 된다.현재 spring 은 3 중 주입 을 지원 합 니 다.set 주입 포함.구조 기 주입, 인터페이스 주입 등 스프링 안에 빈 팩 토리 류 가 있다.우리 가 있 는 이곳 의 Factory 류 와 유사 하 다.spring IOC 의 구체 적 인 사례 는 여기 서 상세 하 게 설명 되 지 않 습 니 다. IOC 에 대한 이 해 는 클래스 와 클래스 간 의 의존 관 계 를 이전 시 켰 다 는 것 입 니 다.이른바 할리우드 원칙 이다.(Don 't call me, I' ll call you!) 일반적인 상황 에서.우리 가 인 스 턴 스 를 사용 하려 고 할 때.대상 을 만 드 는 인 스 턴 스 가 필요 합 니 다.하지만 우리 IOC 용기 프레임 을 통 해우 리 는 단지 직접 실례 를 사용 해 야 한다.대상 을 만 드 는 작업 을 IOC 용기 에 맡 깁 니 다.이게 IOC 야.

좋은 웹페이지 즐겨찾기