Spring : 환경조성, OOP

brave_chicken·2024년 4월 24일

잇(IT)생 챌린지

목록 보기
35/90
post-thumbnail

Spring 환경조성

미션

  • springwork2에서 새로 작업(새로운 workspace)
  • http://127.0.0.1:8089/secondPro의 실행결과와 [Maven Dependencies]에 추가된 라이브러리 목록을 캡쳐
  • jsp,js,html,css,workspace 모두 UTF-8로 변경
  • external 웹 브라우저, chrome,으로 실행되도록
  • 세부 버전이 적용
    secondPro
    com.multi.secondPro
    pom.xml => 자바(1.8), 스프링(4.2.4.), 서블릿(4.0.?)
    project facets(1.8/ 4.0)
    서버 삭제 및 톰캣 등록
  1. 새로운 workspace 만들기 (springwork2로 작업)

  2. server삭제(세 곳에서 모두 삭제)
    : 하단 server창, package explorer(disk에서도 딜리트 체크), window-preferences-sever-runtime environment에서 리무브

  3. package explorer창에서 spring ragacy project하고 누르면 C:\backend23\work\springwork2.metadata.sts 폴더 생성됨. (우측하단에서 뾰로롱 자동생성)
    따로 제공받은 폴더 파일을 C:\backend23\work\springwork2.metadata.sts\content에 복사/붙여넣기
    C:\backend23\work\springwork2.metadata.plugins\org.springsource.ide.eclipse.commons.content.core
    에 제공받은 파일 붙여넣기

  4. spring 껐다 켜기

  5. new spring ragacy project 누르고, 이전작업으로 새로 생긴 spring MVC project 누르고 이름은 secondPro, 패키지명은 com.multi.secondPro로 줘야함! 생성하기

  6. pom.xml 파일 열어서 자바(1.8), 스프링(4.2.4.), 서블릿(4.0.?)으로 설정(버전 맞추기)(여기서 서블릿은 메이븐 사이트의 spring api 링크 복사해서 붙여넣기함/ 이후 상단 프로젝트-클린 누르기(오류해결한거 업로드하는 느낌)

  1. 패키지에 우클- properties- project facets- 자바 1.8/ 다이나믹웹모듈 4.0으로 설정

  2. window-preferences-web에 가서 jsp,js,html,css,workspace 모두 UTF-8로 변경

  3. 서버 등록 아파치 - 톰캣 버전 9으로 하기(위치는 톰캣 설치된 곳 위치로 : C:\Program Files\Apache Software Foundation\Tomcat 9.0)
    available에서 configured로 옮기고 피니시

  4. 서버 포트넘버 체크(이클립스와 겹치지않게)

  5. 서버 스타트 안되면? window-preferences-general-web browser

  6. http://127.0.0.1:8089/secondPro 실행~

의존성 주입(DI)

프로젝트 내 파일들 요건 ..

  • 커플링을 낮춰야함(결합도가 낮은 프로그램으로 만들어야함)
  • 유연성, 요구사항 반영, 기존소스 건들지 않기
  • 패키지명은 3단계로 줘야함 => com.multi.firstPro
    여기서 firstPro는 context명
  • 스프링 기본컨셉 DI
  • IoC컨테이너

basic

baisc패키지의 NullPointException을 해결해주세요

interface Insa

public interface Insa {
	void addUser(MemberDTO user);
	MemberDTO getUser(String id);
	void setDao(MemberDAO dao);
	MemberDAO getDao();
}

InsaImpl / 서비스의 역할

public class InsaImpl implements Insa {
	MemberDAO dao;
	public InsaImpl() {
	
	}
	
	public InsaImpl(MemberDAO dao) {
		super();
		this.dao = dao;
	}

	public MemberDAO getDao() {
		return dao;
	}

	public void setDao(MemberDAO dao) {
		this.dao = dao;
	}

	@Override
	public void addUser(MemberDTO user) {
		dao.add(user);		
	}

	@Override
	public MemberDTO getUser(String id) {
		dao.getUser("id");
		return null;
	}
}

MemberDTO

public class MemberDTO {
	private String id;
	private String pass;
	private String name;
	public MemberDTO(){
		
	}
	public MemberDTO(String id, String pass, String name) {
		super();
		this.id = id;
		this.pass = pass;
		this.name = name;
	}

	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPass() {
		return pass;
	}
	public void setPass(String pass) {
		this.pass = pass;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

MemberDAO

public class MemberDAO {
	public void add(MemberDTO user){
		System.out.println("db에 insert하기");
	}
	public MemberDTO getUser(String id){
		System.out.println("사용자정보 가져오기 - db에서 조회");
		return null;
	}
}

TestMain

public class TestMain {
	public static void main(String[] args) {
		//1. setter메소드를 이용해서 멤버변수를 셋팅하기
		MemberDAO dao = new MemberDAO();
//		Insa insa = new InsaImpl();
//		insa.setDao(dao);
		
		//2. 생성자를 이용해서 멤버변수를 셋팅
		Insa insa = new InsaImpl(dao);
		
		MemberDTO user = 
				new MemberDTO("jang","1234","장동건");
		insa.addUser(user);
	}
}

app1

  • 객체를 bean이라 부름
  • 결합도가 극도로 높은 프로그램
    => 클래스결합도가 높고 의존성이 높다.
    사용하는 클래스가 변경되면 이클래스를 이용해서 작업하는 모든 클래스와 메소드가 변경되어야 한다.
    => OOP특성이 적용되지 않았다.
    => 상위인터페이스와 구현체(상위인터페이스를 상속받아서 실제 코드를 구현해놓은 클래스 = 하위클래스)를 분리하지않았다.(= 다형성을 적용하지 않았다.)
  • MyBeanTest는 MyBeanStyle~~클래스를 사용하는 클래스로 지금은 한개의 클래스에 메소드를 3개를 구현했지만 더 많을수있다.

MybeanStyleA

public class MybeanStyleA {
	public void testHello(String name) {
		System.out.println("hello.."+name+"!!");
	}
}

MybeanStyleB

public class MybeanStyleB {
	public void testHello2(String name) {
		System.out.println("안녕하세요.."+name+"님!!");
	}
}

MybeanTest

public class MybeanTest {
	public static void main(String[] args) {
		MybeanStyleA obj = new MybeanStyleA();
		run(obj);
		show(obj);
		change(obj);
	}
	public static void run(MybeanStyleA obj) {
		System.out.println("==============");
		obj.testHello("BTS");
		System.out.println("==============");
	}
	public static void show(MybeanStyleA obj) {
		obj.testHello("BTS");
		obj.testHello("BTS");
		obj.testHello("BTS");
		obj.testHello("BTS");
		obj.testHello("BTS");
	}
	public static void change(MybeanStyleA obj) {
		System.out.println("**************");
		obj.testHello("BTS");
		obj.testHello("BTS");
		System.out.println("**************");
	}
}

app2

app1패키지의 프로그램을 OOP특성이 적용되도록 app2에 복사한 클래스를 변경
클래스명, 메소드명, 구조... 모두 변경가능

=> 객체를 변경해도 이 객체를 활용하는 클래스나 기존의 메소드는 변경하지 않아도 잘 동작한다.
=> 그러나 객체를 사용하기 위해서 생성하는 코드는 객체가 바뀌면 변경해야한다.

interface MyBeanStyle

public interface MyBeanStyle {
	void testHello(String name);
}

MyBeanStyleA

public class MyBeanStyleA implements MyBeanStyle{
	public void testHello(String name) {
		System.out.println("hello.."+name+"!");
	}
}

MyBeanStyleB

public class MyBeanStyleB implements MyBeanStyle{
	public void testHello(String name) {
		System.out.println("안녕하세요"+name+"님!");
	}
}

MyBeanTest

 
public class MyBeanTest {
	public static void main(String[] args) {
		MyBeanStyle obj1 = new MyBeanStyleA();
		MyBeanStyle obj2 = new MyBeanStyleB();
		run(obj1);
		show(obj1);
		change(obj1);
		run(obj2);
		show(obj2);
		change(obj2);
	}
	public static void run(MyBeanStyle obj) {
		System.out.println("====================");
		obj.testHello("BTS");
		System.out.println("====================");
	}
	public static void show(MyBeanStyle obj) {
		obj.testHello("BTS");
		obj.testHello("BTS");
		obj.testHello("BTS");
		obj.testHello("BTS");
		obj.testHello("BTS");
	}
	public static void change(MyBeanStyle obj) {
		System.out.println("********************");
		obj.testHello("BTS");
		obj.testHello("BTS");
		System.out.println("********************");
	}
}

본 포스팅은 멀티캠퍼스의 멀티잇 백엔드 개발(Java)의 교육을 수강하고 작성되었습니다.

0개의 댓글