일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 티스토리 쿠키 삭제
- iterator
- 데비안
- 스프링 시큐리티
- Kernighan의 C언어 프로그래밍
- /etc/network/interfaces
- 자바편
- 코드로배우는스프링웹프로젝트
- 리눅스
- d
- 처음 만나는 AI수학 with Python
- 목록처리
- 이터레이터
- 자료구조와 함께 배우는 알고리즘 입문
- 자료구조와함께배우는알고리즘입문
- 선형대수
- 구멍가게코딩단
- resttemplate
- 코드로배우는스프링부트웹프로젝트
- 서버설정
- ㅒ
- 스프링부트핵심가이드
- GIT
- 알파회계
- 처음 만나는 AI 수학 with Python
- baeldung
- network configuration
- 네트워크 설정
- 페이징
- 친절한SQL튜닝
- Today
- Total
목록JAVA (13)
bright jazz music
JDK가 제공하는 제네릭 타입과 메서드를 사용하기는 쉽다. 그러나 제네릭 타입을 새로 만들기는 어렵다. 그러나 배워둘 가치가 있다. 아래의 스택 코드를 보자. import java.util.Arrays; import java.util.EmptyStackException; public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { //생성시 크기가 16인 Object타입의 배열 생성 => elements에 할당 elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public..
배열과 제네릭 타입의 차이 배열 배열은 공변(covariant, 함께 변함)한다. Sub가 Super의 하위타입이라면 배열 Sub[]는 배열 Super[]의 하위타입이 된다. 제네릭 제네릭은 공변하지 않는다. 서로 다른 타입 Type1과 Type2가 있을 때, List은 List의 하위 타입도 아니고 상위 타입도 아니다. 리스트를 사용해야 하는 이유 1 : 런타임이 아닌 컴파일 시에 오류를 검출하기 위해 배열을 사용했을 때 : 런타임이 되어서야 오류가 발생함. public class Test { public static void main(String[] args){ Object[] objectArray = new Long[1]; objectArray[0] = "타입이 달라 넣을 수 없다"; //런타임에 ..
제네릭을 사용하면서 컴파일러 경고를 마주하게 된다. 그 종류는 아래와 같다 비검사 형변환 경고 비검사 메서드 호출 경고 비검사 매개변수화 가변인수 타입 경고(참고 https://donghyeon.dev/%EC%9D%B4%ED%8E%99%ED%8B%B0%EB%B8%8C%EC%9E%90%EB%B0%94/2021/04/18/%EC%A0%9C%EB%84%88%EB%A6%AD%EA%B3%BC-%EA%B0%80%EB%B3%80%EC%9D%B8%EC%88%98%EB%A5%BC-%ED%95%A8%EA%BB%98-%EC%93%B8-%EB%95%8C%EB%8A%94-%EC%8B%A0%EC%A4%91%ED%95%98%EC%9E%90/) 비검사 변환 경고 제거하기 쉬운 경고의 예 대부분의 비검사 경고는 쉽게 제거 가능하다. ..
제네릭을 사용하는 이유 제네릭을 사용하면 컬렉션이 담을 수 있는타입을 컴파일러에 알려주게 된다. 따라서 컴파일러는 알아서 형변환(캐스팅) 코드를 추가할 수 있게 된다. 이는 컬렉션에 엉뚱한 타입의 객체가 들어오는 것을 차단한다. 결과적으로 프로그램이 더욱 안전하고 명확해진다. 제네릭이 사용되기 이전의 문제들 자바에서 제네릭을 지원하기 전에는 컬렉션에서 객체를 꺼낼 때마다 형변환(캐스팅)을 해야 했다. (귀찮음) 그런데 누군가 컬렉션에 엉뚱한 타입의 객체를 담아 두었다면 런타임에 형변환 오류가 나곤 했다. (오류 발생) 제네릭은 java 5부터 지원하기 시작했다. 제네릭이란 클래스와 인터페이스 선언에 타입 매개변수(type parameter)가 쓰이면 이를 제네릭 클래스 또는 제네릭 인터페이스라고 한다. ..
아래 페이지를 참고하였다. http://www.tcpschool.com/java/java_generic_various 제네릭 메소드(Generic method) 제네릭 메소드란 메소드의 선언부에 타입 변수를 사용한 메소드를 의미. 이 때 타입변수의 선언은 메소드 선언부에서 반환 타입 바로 앞에 위치 public static void sort(...) { ... } 아래 예제에서 제네릭 클래스에서 정의된 타입변수 T와 제네릭 메소드에서 사용된 타입변수 T는 별개의 것임을 주의. class AnimalList { ... public static void sort(List list, Comparator
아래의 페이지를 참고하였다. http://www.tcpschool.com/java/java_generic_various 타입 변수의 제한 제네릭은 'T'와 같은 타입변수를 사용하여 타입을 제한한다. 이 때 extends 키워드를 사용하면 타입변수에 특정 타입만을 사용하도록 제한할 수 있다. 예시 class AnimalList { ... } 위와 같이 클래스의 타입변수를 제한하면 클래스 내부에서 사용되는 모든 타입변수에 제한이 걸린다. * 이렇게 타입변수를 제한하는 경우, 인터페이스를 구현할 때도 implements가 아닌 extends 키워드를 사용해야 한다. //인터페이스 interface WarmBlood { ... } class AnimalList { //implements를 사용해서는 안 된다. ..
아래의 페이지를 참고하였다. http://www.tcpschool.com/java/java_generic_concept Generic 자바에서의 제네릭은 데이터의 타입을 일반화 한다는 것을 의미(generalize) 제네릭은 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법 컴파일 시에 미리 타입검사를 수행하면 아래와 같은 장점을 가진다. 1. 클래스나 메소드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있다. 2. 반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있다. JDK 1.5 이전에는 여러 타입을 사용하는 대부분의 클래스나 메소드에서, 파라미터나 반환 값으로 Object를 사용했다. 이 경우 반환된 Object 객체를 다시 원하는 타입으로 타입 ..
이곳의 예제를 참고하였다. https://cloudstudying.kr/challenges/429 package com.example.demospring.testFile; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class TestUpcasting { public static void main(String[] args) { // 다양한 객체 생성 Bird bird = new Bird(); Helicopter copter = new Helicopter(); Rocket rocket = new Rocket(); // 인터페이스 타입으로 그룹화 //1. 어레이 Flyable[] flyableThing..
정적 팩터리와 생성자에 모두 존재하는 제약: 매개변수가 많을 때 적절히 대응하기 어렵다. 대응 패턴 1. 점층적 생성자 패턴 2. 자바 빈즈 패턴 3. 빌더 패턴 1. 점층적 생성자 패턴(telescoping constructor pattern) - 과거에는 점층적 생성자 패턴을 흔히 사용했다. 매개변수를 적게 가지는 생성자부터 많이 가지는 생성자까지 여러 개의 생성자를 만드는 것이다. - 자신이 원하는 파라미터 조합을 가진 파라미터가 없을 경우, 각각 다른 생성자를 조합하여 객체를 만들거나 아니면 애초에 많은 파라미터를 가진 생성자를 사용해야 했다. 이 때 필요 없는 값에도 아규먼트를 넘겨줘야 했다. - 매개변수가 많아지면 이 패턴은 사용하기 어려워 진다. 코드를 작성하거나 읽기 어려울 뿐만 아니라, ..
- 클라이언트가 클래스의 인스턴스를 얻는 전통적인 수단은 public 생성자(constructor)를 사용하는 것이다. - 그러나 클래스는 생성자와 별도로 정적 팩토리 메서드(static factory method)를 제공한다. - static factory method는 해당 클래스의 인스턴스를 반환한다. 예시) public static Boolean valueOf(boolean b) { return b ? Booelan.TRUE : Boolean.FALSE } // boolean 기본 타입의 Boxed Class인 Boolean에서 발췌한 것. // 이 메서드는 기본 타입인 boolean 값을 받아 Boolean 객체 잠조로 변환해 준다. 클래스는 클라이언트에게 public 생성자 대신 (혹은 생성자..