전체 프로그램에서 단 하나만 생성되는 객체\-> 클래스 외부에서 new 연산자로 생성자 호출할 수 없도록 막아야함\-> 생성자 앞에 private 접근 제한자 작성\-> 자신의 타입인 정적 필드 하나 선언하여 자신의 객체 생성하여 초기화해줌\-> 외부에서 호출할 수 있
단 하나의 값을 저장할 수 있는 메모리 공간int age = 25; 정수(int)값을 저장할 수 있는 age 변수를 선언하고 25로 초기화변수 선언 시 메모리의 빈 공간에 변수타입에 알맞은 크기의 저장공간이 확보되고, 변수이름을 통해 사용가능변수의 초기화란, 변수를 사
연산을 수행하는 기호(+, -, \*, /)연산자의 작업 대상(변수, 상수, 리터럴, 수식)연산 수행 직전에 발생하는 피연산자의 자동 형변환두 피연산자의 타입을 같게 일치시킨다.(보다 큰 타입으로 일치)피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.두 피
만일(if) 조건식이 참(true)이면 괄호{} 안의 문장 수행조건식의 결과는 반드시 true 또는 false단 하나의 조건식으로 많은 경우의 수를 처리할 수 있고, 표현도 간결하다.switch문의 조건식 결과는 정수 또는 문자열이어야 한다.case문의 값은 정수 상수
같은 타입의 여러 변수를 하나의 묶음으로 다루는 것타입\[] 변수이름 = new 타입\[길이];인덱스의 범위는 0부터 '배열길이-1'까지이다.배열은 한번 선언되고 나면 길이를 변경할 수 없기 때문에 길이를 변경할 경우, 더 큰 배열을 새로 생성한 후에 기존 배열을 새로
코드의 재사용성이 높다.코드의 관리가 용이하다.신뢰성이 높은 프로그래밍을 가능하게 한다.객체를 정의해 놓은 것(설계도)객체를 생성하는데 사용실제로 존재하는 것. 사물 또는 개념객체가 가지고 있는 기능과 속성에 따라 다름클래스로부터 객체를 만드는 과정을 클래스의 인스턴스
상속이란, 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여자식 클래스의 인스턴스 생성 시 부모 클래스의 멤버와 자식 클래스의 멤버가 합쳐진 하나의 인스턴스가 생성된다.TV클래
1. 예외처리 1.1 프로그램 오류 자바에서는 실행 시 발생할 수 있는 프로그램 오류를 에러와 예외 두 가지로 구분하였다. 에러 발생 시 프로그램의 비정상적인 종료를 막을 수 없지만, 예외는 프로그래머가 적절한 코드를 미리 작성해 놓으면 비정상적인 종료를 막을 수 있
배열의 단점을 해결하기 위해 다수의 데이터를 다루는 데 필요한 다양하고 풍부한 클래스를 제공하며 인터페이스를 사용하여 구현한다.중복을 허용하면서 저장순서가 유지되는 컬렉션 구현 시 사용중복을 허용하지 않고 저장순서가 유지되지 않는 컬렉션 구현 시 사용키와 값을 하나의
Primitive type(int, float, double)의 경우 부등호로 두 변수 비교가 가능하다. 그렇다면 객체 비교는 어떻게 할까? 객체는 비교기준이 따로 없기 때문에 기준을 정해줘야한다. 이는 Comparable와 Comparator를 통해 해결할 수 있다.
다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입을 체크해주는 기능이다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다.타입 변수 T를 선언하여 어떤 타입이든 한 가지 타입을 정해서 담을 수
JDK1.5부터 열거형이 추가되었는데 이는 값뿐만 아니라 타입까지 체크하기 때문에 타입에 안전하다.enum 열거형이름 { 상수명1, 상수명2, ... }enum Direction {EAST, SOUTH, WEST, NORTH}열거형 상수간의 비교에는 '=='와 equa
과거에는 소스코드와 문서를 따로 관리하였는데 서로 간의 불일치가 발생하였다. 이를 해결하기 위해 소스코드와 문서를 하나로 합치는 javadoc.exe를 만들었다. '/\*\*'로 시작하는 주석 안에 소스코드에 대한 설명들이 있고 '@'이 붙은 태그가 있는데 이를 애너테
메모리에 정적인 상태로 존재하는 프로그램이 프로세스 제어블록을 할당받아 메모리에 올라온 동적인 상태를 프로세스라고 한다. 쉽게 말해서 실행 중인 프로그램을 말한다. 프로세스는 데이터와 메모리 등의 자원과 쓰레드로 구성되어 있는데 실제로 작업을 수행하는 것이 쓰레드이다.
JDK1.8부터 람다식이 도입된 후 자바는 객체지향언어인 동시에 함수형 언어가 되었다. 람다식은 메소드의 이름과 반환값을 생략한 것으로 익명함수라고도 한다. 굳이 메소드 대신 람다식을 쓰는 이유는 뭘까?메소드는 반드시 클래스 내에 포함되어 있어 객체 생성 후 메소드를
싱글턴이란 오직 하나의 인스턴스를 생성할 수 있는 클래스를 말한다. 한 번 생성된 인스턴스를 공유하기 때문에 메모리 낭비를 방지할 수 있으나, 멀티 스레드 환경에서 동시성 문제가 발생할 수 있다.싱글턴을 만드는 방법private 생성자는 Elvis.INSTANCE를 초
정적 멤버만 담은 유틸리티 클래스는 인스턴스를 생성하지 않아도 사용할 수 있다. 하지만, 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만들어주기 때문에 사용자는 이 생성자가 자동으로 생성된 것인지 구분할 수 없다. 추상 클래스로도 인스턴스화를 막을 수 없
문자열 s1, s2, s3는 모두 "TEST"라는 문자열을 갖지만 각각 참조하는 주소가 다르기 때문에 메모리 낭비가 발생한다.imagenew 연산자를 통해 문자열 객체를 생성하는 경우 메모리의 Heap 영역에 할당되어 총 3개의 인스턴스가 생긴 것을 알 수 있다.위 코
GC가 메모리 관리를 자동으로 해준다고 해도 메모리 관리에 신경쓰지 않으면 안된다.대표적으로 스택의 pop 메서드 처리 과정에서 메모리 누수가 발생한다.img스택에서 꺼내진 객체들은 가비지 컬렉션의 대상이 되지 않기 때문에 메모리에 그대로 남아있게 되며, 성능이 저하된
자바가 제공하는 두 가지 객체 소멸자인 finalizer와 cleaner는 예측할 수 없고, 수행 시점을 보장할 수 없어 사용을 지양한다.언제 호출될 지 예측할 수 없다.상황에 따라 위험할 수 있다.Java 9에서는 finalizer 메서드를 deprecated API
자원 회수는 클라이언트가 놓치기 쉬워 예측할 수 없는 성능 문제로 이어지며, 안전망으로 finalizer를 제공하지만 finalizer 사용을 지속적으로 지양하고 있다.try-with-resources를 사용하려면 AutoCloseable 인터페이스를 구현해야 한다.