프로그래밍/Java 51

Stream 관련 - 예전 방식 vs Stream

요즘 Java8 즉, Functional Programming에 관심이 많아 Kevin님의 동영상으로 공부중입니다. 아마 조만간, Java in Action을 구매해야 할 듯 합니다. 람다, 스트림등이 너무 강력해서 좋네요. ㅎㅎ 아마 그래서 Spring의 경우도 4.0으로 진입이 빨라지지 않았나 싶네요.12345678910111213141516171819202122232425262728293031323334353637public class StreamPractice { public static void main(String[] args) { Stream.of(1,2,3,4,5).forEach(i-> System.out.println(i + " ")); final List numbers = Arrays...

Java - EnumMap에 대한 간단한 사용

새로 나온 EnumMap이란 ? Enum을 Instance로 가지며, Key, Value를 저장하는 Map형태 1234567891011121314151617181920212223242526public class EnumMapEx { enum enumInstance{ Low, High, Middle, Error } public static void main(String[] args) { /** * EnumMap VS HashMap * enumMap의 index는 Enum의 내부 순서를 이용하므로 hashMap의 Hashing을 통한 index보다 효율적이다. * HashMap의 경우 일정한 이상의 자료가 저장 되면, 자체적으로 Resizing을 한다. * 그로 인해 성능 저하가 발생한다. 그러나 EnumM..

Java - Reflection

java.lang.reflect의 핵심 리플렉션 기능을 이용하면, 메모리에 적재된 클래스의 정보를 가져오는 프로그램을 작성 할 수 있다. Class가 주어지면, 해당 객체가 나타내는 클래스의 생성자, 메서드, 필드등을 나타내는 Constructor, Method, Field 객체들을 가져 올수 있으며, 이 객체를 이용하여, 클래스의 멤버 이름이나, 필드 자료형, 메서드 시그니처 정보를 얻을 수 있다. 그리고, 해당 객체를 이용하여, 연결 되어 있는 생성자, 메서드, 필드들을 Reflectively 조작 할 수 있다. 단점- 컴파일 시점에 자료형을 검사하는 이점을 포기해야 함- 리플렉션 기능을 이용하는 코드는 난잡하다.- 성능이 낮다. 리플렉션이 필요한 프로그램- 클래스 브라우저- 객체 검사도구- 코드 분..

Java - 객체 참조시 자료형을 인터페이스를 선호하라.

자료형 타입을 해당 클래스로 한다면, 확장성이 떨어진다. 대신 인터페이스 타입으로 한다면, 객체에 대한 확장성이 높아지므로 선호하도록 하자. 단, 일반 인터페이스 구현 규약에는 없는 특별한 기능인, 동기화라던지 특수 기능이 있다면,클래스로 참조하는 것이 당연하다. 그리고, 마땅한 인터페이스가 없다면 그것 또한 클래스를 참조하는 것이 당연하다. 1234 //Good List subcribers = new Vector(); //Bad Vector subcribers = new Vector();cs 무단 수정 및 배포는 금지합니다. 모든 내용은 본 블로그 운영자가 정리한 내용입니다. 참조한 정보에 대해서는 출처를 남기고 있습니다. 틀린 내용 / 오류가 포함된 내용은 댓글로 남겨주세요. choiseungho08..

Java - 변경 불가능한 객체 관한 이야기

123456789101112131415161718192021222324252627282930313233public final class Period { //객체의 컴포넌트로는 가능하다면, 변경 불가능한 객체를 사용해야 한다는 점이 핵심이다. private final Date start; private final Date end; // public Period(Date start, Date end) {// if (start.compareTo(end) > 0) {// throw new IllegalArgumentException(start + " After " + end);// }// this.start = start;// this.end = end;// } public Period(Date start, D..

Intellij에서 Java lambda 사용시 Error 해결

IntelliJ를 키고 나서 오? 남는 시간 자바 8의 신기능 람다식을 써보자꾸나 해서 켰다. 그런데...아니 내가... 람다식 문법도 몰라도 그렇지 왜 오류가.. 언어 레벨을 지원 안한다고 하는걸까 ? 내가 그렇게 멍청했나;;;;??? 그러던 중 알고보니 레벨을 지정 할 수 있다는 사실을 알았습니다. 방법은 쉽더라구요. 요렇게 하고 적용하니 바로 에러가 따악! 사라지네요 ? 람다식에 대한 포스팅은 조만간 제대로 준비해서 올리겠습니다. 저는 이만.

Java Generic Erasure

제네릭 지우개 기능? 뭐지? 뭘까요 ? C# 코드 Java 코드 두 코드의 차이는 거의 없습니다. 다 모두 제네릭을 인자로 받아 List 타입을 체크 하는 것입니다. 그런데 C#의 코드는 정상적으로 구별 해냅니다. 그 이유는 코드가 컴파일 되는 시점에서 Intermediate Language코드가 타입에 대한 정보도 같이 저장하고 있습니다. 이 코드가 Common Language Runtime 에서 실행 되는 때에 IL코드를 바이너리로 변환 하는데 바이너리 역시 타입 정보까지 변환합니다. 그렇기 때문에 더 우수한 제네릭 기능입니다. 그렇지만 Java의 경우 컴파일 에러를 발생시킵니다. 로 변환하라는 것이죠. 그러나 이 와일드 카드의 의미는 이므로 Object의 자손들 ..

상속에서 다형성 이야기

public class Product { private int price; public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } public Product(int price) { // TODO Auto-generated constructor stub this.price = price; } public Product() { this.price = 100; } } int price는 가격을 의미한다. 이 것은 나중에 자식 클래스에서 물건의 값을 설정 할 것이다. public class TV extends Product{ public TV() { // TODO Auto-generated con..

반응형