계산을 위해 실제 값을 저장한다.
기본형 변수
특징
객체의 주소를 저장한다.
8개의 기본형을 제외한 나머지 모든 타입.
특징
클래스는 객체를 생성하기 위한 필드와 메소드가 정의되어 있다.
그 클래스로부터 만들어진 객체를 해당 클래스의 인스턴스라고 한다.
클래스로부터 객체를 만들어진 과정을 인스턴스화라고 한다.
객체의 생성과 동시에 인스턴스 변수를 원하는 값으로 초기화할 수 있는 생성자라는 메소드를 제공한다.
생성자의 이름은 해당 클래스의 이름과 같아야한다.
특징
상위 클래스에서 상속받은 메서드를 하위 클래스에서 재정의 하는것이다.
한 클래스 내에 같은 이름의 메소드이지만, 매개변수나 타입이 달라야한다.
자바 프로그램이 실행되면 JVM은 OS로부터 메모리를 할당받고, 그 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.
메모리 공간은 크게 Method(Static) 영역, Stack 영역, Heap 영역으로 구분되고 데이터 타입(자료형)에 따라 각 영역에 나눠서 할당 된다.
클래스 변수(static 변수)
인스턴스 변수
지역 변수
매개 변수
JVM이 동작해서 클래스가 로딩될 때 생성
JVM이 읽어들인 클래스와 인터페이스에 대한 런타임 상수풀, 멤버 변수(필드), 클래스 변수(Static 변수), 상수(final), 생성자와 메서드 등을 저장하는 공간.
메서드 영역에 있는 것은 어느곳에서나 접근 가능
메서드 영역의 데이터는 프로그램의 시작부터 종료 될 때까지 메모리에 남아있다. 그래서 static 메모리에 있는 데이터들은 종료까지 어디서든 사용가능하며 static 데이터를 무분별하게 많이 사용하면 메모리 부족 현상이 일어날수 있다.
메소드 내에 정의하는 기본 자료형에 해당되는 지역변수의 데이터 값이 저장되는 공간
메소드가 호출될 때 스택 영역에 스택 프레임이 생기고 그 안에 메소드를 호출한다.
원시 타입의 데이터에 해당되는 지역변수, 매개변수 데이터 값이 저장된다.
메소드가 호출될 때 메모리에 할당되고 종료되면 메모리에서 사라짐.
스택은 LIFO, 스코프의 범위를 벗어나면 스택 메모리에서 사라짐.
JVM이 관리하는 프로그램 상에서 데이터를 저장하기 위해 런타임 동적으로 할당하여 사용하는 공간, 참조형 데이터 타입을 갖느 객체, 배열 등이 저장되는 공간
힙 영역에 있는 오브젝트들을 가리키는 레퍼런스 변수는 스택에 적재
힙영역은 메모리가 호출이 끝나더라도 삭제되지 않고 유지된다.
그래서 GC에 의해 메모리가 청소된다.
정적멤버(클래스 멤버)라고 한다. 정적멤버는 객체에 소속된 멤버가 아니라 클래스에 고정된 멤버이다. 그렇기에 클래스 로더가 클래스를 로딩해서 메서드 메모리 영역에 적재할 때 클래스 별로 관리된다.
클래스의 로딩이 끝나는 즉시 바로 사용할 수 있다.
데이터를 추상화시켜 상태와 행위를 가진 객체로 만들고 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법
public : 모든 패키지, 모든 클래스에서 접근이 가능하다.
protected : 같은 패키지의 모든 클래스에 접근 가능, 다른 패키지여도 하위(자식) 클래스일 경우 접근 가능.
default : 동일한 패키지 내에 있는 클래스만 접근 가능.
private : 오직 해당 멤버를 선언한 클래스에서만 접근 가능.
추상클래스
추상 클래스를 상속받아서 기능을 이용하고, 확장시킨다.
인터페이스
함수의 껍데기만 있다. 함수의 구현을 강제한다.
다중 상속 가능
클래스가 여러 클래스와 관계를 맺지 않고 하나의 특정 클래스와만 관계를 맺는다면, 내부 클래스로 작성할 수 있다.
- 패키지 간소화
내부 클래스에 private를 사용하여 클래스를 내부에 숨김.
어떤 데이터 집합에서 순차적인 계산을 위해 추출된 연속된 데이터의 나열
데이터의 집합의 데표적인 예는 컬렉션이며, 이외에도 배열, I/O 자원등이 있다. 이러한 데이터 집합에서 추출된 데이터들은 순차적으로 연속되게 처리된다.
컬렉션은 데이터를 저장하기 위한 자료구조이다.
스트림의 목적은 계산이다. 스트림으로 나열된 각각의 데이터는 어떠한 계산 과정 혹은 여러 계산 과정이 있는 파이프라인을 통과하면서 연산이 진행된다.
데이터를 계산하는 시점
컬렉션은 컬렉션에 저장하기 전에 모든 요소가 계산되어야 한다.
스트림은 데이터를 요청할 때만 계산한다.
컬렉션은 외부반복, 스트림은 내부반복
클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미
장점