Java/Java

    객체지향 관점에서의 is-a, has-a

    객체지향 관점에서의 is-a, has-a 클래스 간의 관계를 설정할 때 상속 관계를 맺을 지 포함관계를 맺을 지 헷갈리는 경우가 있다. 상속관계 : extends로 상속을 받은 관계 포함관계 : 내부 멤버로 갖고 있는 관계 이 때, 클래스간의 관계를 is-a, has-a 로 생각을 하면 조금 더 명확하게 구성할 수 있다. is-a : A is B - A는 B이다 has-a : A has B - A는 B를 가지고 있다. is - a (IS - A, ~는 ~이다. ) is-a는 상속관계에서 사용하는 것이 가장 효율적이다. 상속을 사용하면 하위 클래스가 상위 클래스에 종속되기 때문에 이질적인 클래스 사이의 관계에서는 상속을 사용하지 않는것이 좋다. 코드를 재사용할 목적으로 서로 관련이 없는 클래스들을 상속관계..

    Java - 객체 비교에는 Objects.equals()를 사용하자.

    자바에서 객체를 비교할 때는 객체.equals() 보다 Objects.equals 를 사용해서 비교하는것이 NPE(NullPointerException)으로 부터 안전하다. 먼저 객체의 비교에서는 동일성 비교(== 비교)와 동등성 비교(.equals())를 이용해서 비교할 수 있다. 동일성 동일성 (Identity) : 동일하다는 뜻 동등성 동등성 (equality) 다음과 같이 두 객체를 비교하는 경우가 있다고 하자. public void print(Text originText, Text otherText) { if (originText.equals(otherText)) { System.out.println("두 객체가 같다") return; } System.out.println("두 객체가 다르다")..

    Java - 동일성과 동등성 ( ==, equals() )

    동일성과 동등성 (Identity, Equality) 자바에서 객체를 비교할 때는 동일성과 동등성이 무엇인지 알고 비교해야 한다. 동일성(Identity) : 메모리 내 주소값이 같은지 비교한다. 동등성(Equality) : 논리 값, 같은 정보가 동등한지 비교한다. 동일성 동일성 (Identity) : 동일하다는 뜻 동일성은 동일하다는 뜻으로 객체 비교 시 두 객체가 완전히 같은 경우를 의미한다. 비교 대상의 두 객체가 가르키는 메모리 주소가 같은것을 의미한다 Member member1 = new Member("영수"); Member member2 = member1; 자바에서 메모리 주소를 비교하는 연산은 == 연산자로 확인할 수 있다. 변수는 stack영역에 생성되는데, 이 stack영역에 있는 변수..

    Java 박싱과 언박싱, 오토박싱 그리고 성능상 주의할점

    Java Boxing, Unboxing, AutoBoxing 시작하기 전에, 불필요한 AutoBoxing을 줄이고,누적되는 연산이면 primitive Type을 이용한 연산을 하자 Long, Integer보다 primitive 타입을 쓰는 쪽이 훨씬 빠르다 자바에는 자료형이 2가지가 있다. 기본 타입(Primitive Type)과 레퍼런스 타입(Reference Type) 두 타입의 차이점은 이렇다 타입 Primitive Type(기본 타입) Reference Type(참조형 타입 ) 설명 원시 타입, 기본형 타입. 변수의 주소 값에 값이 그대로 저장되는 데이터 타입 참조형 타입. Primitive Type을 제외한 타입들을 이야기 한다. 저장공간 JVM Runtime Data Area중 Stack JV..

    Java 람다표현식의 특징과 Scope, effectively final variable

    람다의 특징 용어 정리 왜 final 또는 effectivly final만 접근할 수 있는가? 들어가기 앞서. 결론 : 멀티쓰레드 환경에서 동작한다면, 람다 내의 각 루프가 다른 쓰레드에서 서로 참조할 수 있기 때문에 레이스 컨디션이 일어날 수 있다. 그러므로 람다식 안에서 람다식 밖의 변수를 참조하려면 final 또는 effectively final 이여야 한다. 하지만 예외로 람다식에서 인덱스 라던가 final이 아닌 지역변수를 참조, 수정하고 싶다면, Java에서 멀티스레드환경에서 동시성을 보장해주는 Atomic 클래스를 사용하면 된다. Java에서 동시성을 제어할 수 있는방법 Java docs - atomic 1. Lambda의 특징 람다에서 지역변수를 사용하려면 다음과 두가지 특징이 있다 람다표..

    Java String Builder와 StringBuffer의 차이점

    (숙제) StringBuilder와 StringBuffer는 무슨 차이가 있는가? String : 문자열 Java에서는 문자열을 다룰 수 있는 객체를 위해 String, StringBuilder, StringBuffer 3가지 클래스를 제공한다. 세 클래스 모두 문자열을 관리하는 클래스라는 공통점이 있지만, 불변(Immutable)인지, 동기화 지원여부에 따라 차이가 있다. String [docs] String class는 불변(immutable)하다. 초기에 생성하면 값이 변하지 않는다는 것이다. 인스턴스가 생성되면 수정이 불가능하다. String 은 constant 형태로, 한 번 생성이 된다면 update 라는 개념이 사라진다. [constant : 상수, 끈임없는] 실제로 자바 코드 정의에서도 f..

    Java String Pool (String Constant Pool) + String.intern()

    String pool (String Constant Pool) + String intern() StringBuilder와 StringBuffer의 차이점에 대해 알기전에, Java가 String을 어떻게 관리하는지 먼저 알아보자. Java에서는 String을 저장하는데 2곳 의 메모리를 사용할 수 있다. ConstantPool Heap String의 생성 방법에 따라 다르게 두 영역에 다르게 저장된다. String을 생성하기 위해서 2가지 방법을 이용할 수 있다. String Literal(리터럴)을 이용하는 방법 new 연산자를 통해 String 객체의 생성자로 문자열 value 주입 String literal = "string!"; // 리터럴로 String 객체 생성 String newStr = n..

    # Java 그룹화, 그룹화 하고 정렬. Stream groupby, groupingBy, sorting Lists after groupingBy

    Java Stream groupby, groupingBy, sorting Lists after groupingBy Java 8 Stream을 이용하여 특정 키값으로 벨류 값 (Value List) 들을 모으는 방법과 그 요소들을 정렬 하는 방법 Java 8 grouping, sorting Lists after groupingBy Java 8 Stream을 이용하여 특정 키값으로 벨류 값 (Value List) 들을 모으는 방법입니다. Map 특정 key 값으로 특정 key에 대응하는 요소 리스트를 Map으로 만들 수 있다. 또한, 요소 리스트를 특정 프로퍼티의 속성에 맞게 정렬 할 수 있습니다 간단한 예제로, 게시물을 예제로 들어보겠습니다. 게시물 들의 값으로, 해당하는 값의 게시물들을 뽑아와야 하는 요..