비디오: 토비의 봄 TV 스페셜 - 강대명 - 캐시의 모든 것 2024
자바의 원래 디자인 목표 중 하나는 언어를 최대한 단순하게 유지하는 것이 었습니다. 언어 개발자는 불필요하게 복잡한 C ++ 기능을 사용하여 창 밖으로 던져 넣었습니다. 결과는 우아하고 세련된 언어였습니다. 어떤 사람들은 언어가 너무 매끄 럽다고 말했습니다.
몇 년 동안 논의와 붕괴 이후 자바는 좀 더 복잡해졌습니다. 2004 년까지 Java에는 enum 유형, 향상된 for 루프, 정적 가져 오기 및 기타 흥미로운 새로운 기능이있었습니다. 그러나 가장 많이 언급 된 기능은 제네릭의 도입이었습니다.
ArrayList people = new ArrayList ();
자바 5에서는 새로운 것을 사용했습니다. 예전 자바에서는
ArrayList people = new ArrayList (); 그 당시 ArrayList는 숫자, 계정, 방, 문자열 등 무엇이든 넣기를 원하는 거의 모든 것을 저장할 수있었습니다. ArrayList 클래스는 매우 다재다능했지만이 다재다능 함으로 인해 두통이있었습니다. ArrayList에 무엇이든 넣을 수 있다면, ArrayList에서 벗어나는 것을 쉽게 예측할 수 없습니다.
ArrayList things = new ArrayList (); 소지품. 추가 (새 계정 ()); 계정 myAccount = 가지. get (0); // 사용하지 마십시오. 그것은 나쁜 코드입니다.
세 번째 줄에서 get (0)을 호출하면 things 컬렉션의 가장 초기 값을 가져옵니다. get (0) 호출은 괜찮지 만, 컴파일러는 myAccount에 대한 할당 시도를 질식시킵니다. 세 번째 줄에는 myAccount 변수에 물건 목록에서 얻은 내용을 채울 수 없다는 메시지가 표시됩니다.
-제네릭의 도입으로이 문제가 해결되었습니다:
ArrayListthings = new ArrayList
(); 소지품. 추가 (새 계정 ()); 계정 myAccount = 가지. get (0); //이 코드를 대신 사용하십시오. 좋은 코드입니다.
두 곳을 추가하면 컴파일러가 Account 인스턴스를 저장한다는 것을 알려줍니다. 따라서 이전 코드의 세 번째 행에서는 things 컬렉션에서 값을 얻습니다. 그런 다음 물건에는 Account 객체 만 저장되므로 myAccount가 새 값을 참조하게 만들 수 있습니다.Java 5.0에서는 Java에 제네릭을 추가했습니다. 그러나 Java 5.0이 탄생하자마자 프로그래머는 generics 코드가 얼마나 어색한 지 알게되었습니다.결국 제네릭 내에서 제네릭을 만들 수 있습니다. ArrayList는 일련의 배열을 포함 할 수 있으며 각 배열은 ArrayList가 될 수 있습니다. 따라서 ArrayList
mess = new ArrayList();를 작성할 수 있습니다.
그 혼란 선언의 모든 반복은 프로그래머에게 두통을 안겨줍니다! 이 추함을 피하기 위해 Java 7 이상 버전에는다이아몬드 연산자 , 가 있습니다. 다이아몬드 연산자는 Java가 일반 선언의 앞 부분에 미친 듯이 복잡한 것을 다시 사용하도록 알려줍니다.
이 예에서 를 한 번만 쓰지 만 를 다시 사용하도록 Java에 지시합니다. 간소화 된 Java 7 코드의 모습은 다음과 같습니다. ArrayList
mess = new ArrayList (); Java 7 및 이후 버전에서 두 가지 혼란 선언 (ArrayList []가 두 번 발생하는 원래의 불쾌한 선언 또는 다이아몬드 연산자와 하나의 ArrayList [] 만 사용하는 유선형 (다소 완고한) 선언을 작성할 수 있습니다. 발생.예, 간소화 된 코드는 여전히 복잡합니다. 그러나 모든 ArrayList [] 반복이 없으면 간소화 된 코드가 덜 번거 롭습니다. Java 7 다이아몬드 연산자는 무언가를 잘못 복사하고 코드에 큰 오류가있을 가능성을 한꺼번에 없애줍니다.