글

{{ label!='' ? 'Label : ' : (q!='' ? '검색 : ' : '전체 게시글') }} {{ label }} {{ q }} {{ ('('+(pubs|date:'yyyy-MM')+')') }}

[Java] 자바로 프로그래밍 입문하기: 3.3. 자료형 설계하기 (4)

이미지
응용프로그램: 데이터 마이닝(data mining)   이번 절에서 논의된 몇몇 개념들을 응용프로그램의 문맥에서 좀 더 설명하기 위해, 우리는  데이터 마이닝 의 어려운 과제를 해결하기에 중요한 소프트웨어 기술에 대해 알아볼 것입니다.  데이터 마이닝 은 웹에서 모든 사용자가 접근할 수 있는 아주 많은 정보들을 검색하는 절차를 기술할 때 널리 쓰이는 용어입니다.    이 기술은 웹 검색 결과의 질적 향상을 극적으로 꾀할 수 있게 만듭니다. 멀티미디어 정보 검색, 바이오메디컬 데이터베이스, 표절 검사, 게놈 연구, 상업 응용프로그램에서의 혁신, 범죄자의 프로파일링 등 다양한 목적으로 사용될 수 있죠. 따라서 아주 주목 받는 분야 중 하나이며, 데이터 마이닝에 대한 연구도 활발히 이루어지고 있습니다.   여러분은 여러분의 컴퓨터에 있는 수천 개의 파일에 직접 접근할 수 있습니다. 또한 웹에 있는 수십억 개의 파일에 우회적으로 접근할 수 있죠. 이 파일들은 아주 다양합니다: 상업 웹 페이지도 있고, 음악과 영상, 이메일, 프로그램 코드 등 다양한 정보를 담고 있죠. 간단하게 생각해보기 위해, 우리는 텍스트 문서에만 집중하도록 합시다.(물론 우리가 고려할 방법은 사진, 음악 등의 파일에도 잘 적용해볼 수 있습니다)    텍스트 문서에만 집중함에도, 여전히 수많은 종류의 문서들이 존재할 것입니다. 우리의 관심은 문서를 특성화하기 위해  콘텐츠 를 사용하여 파일을 검색하는 효율적인 방법을 찾는 것입니다. 이 문제에 대한 생산적인 접근법 중 하나는, 콘텐츠의 기능인  프로필 (profile)이라고 하는 벡터와 각 문서를 연관시키는 것입니다. 이는 곧, 프로필은 문서를 특성화해야 하며, 따라서 문서는 서로 다른 프로필을 가지고, 비슷한 문서는 비슷한 프로필을 가져야 한다는 것입니다.  텍스트 문서들   여러분은 아마 이 접근법이 소설과 자바 프로그램, 게놈 사이를 구별할...

[Java] 자바로 프로그래밍 입문하기: 3.3. 자료형 설계하기 (3)

이미지
 상속(Inheritance)   자바에서는 객체 간의 관계를 정의할 수 있습니다. 바로 상속 입니다. 소프트웨어 개발은 이 메커니즘을 널리 사용하며, 여러분이 소프트웨어 공학에 관심이 있다면 자세히 알아야 하는 부분 중 하나입니다. 이러한 메커니즘을 효과적으로 활용하는 방법에 대한 것은 이 강의의 범위를 벗어나지만, 어차피 여러분들이 곧 직면하게 될 요소이므로 간단하게 설명하려고 합니다. 인터페이스(Interfaces)   인터페이스는 관련되지 않은 클래스들 간의 관계를 명세하는 메커니즘입니다. 구현 클래스(implementing class)는 반드시 포함해야 하는 메소드들이 존재하죠. 우리는 이를 인터페이스 상속이라고 말합니다. 구현 클래스는 API에 없는 메소드를 인터페이스로부터 상속 받기 때문입니다. 이러한 방식은 우리에게 다양한 자료형의 객체를 다룰 수 있는 클라이언트 프로그램을 작성할 수 있게 합니다. 인터페이스의 메소드를 호출하기만 하면 되죠. 새로운 프로그래밍의 개념들을 접하면 처음엔 혼란스럽긴 하겠습니다만, 계속 예제를 보다보면 감이 올 것입니다. Comparable   여러분이 접하기 쉬운 인터페이스 중 하나는 자바의 Comparable 입니다. 다음에 기술될 API인 compareTo() 메소드를 통해서 자료형의 자연 순서(natural order)를 연관 짓는 인터페이스입니다. 자바의 Comparable 인터페이스 API   <Key> 부분은 4.3절에서 다뤄볼 표현법이며, 비교가 될 두 객체가 같은 자료형임을 보장하는 것입니다. a와 b가 같은 객체라는 전제 하에, a.compareTo(b)는 반드시 다음을 반환합니다: b보다 작으면 음수 b보다 크면 양수 b와 같으면 0   추가적으로, compareTo() 메소드는 일관성을 지녀야합니다: 예를 들어, a가 b보다 작다면, 반드시 b는 a보다 커야합니다. Comparable 인터페이스를 구현하는 클래스(String, Inte...

[Java] 자바로 프로그래밍 입문하기: 3.3. 자료형 설계하기 (2)

이미지
불변성(Immutability)   자바의 String과 같은 불변 자료형은 한 번 생성되면 그 값이 절대 변하지 않는다는 특성을 가지고 있습니다. 반면, 자바의 배열과 같은 가변 자료형은 변할 가능성이 있는 객체의 값들을 다루죠. 이 장에서 다루었던 자료형들 중, <Charge>, <Color>, <Stopwatch>, <Complex>는 불변 객체이며, <Picture>, <Histogram>, <Turtle>, <StcokAccount>, <Counter>는 가변 객체입니다. 자료형을 불변으로 만들 것인지에 대한 것은 중요한 설계 결정 중 하나이며, 응용프로그램의 목적에 따라 달라집니다. 불변형(Immutable types)   많은 자료형의 목적은 변하지 않는 값을 캡슐화하고 기본 자료형과 같은 방식으로 동작하게 만드는 것입니다. 예를 들어, 한 프로그래머가 <Complex> 클라이언트를 구현한다면 아마도 코드에서 두 복소수 변수와 관해 z = z 0 와 같이 작성했을 것입니다. 이는 double형이나 int형 변수와 같은 방식이죠.   하지만 <Complex>가 가변형일 때를 생각해보죠. z의 값이 z = z 0 이라는 대입문 이후에 바뀌었다면, z 0 값 역시 바뀌게 됩니다. 왜냐하면, z와 z 0 은 같은 객체를 참조하고 있기 때문이죠! 이러한 예상치 못한 결과로 인해 흔히 앨리어싱(aliasing) 버그라고 하는 것이 발생하며, 객체지향 프로그래밍의 입문자들을 깜짝 놀라게 만드는 원인 중 하나입니다.   우리가 불변 객체를 구현하는 아주 중요한 이유 중 하나는 대입문과 함수의 인자, 반환값으로부터 그것들이 변할 가능성에 대한 걱정을 덜어낼 수 있다는 사실입니다. 가변형(Mutable types)   많은 자료형 추상화의 주된 목적은 변하는 값을 캡슐화하기 위함입니다. <Turtl...

[Java] 자바로 프로그래밍 입문하기: 3.3. 자료형 설계하기 (1)

이미지
  자료형 설계하기   자료형을 생성할 수 있게 됨으로써, 모든 프로그래머들은 언어 디자이너가 될 수 있습니다. 여러분들은 내장 자료형의 굴레에서 벗어나 자신만의 자료형으로 원하는 클라이언트 프로그램을 작성할 수 있습니다.    자바는 복소수 자료형을 내장하지 않았으나, 여러분들은 <Complex>를 정의하고 <Mandelbrot> 프로그램을 작성하였죠. 자바는 터틀 그래픽을 내장하지 않았으나, 여러분들은 <Turtle>을 정의하고 다양한 클라이언트 프로그램들을 작성하였습니다.    또한 자바에서 특정 기능을 지원하더라도, 그것을 자신이 사용하기 편하게 조정하여 사용할 필요가 있습니다. 자바는 입출력에 대한 기능을 충분히 제공하지만, Std* 라이브러리를 이용해서 좀 더 편하게 사용한 것처럼 말이죠.   이제부터 우리가 프로그램을 만들 때 고민해야 할 첫번째 사항은, 우리가 필요한 자료형에 대해서 이해하는 것입니다. 이러한 행위는 곧 설계 행위입니다. 이번 절에서 우리는 어떤 프로그램의 개발이든 간에 핵심적인 단계인, API를 개발하는 것에 집중해볼 것입니다.   다양한 대안에 대해서 고민해보고, 그것이 클라이언트 프로그램과 구현에 끼치는 영향을 이해하며, 구현 전략과 클라이언트의 필요 사이에서 적절한 균형을 맞추기 위해 설계를 고쳐볼 것입니다.    이번 절에서 우리는 캡슐화 , 불변성 , 상속 에 대해 논의할 것입니다. 특히, 모듈화 프로그래밍과 디버깅을 가능케 하고, 명료하고 정확한 코드를 작성할 수 있게 만드는 자료형 설계에 집중할 것입니다.   이번 절의 마지막에는, 런타임에서 설계의 가정을 점검하기 위해 사용되는 자바의 메커니즘에 대해 이야기할 것입니다. 이러한 도구들은 신뢰성 높은 소프트웨어를 개발하는데 굉장히 큰 도움이 됩니다. API 설계하기   3.1절에서, 우리는 API를 사용하는 클라이언트 프로그램을 ...