본문 바로가기

issue & tip

(18)
인터페이스 기반 프로그래밍 package com.example.demo.jcf; import java.util.LinkedList;import java.util.List; public class ListClientExample { private List list;public ListClientExample() {list = new LinkedList();}private List getList() {return list;}public static void main(String[] args) {ListClientExample lce = new ListClientExample();List list = lce.getList();System.out.println(list);}} ListClientExample 클래스는 List를 캡슐화하는..
토비의 봄 TV 재사용성과 다이나믹 디스패치 그리고 더블디스패치 Dependency 의존관계(dependency relationship)-Supplier의 변화가 Client에 영향을 주는 경우 Client ----------> Supplier -의존관계발생 supplier가 Client의 필드 supplier가 Client 메서드의 파라미터 supplier가 Client의 로컬변수 supplier로 메시지를 보냄 재사용가능한? 객체지형 설계/개발- Client는 재사용이 어렵다.- Client는 컴포넌트/서비스가 될 수 없다. "컴포넌트란 이를 만든 개발자의 손이 미치지 않는 곳에서도, 아무 변경없이, 필요에 따라 확장해서 사용될 수 있는 소프트웨어 덩어리다." "오브젝트 패턴은 런타임시에 바뀔 수 있는 (상속 관계보다) 더 동적인 오브젝트(의존) 관계를 다룬다."..
결합도 결합도- 모듈간에 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계를 의미 목표- 모듈 상호간 낮은 결합도 추구하여 의존하는 모듈이 적어야한다.- 오류 발생시 전파되어 다른 오류의 원인이 되는 파급 효과를 최소화해야한다. 모듈 사이의 결합은 강한 정도(가장 바람직하지 못한 경우)에서부터 약한 정도(가장 바람직한 경우)에 이르기까지 나열할 수 있다. 다음 보기 중 강한 정도에서 약한 정도 순으로 가장 적절하게 나열된 것은? 1. 내용결합도 - 공통결합도 - 제어결합도 - 스템프 결합도 - 자료결합도 소프트웨어의 모듈간의 결합도(coupling)와 모듈내 요소간의 응집도(cohesion)에 대해서 소프트웨어 설계시 가장 바람직 한 것은? 1. 응집도는 높게 결합도는 낮게 설계한다. 다음중에서 소프트웨어 설..
응집도 응집도- 모듈에 포함된 기능의 순수함을 나타내는 척도로, 모듈의 강도를 측정하는 단위-하나의 모듈 내부의 처리 요소들 간의 기능적 연관성을 측정하는 척도-모듈안의 요소들이 서로 관련되어 있는 정도 즉, 모듈이 독립적인 기능으로 정의되어 있는 정도를 말하는 것으로, 독립적인 모듈이 되기 위해서는 각 모듈의 응집도가 강해야 한다. 응집도의 목표- 가능한 높은 응집도를 추구하여 유지보수 용이성을 확보 1단계: 암합적 강도(Coincidental Cohesion)암합적 강도 모듈은 모듈 내 요소 간 특별한 관계가 인정되지 않는다.암합이란 우연히 요소가 일치한다는 의미이다.예) 모듈 내 중복된 명령의 패턴을 우현히 발견했다는 이유로 통합해서 하나의 모듈로 만든 경우다.이때는 해당 모듈의 기능을 바르게 명명해서 정..
파일 입출력 파일 텍스트를 읽는 방법- 파일의 문자를 한문자씩 읽는 방법(FileReader 클래스)- 텍스트를 한줄 씩 읽는 방법(BufferedReader 클래스)- 텍스트를 한번에 모두 읽는 방법(Scanner 클래스, Files 클래스) 파일의 문자를 한문자씩 읽는 방법(FileReader 클래스)FileReader 클래스는 텍스트 파일에서 문자 단위로 데이터를 읽어 들이는 클래스 FileReader(File file) - File객체를 지정해서 FileReader를 생성FIleReader(String fileName) - 읽어드릴 파일명을 지정해서 FileReader를 생성 int read() - 입력스트림에서 한 개의 문자를 읽어 반환void close() - 입력 스트림을 닫고, 스트림에 관련된 모든 시..
래퍼클래스와 제네릭 래퍼클래스자바에서는 참조형 값만 받는다고 정의되어 있으면 기본 자료형을 이용할 수 없는 경우도 있다.이때 기본자료형을 클래스로 변환해야 한다.자바에선 이런한 경우를 대응하고자 래퍼클래스라는 기본 자료형을 나타내는 클래스가 각각 준비되어있다. byte - Byteshort - Shortint - Integerlong - Longfloat - Floatdouble - Doublechar - Characterboolean - Boolean 기본 자료형과 래퍼 클래스의 변환은 자동으로 이루어진다.단, 래퍼 클래스의 초기값은 null이 된다.그래서 값을 설정하지 않으면 0이 아니라 null이 되므로 그때 자동으로 변환되면 예외가 발생한다. 상수한번 대입한 값을 나중에 변경하고 싶지 않을 때 final 제한자를 붙..
부동소수점 부동소수점수를 다루는 산술 연산의 주의점 double, float 등 부동소수점을 계산할 때 오차가 발생해 의도한 값이 되지 않는 경우 @Testpublic void doubleCalTest() {double resultDouble = 0.0;resultDouble = 0.7+0.1;System.out.println("0.7 + 0.1 =" + resultDouble);} 결과0.7 + 0.1 =0.7999999999999999 소스코드 상에 기술된 10진수를 자바 실행환경에서 2진수로 변환해 계산하기 때문에 부동소수점수에서는 10진수와 2진수 변환시 오차가 발생한다. 따라서 금액계산 등 오차를 허용하지 않고 정확한 수치를 요구하는 경우에는 BigDecimal 클래스를 이용하여 계산해야 한다. BigDe..
스레드 스레드- 스레드 사전적 "끈을 구성하는 실" 멀티 스레드- 복수의 스레드로 하나의 프로그램을 실행하는 기술멀티 스레드를 사용하는 이유로 처리를 빠르게 하기 위해. 프로그램에서는 주로 논리적인 조작을 하면서 동시에 외부와 데이터를 주고받는 처리를 하게 된다.그런데 외부와의 연계에서 대기 시간이 발생하는 경우가 있다.기다리는 동안 다른일을 해두면 전체적인 처리 시간이 짧아진다.예) 집안일(세탁기가 돌아가는 동안 청소기로 방을 청소하는 것) 단, 멀티 스레드로 처리한다고 뭐든지 빨라지는 것은 아니다.프로그램을 실행하는 컴퓨터의 CPU 코어 수가 적으면 병렬 처리 스레드를 그만큼 만들수 없기 때문에 생각보다 빨라지지 않는다.또한 처리하는 데이터양이 적은 경우도 마찬가지로 속도 향상을 기대할 수 없다.그러므로 이..