목록전체 글 (97)
도도한 개발자
@ 소프트웨어 테스트의 원리 결함 존재 증명 결함이 존재함을 밝히는 활동. 없다는 것을 증명할 순 없음 완벽 테스팅은 불가능 무한 경로, 무한 입력값으로 인한 테스트 어려움 초기 집중 요르돈의 법칙. 테스팅 결과를 단시간에 알 수 있고, 테스팅 기간 단축, 재작업을 줄여 개발 기간 단축 결함 집중 파레토의 법칙. 오류의 80%는 전체 모듈의 20% 내에서 발견. 살충제 패러독스 동일한 테스트 케이스에 의한 반복적 테스트는 새로운 버그 찾지 못함 정황 의존성 SW 성격에 맞게. 정황과 비즈니스 도메인에 따라 테스트를 다르게 수행 오류-부재의 궤변 요구사항을 충족시켜주지 못하면 결함이 없다 해도 품질이 높다고 볼 수 없음 @ 소프트웨어 테스트 산출물 테스트 계획서 테스트 목적과 범위 정의, 대상 시스템 구조..
* Queue는 왜 필요할까? 앞에서 LinkedList라는 클래스에 대해 다루어 봤다. LinkedList라는 것은 자료 구조에 대해 배울 때 중요한 항목 중 하나이기 때문에 꼭 기억하고 있어야 한다. LinkedList에서는 바로 앞 뒤의 만 기억한다. 즉, A,B,C가 순차적으로 들어가 있을 때 A는 뒤에 있는 값이 B라는 것만 알 뿐, C의 존재는 모른다. C또한 앞에 B만 알 뿐 A는 모른다. 그렇다면 이렇게 복잡한 LinkedList를 왜 쓸까? 배열과 같이 데이터를 담아 순차적으로 뺄 경우엔 필요 없을지도 모른다. 그러나 배열의 중간에 있는 데이터가 지속적으로 삭제되고, 추가될 경우에는 LinkedList가 배열보다 메모리 공간 측면에서 훨씬 유리하다. 왜냐하면 배열과 같은 ArrayList..
* Set이 왜 필요할까? Collection을 확장한 배열과 비슷한 역할을 하는 3개의 인터페이가 있다고 했다. List, Set, Queue가 그것들인데 List는 순서가 중요한 데이터를 담을 때 사용되는 반면 Set은 어디에 사용되는 것일까? 어떤 값이 존재하는지, 없는지 여부만 중요할 때 Set을 사용하면 된다. 더 나아가 HashSet의 예제를 보자. 자바에서 Set 인터페이스를 구현한 주요 클래스는 Hashset, TreeSet, LinkedHashSet이 있다. · HashSet : 순서가 전혀 필요 없는 데이터를 해시 테이블에 저장한다. Set 중에 가장 성능이 좋다. · TreeSet : 저장된 데이터의 값에 따라 정렬되는 셋이다. red-black이라는 트리 타입으로 값이 저장되며, H..
* ArrayList에서 데이터를 꺼내자 ArrayList 객체에서 어떻게 값을 꺼내고 삭제하는지 알기 전에 객체에 들어있는 데이터의 개수를 가져오는 size() 메소드를 알아야 한다. 이 size() 메소드의 리턴 타입은 int다. 배열.length는 배열의 저장 공간 개수를 의미하지만, size() 메소드의 결과는 ArrayList에 들어가 있는 데이터 개수를 의미한다. public void checkArrayList5() { ArrayList list = new ArrayList(); list.add("A"); list.add("B"); int listSize = list.size(); for(int loop = 0; loop < listSize; loop++) { System.out.println..
* 자바 컬렉션 자바에서 컬렉션은 목록성 데이터를 처리하는 자료 구조를 통칭한다. 자료 구조란 무엇일까? 영어로 "Data Structure"이라고 한다. 즉 어떤 정보를 담는 것을 의미하는데, 하나의 데이터가 아닌 여러 데이터를 담을 때 사용한다. 여러 개의 String 객체들을 하나의 객체에 담는다고 생각해보자. 배열에 담아도 될 것이다. 성능상이나 메모리 효율면에서 가장 좋기 때문이다. 그러나 배열은 그 크기가 정해져 있을 때 유용하다. 그런데 담으려는 데이터의 크기가 얼마나 되는지 모르는 경우엔 어떻게 할까? 자바에서 데이터를 담는 자료 구조는 크게 다음과 같이 분류할 수 있다. · 순서가 있는 목록(List)형 · 순서가 중요하지 않은 셋(Set)형 · 먼저 들어온 것이 먼저 나가는 큐(Queu..
* 제네릭이란? 제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다. 메소드 안에서 매개변수와 비슷하게 동작할 수 있다. 이 매개변수는 어떠한 변수에 들어갈 값과 관련되어 있는데 이때 제네릭은 그 변수의 데이터 타입과 관련되어 있다. * 실수를 방지할 수 있도록 도와주는 제네릭 점(.) 하나, 쉼표(,), 세미콜론(;) 하나 잘못 찍어 컴파일이 안 된 경우 이클립스 사용 시 코딩 단계에서 매우 쉽게 걸러낼 수 있다. 그러나 실행시 개발자가 미처 생각하지 못한 부분에서 프로그램이 예외를 발생시키는 경우 그 원인을 찾기 쉽지 않은데, 이러한 경우를 대비하기 위해 메소드 개발과 함께 JUnit과 같은 테스트를 잘 해야 한다. 아래 코드를 보자 class Person..
* 각종 정보를 확인하기 위한 System 클래스 System 클래스의 가장 큰 특징은 생성자가 없다는 것이다. System 클래스의 3개의 static 변수가 선언되어 있는데 타입과 변수 명은 다음과 같다. 선언 및 리턴 타입 변수명 설명 static PrintStream err 에러 및 오류를 출력할 때 사용한다. static InputStream in 입력값을 처리할 때 사용한다. static PrintStream out 출력값을 처리할 때 사용한다. System은 클래스 이름이다. 그 다음의 out은 위의 staitic으로 선언된 변수 이름이다. 위의 표를 보면 알 수 있듯 out은 PrintStream 타입이다. 그러므로 println() 메소드는 PrintStream 클래스에 선언되어 있으며,..
* 특별한 java.lang 자바의 패키지 중 유일하게 java.lang 패키지에 있는 클래스들은 import를 안해도 사용할 수 있다. java.lang과 java.util 패키지를 제외한 대부분의 java로 시작하는 패키지들은 패키지 이름만 보고도 어떤 일을 할 때 사용하는지를 알 수 있다. java.lang 패키지에서 제공하는 인터페이스, 클래스, 예외 클래스 등은 다음과 같이 분류할 수 있다. º 언어 관련 기본 º 문자열 관련 º 기본 자료형 및 숫자 관련 º 쓰레드 관련 º 예외 관련 º 런타임 관련 각 분류에는 어떤 인터페이스, 클래스, 예외 및 에러가 있는지 알아보자. 구분 타입 항목들 언어 관련 기본 인터페이스 Cloneable, Comparable, Iterable, Readable 클..