Java

    Java - double brace (생성과 동시에 초기화, 함수호출)

    Java double-brace (더블 브레이스) 사용을 주의하자 double brace initialization : 이중 중괄호 초기화 자바에서는 객체 생성 시 double breace initialization 을 이용하여 생성과 동시에 초기화 할 수 있다. 사실 자바에는 double breace initialization이란 것은 존재하지 않는다. 익명 클래스와 이니셜라이저 블록이라는 두 가지 기능이 함께 사용되어서 그렇게 보일 뿐이다. 그리고 생성과 동시에 함수 호출이 더 맞는 표현이다. Map map = new HashMap(){ { put(1, "영수"); put(2, "별이"); } }; Person person = new Person(){ { setName("영수"); } }; 이름에서도..

    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 List to String array. 리스트를 스트링으로

    Java List to String array 자바에서 List 타입을 String array (String 배열)로 변환하는 방법은 다음과 같다 1. String.join 메소드 List list = Arrays.asList("수", "영", "김"); String joined = String.join(" and ", list); 2. Collectios.joining 메소드 class Person { private String firstName; private String lastName; public Person(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public Strin..

    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..

    8주차 인터페이스

    목표 자바의 인터페이스에 대해 학습하세요. 학습할 것 (필수) 인터페이스 정의하는 방법 인터페이스 구현하는 방법 인터페이스 레퍼런스를 통해 구현체를 사용하는 방법 인터페이스 상속 인터페이스의 기본 메소드 (Default Method), 자바 8 인터페이스의 static 메소드, 자바 8 인터페이스의 private 메소드, 자바 9 인터페이스와 추상클래스의 차이점 추상(abstract) 클래스와 인터페이스(interface) 공통점과 차이점 추상(abstract) : ->사물이 지니고 있는 여러 가지 측면 가운데서 특정한 측면만을 가려내어 포착하는 것 객체의 개념을 이용하여 객체들을 여러 그룹으로 분류함으로써 얻는 장점이 무엇이 있을까? 객체 간의 차이점은 무시하고 객체들 간의 공통점을 파악하기 쉬움 객체..

    7주차 패키지

    목표 자바의 패키지에 대해 학습하세요. 학습할 것 (필수) package 키워드 import 키워드 클래스패스 CLASSPATH 환경변수 -classpath 옵션 접근지시자 package 키워드 패키지 (package) 패키지란 많은 클래스들을 체계적으로 관리하기 위해 존재한다. 패키지의 물리적인 형태는 "파일 시스템의 폴더" 이다. 또한, 파일 시스템의 폴더 기능만이 아니라 클래스의 일부분이다. 소스에 가장 첫 줄에 있어야하고, 패키지 선언은 소스 하나에 하나만 있어야한다. 패키지 이름과 위치한 폴더의 이름이 같아야한다. 패키지이름을 java 로 시작하면 안된다. 패키지는 폴더 또는 디렉토리로서, 우리는 기능이나 특징이 비슷한 클래스를 한대모아 하나의 패키지 않에 넣는다. 서로 관련된 있는 것을 묶어놓..