운영체제에 독립적(JVM 위에서 돌아감-JVM은 운영체제에 의존적)확장성이 높음(객체지향언어의 특성)자동 메모리 관리(Garbage collection)네트워크와 분산처리 지원, 멀티 쓰레드 지원 (멀티 쓰레드에서 스케줄링은 자바 인터프리터가 담당)동적 로딩 지원(모든
자바의 배열(Array)은 생성 시 크기를 결정해줘야한다. 배열은 메모리 확보를 생성식에서 해주기 때문이다. 그리고 이 배열 생성식의 결과를 배열 변수에 대입하면 배열의 참조값(시작 주소)가 이 변수에 저장된다.자바에서 배열은 다양한 방식으로 초기화할 수 있다.마지막처
자바에서는 변수에 실제 값이 담기는지, 아니면 해당 값에 접근하기 위한 주소가 담기는지에 따라 참조형 변수와 기본형 변수로 나뉘어진다.이전 포스팅에서 언급했듯, 기본형 변수에는 다음의 아홉가지가 있고,이외의, 이와 반대되는 개념이 참조형 변수이다.참조형 변수의 예시로는
클래스의 멤버 변수들을 초기화해주는 블럭(혹은 메서드)을 생성자라고 한다. 생성자의 이름은 클래스 이름과 같고, 리턴값은 없다.한편, 생성자를 특별히 구현해주지 않아도 new 클래스이름()을 통해 객체를 생성할 수 있고, 이 생성된 객체의 멤버 변수 값을 찍어보면 모두
자바에서 어떤 클래스가 가진 프로퍼티와 메서드를 확장하여 사용하고 싶을 때, 해당 클래스를 extends 키워드를 통해 상속받는 형식으로 구현한다.extends는 어떨 때 사용할까?상속을 이용하는 경우는 부모 자식 클래스 간에 is-a 관계가 성립할 때이다.이와 대립되
추상 클래스와 인터페이스는 모두 코드의 독립성과 일관성을 유지하는 것에 도움을 준다. 또한 둘 다 내부적으로 abstract 키워드가 붙은 추상 메서드를 갖고 있고, 추상 클래스를 상속 받은 자식 클래스와 인터페이스를 implements한 클래스는 모두 이 추상 메서드
자바에서는 클래스와 클래스 간에 연관 혹은 의존 관계가 있는데, 이 관계가 일회성일 때에 관계는 표현하되, 각각 객체를 생성하고 레퍼런스 변수에 이 값을 담아주는 복잡한 과정을 생략할 수 있는 '내부 클래스(Inner Class)' 를 지원한다.내부 클래스는 이름 그대
Object 클래스는 모든 클래스의 최고 조상 클래스라고 이전 포스팅에서 이야기했다. 그리고 모든 클래스가 공통적으로 상속받는 이 Object 클래스에는 유용한 메서드들이 많이 있고, 이를 필요에 따라 오버라이딩하여 자신이 만든 클래스에 맞게 수정해서 사용하는 것 또한
자바에서 문자열은 String 클래스의 객체를 만드는 방식으로 구현된다. 즉, 문자열은 다른 데이터들과는 다르게 참조형 데이터 타입(그 중에서도 object 데이터 타입)을 가진다. 그런데 이런 String 클래스는 그 자체만으로 문자열을 조작하는 데에 불편함이 많다.
배열, 리스트와 같이 데이터 군을 저장하고 사용하기 위한 표준화된 방법을 제공하는 클래스의 집합을 뜻한다. JDK 1.2 이전까지는 각 클래스들이 서로 다른 방식으로 데이터 군을 다루었지만, 이후 이를 표준화된 방식으로 체계화하였다.컬렉션 프레임워크에는 List, Se
자바의 정렬도 다른 언어들과 마찬가지로 기본적으로는 Arrays.sort() (배열의 경우)를 사용한다. 이때 sort 메서드는 내부적으로 Comparable을 이용해 구현된 것이다.< Comparable과 Comparator 차이점 >Comparable: 오름차
스트림이란 데이터가 이동하는 통로이다. 이제까지 콘솔을 통한 출력은 System.out.println()을, 입력은 Scanner 객체를 당연하게 써왔는데, 사실 이것은 내부적으로 살펴봤을 때 스트림을 이용한 것이다.System.out.println()의 경우 인자값으
프로세스는 실행 중인 프로그램을 의미하며, 쓰레드는 해당 프로그램의 자원을 이용하여 실제로 작업을 수행하는 주체이다. 우리가 일반적으로 짜는 프로그램은 대부분 싱글 쓰레드 프로세스이다. 하나의 자원만을 사용하여 프로그램을 짜는 경우, 혹은 싱글 코어 CPU를 사용하는
1) abc 포함2) 숫자만 3자리3) 알파펫, 숫자만 5자리 이상4) 한글 3~5자리5) 숫자로 시작하지 않고, @문자열.문자열확장자 확인(?i)는 대소문자 구분 없이 매칭시키는 것을 의미한다.사용 방법 1사용 방법 2
자바의 자료구조 중 Map은 두 가지 종류로 구현되어 있다. 바로 HashMap과 TreeMap이다.우선 이전 자료구조 포스팅에서 Map은 key-value 쌍으로 데이터를 저장하는 자료구조라고 이야기했다. Map에 데이터를 넣을 때는 put(), Map에서 데이터를
Arrays.asList는 리스트를 초기화할 때 자주 사용된다. 처음에 다 초기화를 해버리는 Array와 달리 List는 빈 리스트를 만든 후 add를 해주는 식으로만 초기화를 해줄 수 있다는 점이 매우 불편하기 때문이다.그런데, 이 Arrays.asList를 사용할
Slf4j : Simple Logging Facade For Java. Logger의 추상체로써, 다른 로깅 프레임워크의 인터페이스 역할. Slf4j를 사용하면 코드를 유지하면서 다른 구현체로 전환이 용이.logback : Slf4j의 구현체. spring-boot-s
인터페이스 중, 아무 메소드도 선언하지 않고 오로지 이를 Implements한 클래스들이 어떤 역할을 할 수 있다는 사실을 marking하는 존재로만 사용되는 인터페이스.대표적인 예시가 Serializable.마커 인터페이스 대신에 어노테이션을 사용해서 어떤 커스텀 어
자바 8부터 함수형이 도입되며 자바에서도 자바스크립트에서와 같이 함수를 일급 객체 (고차 함수,... 등등 이와 얽힌 용어들이 매우 다양하더라....)로 쓸 수 있게 되었다. 즉 함수를 변수에 할당하고 이를 넘겨주거나 하는 동작이 가능해졌다.Function.apply도
제네릭 generic은 1) 타입 제한 2) 타입 보류 라는 크게 두가지 목적으로 사용된다. 타입 제한을 위해 제네릭이 사용되고 있는 예시는 리스트이다. 제네릭이 도입되기 이전까지 자바에서는 리스트에 담기는 object들의 타입을 명시적으로 지정해주지 않았고, 이로 인해 컴파일 시점에 타입으로 인한 오류를 잡기 힘들어졌다. 가장 좋은 오류는 컴파일 오류...
자바를 좀 더 잘 사용할 수 있는 방법이 없을까 고민하던 중, 자바 개발자들 사이에서는 이펙티브 자바라는 책이 거의 바이블처럼 읽힌다는 사실을 알게 되었다. 그래서 많이 부족하더라도, 여러 번 곱씹어 읽으면서 각 장의 내용을 내가 이해한 방식대로 정리해보려 한다.우
상속에서 쓰임.추상 클래스가 설계도인 인터페이스를 구현(implements)하는 경우\-> 위 예시와 같이 Transport 인터페이스에 정의된 메서드들(반드시 모두 public abstract, 생략 가능)을 override하며 default가 되는 값을 반환해줄 수