본문 바로가기

Programming

(477)
제네릭(2) - 멀티타입 파라미터 제네릭을 통해서 타입을 파라미터 형태로 선언하고, 상황에 맞게 지정할 수 있다는 점을 배웠습니다. 그런데 꼭 하나의 파라미터만 선언이 가능한 것일까요? 제네릭은 두 개 이상의 타입 파라미터를 선언해 사용이 가능합니다. 즉, 멀티타입 파라미터를 사용할 수 있다는 의미죠. 앞서 살펴본 제네릭 타입 클래스에서의 내용을 상기하며 다음 클래스 Product를 살펴보겠습니다. 타입 파라미터를 T와 M, 두 가지를 선언하고 T와 M에 대해 각각 필드, getter, setter를 선언했습니다. public class Product { private T kind; private M model; public T getKind() { return this.kind; } public M getModel() { return ..
[CSS] 4. 레이아웃 설계(3) - position과 위치 속성 3 : absolute 앞서서 position 속성의 relative까지 살펴보았습니다. 이제 absolute에 대해서도 살펴보아야 하겠습니다. ▷ absolute absolute는 정말이지 단어의 절대적인 뜻 풀이에 현혹(?)되어서는 안 되는 속성 값입니다. relative와 반대되는 '절대 위치'도 아니고 오히려 relative와 연계성이 강한 속성입니다. 다시 한번 말씀드리지만 position 속성의 relative와 absolute 속성 값은 단어의 의미로 연상하지 말고, 그냥 특성을 이해해야 합니다. 우선 position이 absolute로 선언된다면, 일단 기존의 HTML 문서 배치 컨텍스트에서 벗어나게 됩니다. 예를 들어 앞선 예제에서 세 개를 배치했는데, 두 번째 에 적용하게 된다면 첫 번째와 세 번째 요소는 이..
제네릭(1) - 제네릭 타입 2 앞서 제네릭 타입에 대한 예제를 살펴보기 위해서, 비제네릭 방식으로 구현한 예제를 살펴보았습니다. 비교를 위해서 예제를 다시 한번 보도록 하겠습니다. 제네릭(1) - 제네릭 타입 1 우선은 기본적으로 '제네릭(Generic)' 타입이 무엇인지를 알고 넘어가야 합니다. 제네릭은 컬렉션부터 람다식, 스트림, NIO 등 자바의 intermediate 이상의 레벨에서 학습하는 내용에 빠지지 않고 등장 nozeroslope.tistory.com public class Box { private Object object; public void set(Object object) { this.object = object; } public Object get() { return object; } } public class..
제네릭(1) - 제네릭 타입 1 우선은 기본적으로 '제네릭(Generic)' 타입이 무엇인지를 알고 넘어가야 합니다. 제네릭은 컬렉션부터 람다식, 스트림, NIO 등 자바의 intermediate 이상의 레벨에서 학습하는 내용에 빠지지 않고 등장하기 때문이죠. API 문서에서도 자주 사용하기 때문에 알아두지 못하면 JAVA를 공부하거나 개발 과정에서 꽤나 곤란한 상황을 겪게 됩니다. 기본적으로 제네릭(Generic)은, "타입"을 컨트롤하는 개념입니다. 그래서 제네릭을 사용하게 되면 다음 두 가지 장점을 갖게 됩니다. 첫 번째로 컴파일 과정에서 타입 체크를 강력하게 할 수 있다는 점입니다. 실행되고 에러가 발생하느니, 컴파일 레벨에서 미리 문제를 해결하는 게 낫다는 것이죠. 두 번째로는 불필요한 타입 변환(casting)을 제거할 수 ..
[CSS] 4. 레이아웃 설계(3) - position과 위치 속성 2 : relative 앞의 아티클에서 position 속성과 더불어 요소의 위치 속성(left, right, top, bottom)에 대해서 살펴보았습니다. 이번 아티클에서는 position 속성 값 중 static을 제외한 나머지 요소들에 대해서도 살펴보겠습니다. [CSS] 4. 레이아웃 설계(3) - position과 위치 속성 1 우선 이번 아티클에서는 다음 두 가지 요소에 대해서 다루게 됩니다. 그런데 이렇게 먼저 정리를 하며 설명하는 이유는 새롭게 배우게 되는 두 가지 요소가 연계되어 사용되기 때문입니다. 우선 nozeroslope.tistory.com ▷ relative relative라는 단어의 뜻 때문에, 해당 position 값을 relative로 지정하게 되면 흔히 얘기하는 '상대위치' - 즉 절대 위치가 ..
[CSS] 4. 레이아웃 설계(3) - position과 위치 속성 1 : static 우선 이번 아티클에서는 다음 두 가지 요소에 대해서 다루게 됩니다. 그런데 이렇게 먼저 정리를 하며 설명하는 이유는 새롭게 배우게 되는 두 가지 요소가 연계되어 사용되기 때문입니다. 우선 이 챕터에서는 position 속성에 대해서 배우게 되고, 요소의 위치 속성(left, right, top, bottom)에 대해서 배웁니다. 그럼 position과 위치 속성이 각각 어떻게 영향을 미치게 될지에 대해서도 고민해 보도록 합시다. ○ 요소의 위치 속성 : left, right, top, bottom 위 네 가지 속성은 특정 요소의 스타일 속성에서 사용하게 되면, 해당 요소가 "기준 위치로부터" 얼마나 떨어져 있는지를 지정하게 됩니다. 간단하죠? 각각의 방향에 px 값을 부여하면 해당 요소가 왼쪽으로부터(l..
중첩 클래스&인터페이스(5) - 익명 객체 7 우리는 앞서 로컬 클래스에서의 사용 제한과 관련해, 로컬 클래스에서 메서드의 파라미터나 로컬 변수를 사용하는 경우의 제약 사항에 대해서 학습했습니다. 잘 기억이 나지 않는다면, 'final' 키워드가 힌트가 되겠습니다. 중첩 클래스&인터페이스(3) - 중첩 클래스의 접근 제한자 4 : 로컬 클래스 우선 앞의 아티클과 바로 이어지는 내용이니, 가능한 앞의 내용과 연속해서 확인해 보겠습니다. 우리는 특정 메서드 내부의 로컬 클래스가 선언되었을 때, 이 로컬 클래스가 바깥 메서드의 필드 nozeroslope.tistory.com 익명 객체에서도 마찬가지 입니다. 익명 객체 내부에서는 바깥 클래스의 필드 / 메서드를 제약 없이 사용이 가능합니다. 하지만, 익명 객체 내부에서 "메서드의 파라미터나 로컬 변수를" ..
중첩 클래스&인터페이스(5) - 익명 객체 6 다음 예제를 통해서는 UI 프로그래밍에서 흔히 사용하는 방식을 알아보겠습니다. 여기서도 역시 익명 객체를 활용하는 형태로 구현을 진행하게 됩니다. 예제에서는 버튼의 클릭 이벤트를 Setter를 통해 설정하고, 실행하는 과정을 다루어 보겠습니다. public class Button { OnClickListener listener; void setOnClickListener(OnClickListener listener) { this.listener = listener; } void touch() { listener.onClick(); } interface OnClickListener { void onClick(); } } Button 클래스입니다. 기본적으로 OnClickListener라는 중첩 인터페이스가..