본문 바로가기

728x90
반응형

Java

(10)
자바 인터페이스 추상클래스 차이점 쓰는 이유 자바에서는 추상메서드 형태로 생성해서 하위클래스에서 직접 메소드를 생성하는 추상클래스와 인터페이스가 있습니다. 비교가 많이 되는데 둘의 공통점은 추상메소드를 가지고 있다는 점입니다. 좀 더 자세히 알아보도록 하겠습니다. 추상클래스 클래스 내에 추상메소드가 하나 이상 포함되거나 클래스가 abstract로 정의된 경우를 추상클래스라고 합니다. 인터페이스 모든 메소드가 추상메소드로 이루어진 경우를 말합니다. (자바8부터는 default 키워드를 사용해서 일반 메소드 구현도 가능합니다.) 추상클래스와 인터페이스를 상속받은 클래스는 추상클래스 혹은 인터페이스에 있는 모든 추상메소드를 구현하도록 강제합니다. 두 가지 모두 추상메소드 구현을 강제한다면 추상클래스만 있어도 될 것 같은 느낌이 들죠? 그런데, 왜 두 가..
DTO로 변환할 때 PropertyNamingStrategy 사용 snake->camel 변환 카카오 다음 지도 API를 사용하던 도중 응답이 _ 언더바가 포함된 SNAKE타입으로 와서 camel형태로 변환하여 받으려고 한다. 응답예시 { "documents":[ { "address_name":"서울 강남구 삼성동 172-66", "category_group_code":"SW8", "category_group_name":"지하철역", "category_name":"교통,수송 \u003e 지하철,전철 \u003e 수도권2호선", "distance":"", "id":"21160620", "phone":"02-6110-2191", "place_name":"삼성역 2호선", "place_url":"http://place.map.kakao.com/21160620", "road_address_name":"서..
JAVA GC가 발생하는 시기(Garbage Collector) JAVA GC? java에서 메모리는 GC가 관리하기 때문에 개발자가 따로 메모리를 관리하는 로직을 넣을 필요가 없다. (만들어서는 안된다) Garbage Collector 쓰레기를 정리하는 작업으로 자바에서 쓰레기는 객체를 의미한다. 객체가 메모리를 점유하고, 필요가 없으면 메모리에서 해제되어야 한다. JAVA Runtime Data Area 프로그램이 실행되면 JVM은 OS로 부터 필요한 메모리를 할당받은 후 용도에 따라 여러 영역으로 나눈다. 자바 컴파일러(javac)가 소스코드(java)를 읽어서 바이트 코드로 변환한다.(.class) 그리고 클래스로더를 통해 JVM으로 로딩하는데 로딩된 class파일들은 실행엔진을 통해 해석된다. 해석된 바이트코드는 Runtime Data Area에 배치되어 수..
JAVA enum vs static 비교 enum이란? 비단 자바에만 있는 개념은 아니고 다른 언어에서도 볼 수 있는 형식이다. 열거형이라 불리며 요소, 멤버라 명명된 값의 집합을 이루는 자료형으로 열거자 이름들은 해당언어의 상수 역할을 하는 식별자이다. (출처 : 위키백과) enum의 장점 코드가 단순해지며 가독성이 좋다. 인스턴스 생성, 상속을 방지하며 상수값의 타입 안전성이 보장된다. enum이라는 키워드로 열거형의 의도를 명확히 드러낸다. enum이 나온 배경 1. 코드에 주석이 없을 경우 코드를 이해하기 어려움 int type = 1; if(type == 1) { System.out.println("boy"); } else { System.out.println("girl"); } type에 대한 주석이나 if문 안에서 처리하는 내용에 ..
JAVA 직렬화란? 직렬화 사용이유 JAVA 직렬화란? JAVA시스템 내부에서 사용되는 데이터나 객체들을 외부 자바 시스템에서도 사용할 수 있도록 byte형태로 변환하는 기술로 바이트로 변환된 데이터를 다시 객체로 변환하는 역직렬화도 포함된다. 대부분 OS 프로세스를 구현할 때 서로 다른 가상 메모리공간에 있는 Object type의 참조값 데이터 인스턴스는 전달 할 수 없다. 전달한다고 해도 서로 다른 메모리 공간에서는 무의미하다. 서로 다른 memory공간사이에서 데이터를 전달할 때 주소값이 아닌 직렬화된 객체 데이터를 이용할 수 있다.(이것이 직렬화) JAVA시스템간에 존재하는 것으로 Data type이 자동으로 맞춰진다. example) JAVA안에서 객체 안에 객체가 존재할 수 있는데 Parent객체 안에 Child객체가 있을 때..
java static 사용이유 생성자 대신 static 팩토리 메소드 JAVA Static 이란? 고정된 이란 의미를 가지며 static변수와 static메소드를 만들 수 있다. 메모리에 한 번 할당되어서 프로그램이 종료될때 해제되는 것을 의미한다. GC가 적용되지 않는다. 일반적으로 Class는 static영역에 할당되고 new를 통해 생성된 객체는 heap영역에 생성된다. heap영역의 메모리는 gc를 통해 관리를 받지만 static영역에 할당된 메모리는 모든 객체가 공유하는 장점이 있지만 GC관리 영역밖에 존재하기 때문에 자주 사용할 경우 퍼포먼스에 악영향을 줄 수 있다. Static을 사용하는 이유 인스턴스를 생성할 경우 각 인스턴스는 독립적이기 때문에 서로 다른 값을 유지한다. static을 사용하면 클래스가 메모리에 올라갈 때 이미 자동적으로 생성되기때문에 인스..
JAVA Optional JAVA Optional T type의 객체를 포장해주는 래퍼 클래스이다. Optional 인스턴스는 모든 타입의 참조변수를 저장할 수 있다. null 일 수도 있는 객체를 감싸고 있다. Optional을 쓰는 이유 NullPointerException을 직접 다루지 않아도 된다. null 체크를 직접 하지 않아도 된다. null일 수도 있다는 가능성을 담고 있기 때문에 방어로직을 줄일 수 있다. Optional 초기화 하기 Optiona.empty() Optional addressOptional = Optional.empty(); empty()를 통해서 초기화하면 비어있는 Optional 객체를 가지고 온다. Optional.of(value) Address addr = new Address(); Opt..
JAVA Stream API 란? JAVA Stream ? JAVA 8에서 추가된 기능으로 Array나 Collections 처럼 연속된 형태의 객체를 데이터로 받아서 method로 처리하는 기능이다. 입력된 데이터의 자료구조 자체를 변경하지 않고 결과를 파이프라인 형태로 제공한다. Stream API를 쓰는 이유는 가독성을 향상시키고 성능을 향상시키기 위해서이다. Stream 형태로 한 번 사용후에는 재사용이 불가능한 일회성이다. Stream 사용 전 String[] strArr = { "Best Friends", "Apple Ice Cream", "Island" }; List strList = Arrays.asList(strArr); Arrays.sort(strArr); Collections.sort(strList); for(Stri..

728x90
반응형