결합도를 낮추기 위한 또 다른 방법으로는 디자인 패턴을 이용하는 방법이 있다. 다형성을 이용하는 방법은 메소드를 호출할 때 인터페이스를 이용함으로써 쉽게 교체할 수 있지만, 변경하고자 할 때, 객체를 생성하는 소스를 수정해야만 한다. Factory 패턴을 적용하면, 클라이언트에서 사용할 객체 생성을 캡슐화하여 TVUser와 TV사이를 느슨한 결합상태로 만들어준다. Factory 패턴이 적용된 BeanFactory클래스를 추가한다. package polymorphism; public class BeanFactory { public Object getBean(String beanName) { if(beanName.equals("Samsung")) { return new SamsungTV(); } else i..
전체 글
결합도를 낮추기 위해서 다양한 방법을 사용할 수 있지만 가장 쉽게 생각할 수 있는 것이 객체지향 언어의 핵심 개념인 다형성(Polymorphism)을 이용하는 것이다. 다형성을 이용하려면 상속과 메소드 재정의 (Overriding) 그리고, 형변환이 필요하다. 앞서 프로그램에서 했던 TV 클래스들의 최상위클래스로 사용할 TV인터페이스를 추가하고, 모든 TV가 공통으로 가져야 할 메소드들을 추상메소드로 선언한다. TV. java package polymorphism; public interface TV { public void powerOn(); public void poweroff(); public void volumeUp(); public void volumeDown(); } SamsungTV.java..
결합도란 하나의 클래스가 다른 클래스와 얼마나 많이 연결되어 있는지를 나타내는 표현이며 , 결합도가 높은 프로그램은 유지보수가 어렵다. 예제로 SamsungTV와 LgTV의 클래스를 만들고 시청에 필수 기능인 4가지의 메소드를 만들었다. TVUser 클래스에서 두 TV클래스를 번갈아 사용하도록 프로그램을 구현하였다. SamsungTV public class SamsungTV { public void powerOn() { System.out.println("SamsungTV---전원 켠다."); } public void poweroff() { System.out.println("SamsungTV---전원 끈다"); } public void volumeUp() { System.out.println("Sams..
/web.xml hello hello.HelloServlet hello /hell.do 위 설정은 브라우저에서 /hello.do라는 URL 요청을 전송하며, hello라는 이름으로 등록된 hello.HelloServlet 클래스를 찾아 객채를 생성하고 실행한다는 설정이다. HelloServlet프로그램을 실행하며 web.xml 설정대로 객체가 생성되고 실행된다. 서블릿 컨테이너는 다음 순서에 따라 동작한다. 1. WEV-INF/web.xml 파일을 로딩하여 구동] 2. 브라우저로부터 /hello.do 요청 수신 3. hello.HelloServlet 클래스를 찾아 객체를 생성하고 doGet() 메소드를 호출 4. doGet() 메소드 실행결과를 클라이언트 브라우저로 전송
1. 자바 기반의 프레임워크 Presentation Struts Struts 프레임워크는 UI Layer에 중점을 두고 개발된 MVC 프레임워크 Spring(MVC) Struts와 동일하게 MVC 아키텍처를 제공하는 UI Layer 프레임워크이다. 하지만 Struts처럼 독립된 프레임워크는 아니고 Spring 프레임워크에 포함되어 있다. Business Spring(IoC, AOP) Spring은 컨테이너 성격을 가지는 프레임워크이다. Spring의 IoC와 AOP 모듈울 이용하여 Spring 컨테이너에서 동작하는 엔터프라이즈 비즈니스 컴포넌트를 개발할 수 있다. Percictence Hibernate or JPA Hibernate는 완벽한 ORM(Object Relation Mapping) 프레임워크이..
1. 프로젝트 생성 [spring] -> [Spring Levacy Project] 를 선택하고 BoardWeb이라고 입력한다. Templates 은 'Spring MVC Project'를 선택한다. 프로젝트에서 사용할 최상위 패키지를 지정하는 화면에서 최소 세 개이상의 패키지가 지정되어야 버튼이 활성화되고 프로젝트를 생성할 수 있다. 입력란에 "com.springbook.biz"라고 입력하고 버튼을 클릭한다. 2. 프로젝트 설정 변경 STS를 이용하여 'Spring MVC Project'를 생성하면 JRE 번전도 맞지 않고 서브라이브러리도 등록되어 있지 않으므로 적절한 변경이 필요하다. [Properties]를 선택하여 JAVA버전을 1.8버전으로 수정한다. [Runtimes] 탭을 선택하고 Apach..
오버로딩 (Overloading) 오버로딩은 동일 이름의 메서드를 매개변수만 다르게 하여 여러 개 정의할 수 있는 기능이다. 특징 - 메서드 이름이 같아야 한다. - 매개 변수 개수가 달라야 한다. - 매개변수 개수가 같을 경우 데이터 타입이 달라야 한다. - 반환형은 같거나 달라도 된다. public class A { public void fn() { System.out.println("없음"); // 매개변수가 없고 반환 값도 없는 fn메서드 } public void fn(int i) { System.out.println(i); } public void fn(double d) { System.out.println(d); } public int fn(int a, int b) { return a+b; }..
인터페이스는 자바의 다형성을 극대화하여 개발코드 수정을 줄이고 프로그램 유지보수성을 높이기 위한 문법이다. 오직 추상메서드와 상수만을 멤버로 가질 수 있으며 그 외의 다른 어떠한 요소도 허용하지 않는다. 인터페이스는 자바에서만 사용한다. 인터페이스 interface 클래스명 { 데이터_타입 메서드명() } 예제 interface A { // 인터페이스 A를 선언한다. void fn(); // fn 이라는 메서드 선언을 정의한다. } class B implements A{ //인터페이스 A를 상속받은 클래스 B 선언한다. public void fn(){ //비어있는 fn을 상속받아 구현한다. System.out.println("B"); } } class C implements A{ //인터페이스 A를 상속..

[Java] 01. 원시 데이터형과 클래스 데이터형의 차이 프로그램을 실행하면서 메모리를 사용하게 되는데, 이 메모리 값을 임시로 저장하는 것이 변수의 역할이다. 변수 타입은 크게 정수형, 실수형, 문자형, boolean으로 나뉜다. java는 원시데이터타입(Primitive type) 과 클래스 타입을 구분해 놓는데 이는 int와 Interger의 변수는 다른 것이고 int는 null을 허용하지 않지만 Interger는 null을 허용하는 정수형 타입이다. 변수선언은 변수 타입을 앞에 쓰고 변수명을 작성하여 선언한다. 변수에 값을 넣을 때는 대입연산자(=)를 사용한다. public class test { public static void main(String[] args) { // 정수형 int, 변수..
성적 산출하는 방법을 DI 를 사용하여 연습해보았다 public class program { public static void main(String[] args) { Exam exam = new Newlecexm(); exam 의 인터페이스를 생성한다. package program.di.entity; public interface Exam { int total(); float avg(); } Newlecexm 의 클래스를 생성한다. 국어, 영어, 수학, 컴퓨터과목에 대한 평균과 총점을 계산한다. package program.di.entity; public class Newlecexm implements Exam { private int kor; private int eng; private int math..