목록분류 전체보기 (59)
보리차
회사에서 특정 모듈을 실행하는 쉘 스크립트를 작성하게 되었다. 해당 모듈에는 다양한 기능이 포함되어 있고 각각의 기능들을 입력받은 parameter 값에 따라 실행하도록 코드를 분리해두었다. 그러다 보니 모듈 실행 시 입력해야 하는 인자값이 많게는 4개가 넘어가게 되었다. 이렇게 입력 값이 너무 많은데 인자 값을 잘못 입력해도 쉘에선 아무런 검증을 하지 않다보니 사용자는 값을 제대로 입력했는지 알기가 어렵다. 또 입력 값의 순서나 어떤 값을 어떤 형태로 입력해야 하는지도 너무 복잡했다. 해당 쉘을 사용하는 가이드 문서를 작성하기는 했지만 매번 쉘을 실행할 때마다 가이드를 찾아서 읽어야 한다면 너무 비효율적일 것이다. 팀장님께서 해당 문제에 대해 조언을 해주셔서 쉘에 쉘 사용법과 입력 값 검증에 대한 부분..
컬렉션 기반 알고리즘 정렬 public static
Set 인터페이스를 구현하는 컬렉션 클래스들 Set을 구현하는 클래스의 특성 저장 순서가 유지되지 않는다. 데이터의 중복 저장을 허용하지 않는다. HashSet 클래스 HashSet클래스의 메소드는 List 클래스의 메소드들과 같지만 출력 결과를 확인해보면 저장 순서가 유지되지 않고 중복 저장이 허용되지 않음을 알 수 있다. 그렇다면 동일한 데이터로 판단하는 기준은 무엇일까? public static void main(String[] args) { HashSet set = new HashSet(); set.add(new Num(7799)); set.add(new Num(7799)); .... } 위 코드의 실행 결과를 보면 같은 7799를 저장하는 Num 클래스의 인스턴스를 다른 인스턴스로 간주하는 것을..
컬렉션 프레임워크 '프레임워크'란 자바에서 말하는 프레임워크란 "잘 정의된 구조의 클래스들"이라고 이해할 수 있다. 하지만 이를 '컬렉션 라이브러리'라 하지 않고 '컬렉션 프레임워크'라 하는 이유는 컬렉션 관련된 클래스의 정의에 적용되는 설계 원칙 또는 구조가 존재하기 때문이다. 컬렉션의 의미와 자료구조 컴퓨터 분야에는 '자료구조(Data Structures)'와 알고리즘(Algorithms)'이라는 학문이 있다. 자료구조에서 정형화하고 있는 데이터의 저장 방식 중 대표적인 몇가지는 다음과 같다. 리스트(List), 스택(Stack), 큐(Queue), 트리(Tree), 해쉬(Hash) 위 자료구조들을 대상으로 하는 비교적 간단한 알고리즘 몇 가지는 다음과 같다. 버블 정렬(Bubble Sort), 퀵 ..
제네릭 클래스와 상속 제네릭 클래스도 상속이 가능하다. 아래 예제를 살펴보자 class Box {...} class StreelBox extends Box {...} class GenericInheritance { public static void main(String[] args) { Box iBox = new SteelBox(7959); Box sBox = new SteelBox("Simple); } } 앞 chapter에서 Box를 '매개변수화 타입' 또는 '제네릭 타입' 이라고 설명했는데 이것은 Box를 일종의 자료형으로, 정확히는 클래스의 이름으로 간주함을 뜻한다. 따라서 위와 같은 상속의 관계가 형성될 수 있다. SteelBox 클래스는 Box 클래스를 상속한다 SteelBox 제네릭 타입은 ..
제네릭의 이해 제네릭이 갖는 의미는 '일반화'로 자바에서 일반화의 대상은 자료형이다. 제네릭 이전의 코드 class Apple {...} class Orange {...} class Box { private Object ob; public void set(Object o) { ob = o; } public void get(Object o) { return ob; } } class FruitAndBox { public static void main(String[] args) { Box aBox = new Box(); Box oBox = new Box(); aBox.set(new Apple()); oBox.set(new Orange()); Apple ap = (Apple)aBox.get();// Box 인스..
래퍼 클래스(Wrapper class) 기본 자료형의 값을 감싸는 클래스 int형 정수나 double형 실수와 같은 기본 자료형의 값들도 인스턴스로 표현해야 하는 경우가 있다. (인스턴스를 인자로 요구하는 메소드를 사용할 때 등) 이러한 상황에서 '래퍼 클래스'를 사용한다. 래퍼 크래스는 기본 자료형의 값을 감싸는 클래스이다. 자바에서는 모든 기본 자료형을 대상으로 래퍼 클래스가 정의되어 있다. Booleanpublic Boolean(boolean value) Characterpublic Character(char value) Bytepublic Byte(byte value) Shortpublic Short(short value) Integerpublic Integer(int value) Longpubl..
자바 가상머신의 메모리 관리 방식을 가리켜 '자바 메모리 모델'이라 하는데, 이는 자바의 이해에 있어서 매우 중요한 내용이다. 자바 가상머신의 메모리 모델 자바 가상머신은 운영체제가 할당해 주는 메모리 공간을 기반으로 스스로를 실행하면서 더불어 자바 응용 프로그램의 실행도 돕는다. 자바 가상머신의 메모리 관리 가상머신은 메모리 공간을 크게 세 개의 영역으로 나눈다. 메소드 영역 (Method Area) 메소드의 바이트코드, static 변수 스택 영역 (Stack Area) 지역변수, 매개변수 힙 영역 (Heap Area) 인스턴스 메소드 영역 (Method Area) 바이트코드(Bytecode): 소스파일을 컴파일할 때 생성되는, 자바 가상머신에 의해 실행이 가능한 코드. 인스턴스의 생성 및 클래스 변..
자바 예외처리의 기본 자바에서 말하는 예외 프로그램 실행 중에 발생하는 '예외적인 상황'을 줄여서 '예외'라 한다. 즉 예외는 단순한 문법 오류가 아닌 실행 중간에 발생하는 '정상적이지 않은 상황'을 뜻한다. 예외 처리를 위한 try~catch 자바는 예외 상황별로 그 상황을 알리기 위한 클래스를 정의하고 있다. 이러한 클래스를 '예외 클래스'라 한다. 어떤 오류가 발생하면 가상머신은 해당 오류의 예외 클래스의 인스턴스를 생성한다. 이 인스턴스를 프로그래머가 처리하면 예외는 처리된 것으로 간주하여 프로그램을 종요하지 않지만 처리하지 않으면 프로그램은 그냥 종료가 된다. 예외를 처리할 때는 try~catch문을 사용한다. try 영역에서 발생한 예외 상황을 catch 영역에서 처리한다. try { ...관..
추상 메소드만 담고 있는 인터페이스 추상 메소드(Abstract Methods): 몸체가 비어있는 메소드 인터페이스의 기본 골격은 클래스와 동일하다. interface Printable { public void print(String doc); // 추상 메소드 } 인터페이스를 대상으로는 인스턴스 생성이 불가능하다. 다만 다른 클래스에 의해 상속 될 뿐이다. class Printer implements Printable { @Override// 오버라이딩 관계 성립 public void print(String doc) { // Printable 인터페이스의 print 메소드 구현 System.out.println(doc); } } 클래스가 인터페이스를 상속하는 행위는 '상속'이 아닌 '구현(Impleme..