Spring 개요

jinkyung·2021년 2월 9일
0

Spring

목록 보기
1/24

프레임워크를 쓰는 목적

  • 절차 간소화
  • 표준화 -> 분업 가능 -> 비용,시간 줄어든다

Spring의 특징

  1. EJB(enterprise java bean)에 비해서 가볍다
  2. Ioc (DI)를 쓴다
  3. AOP (관점지향 프로그래밍)
  4. Container
    서블릿 컨테이너 : url이 들어왔을 때 주소에 대응되는 객체(서블릿)을 만들어서 서비스시킨다.
    스프링 컨테이너 또한 같은 역할이다. 다만 객체 = bean

결합도 coupling
프로그램 : 핵심 로직 + 부가로직 (입력, 로그처리, 예외처리 등)
결합도가 낮은 프로그램이 좋다. (느슨한 연결)
결합도가 높으면?

  • 연속적인 에러 발생 가능성이 높다
  • 유지 보수시에 분리가 어렵다 (인수인계 문제)


결합도가 높을 때

SamsungTV

package polymorphism;

public class SamsungTV {
	public void powerOn() {
		System.out.println("SamsungTV -- 전원 켠다");
	}

	public void powerOff() {
		System.out.println("SamsungTV -- 전원 끈다");
	}

	public void volumeUp() {
		System.out.println("SamsungTV -- 소리 올린다");
	}

	public void volumeDown() {
		System.out.println("SamsungTV -- 소리 내린다");
	}
}

LgTV

package polymorphism;

public class LgTV {
	public void turnOn() {
		System.out.println("LgTV -- 전원 켠다");
	}

	public void turnOff() {
		System.out.println("LgTV -- 전원 끈다");
	}

	public void soundUp() {
		System.out.println("LgTV -- 소리 올린다");
	}

	public void soundDown() {
		System.out.println("LgTV -- 소리 내린다");
	}
}

TVUser

package polymorphism;

public class TVUser {
	public static void main(String[] args) {
   	//유사한 2개의 클래스의 사용을 변경하기 위해서 
	//일일이 바꿔줘야 하므로 결합도(Coupling)이 높은 프로그램 
    
		SamsungTV tv = new SamsungTV();
	//	LgTV tv = new LgTV(); 
	//  LgTV로 바꾸면 쓸 수 없다. 비슷한 기능인데도 불구하고 고쳐야 될 것이 많다.
	//  이러한 것을 결합도가 높다고 한다 
		tv.powerOn();
		tv.powerOff();
		tv.volumeUp();
		tv.volumeDown();
		
	}
}

결합도를 낮추기 위해 메서드 명을 똑같이 했다.

TVUser

package polymorphism;

public class TVUser {
	public static void main(String[] args) {
	/*
	결합도가 앞의 프로그램보다 낮아졌다.
	메서드명의 표준을 선행 클래스에 맞춰서 
	클래스 선언만 교체해도 잘 돌아간다.
	*/
		
//		SamsungTV tv = new SamsungTV();
		LgTV tv = new LgTV(); 
		tv.powerOn();
		tv.powerOff();
		tv.volumeUp();
		tv.volumeDown();
		
	}
}

TV interface를 이용

package polymorphism;

// 아예 tv의 표준을 정한다 

public interface TV {
	public void powerOn();
	public void powerOff();
	public void volumeUp();
	public void volumeDown();
	
}

TVUser

package polymorphism;

public class TVUser {
	public static void main(String[] args) {
	/*
	인터페이스로 표준을 정한다 
	인터페이스  변수에 어떤 자식 객체를 저장하냐에 따라 
	동작이 달라진다. 
	*/
		
//		TV tv = new SamsungTV();
		TV tv = new LgTV(); 
		tv.powerOn();
		tv.powerOff();
		tv.volumeUp();
		tv.volumeDown();
		
	}
}

0개의 댓글