Java는 객체 지향 프로그래밍 언어입니다.
기본자료형을 제외한 모든 요소들이 객체로 표현되고, 객체 지향 개념의 특징인 캡슐화,상속,다형성이 잘 적용된 언어입니다.
장점
단점
JVM은 스택 기반으로 동작하며, Jave Byte Code를 OS에 맞게 해석 해주는 역할을 하고 가비지 컬렉션을 통해 자동적인 메모리 관리를 해줍니다.
Java 는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되기 위해선 OS 위에서 Java 를 실행시킬 무언가가 필요하다. 그게 바로 JVM이다.
즉, OS에 종속받지 않고 CPU 가 Java를 인식, 실행할 수 있게 하는 가상 컴퓨터이다.
정리 : java 소스코드(.java)를 javaCompiler의 javac명령어를 이용하여 JVM이 인식할 수 있는 Java byte code(.class)로 변환되고 클래스 로더에 의해서 JVM 내로 로드 ->
Interppreter방식으로 실행하다가Jit 컴파일러로 프로그램이 실제 실행하는 시점에 바이트 코드 전체를 컴파일하여 기계어로 변경
정수형 : byte-1,short-2,int-4, long-8
실수형 : fload-4,double-8
문자형 : char-2
논리형 : boolean-1
저는 외울때 bsil1248(브실1248)로 외웠습니다.ㅎㅎ
불변 객체는 객체 생성 이후 내부의 상태가 변하지 않는 객체를 뜻합니다.
Java에서는 필드가 원시 타입인 경우 final 키워드를 사용해 불변 객체를 만들 수 있고,참조 타입일 경우에는 추가적인 작업이 필요합니다.
final 키워드
- final class
: 다른 클래스가 상속 받지 못한다.
- final method
: 자식 클래스에서 상위 클래스의 final method를 오버라이드 하지 못한다.
- final variable
: 변하지 않는 상수 값이 되어 새롭게 값을 할당할 수 없는 변수가 된다.
참조 타입은 대표적으로 1. 객체를 참조, 2. 배열, 3. List 등을 참조 할 수 있습니다.
1.참조변수가 일반 객체인 경우 사용하는 필드의 참조 변수도 불변 객체로 변경해야 합니다.
2.배열일 경우 배열을 받아 copy해서 저장하고,getter를 clone()으로 반환하도록 하면됩니다.
3.List인 경우에도 배열과 마찬가지로 생성시 새로운 List를 만들어 값을 복사하도록 해야합니다.
public List<?> getExample() {
return Collections.unmodifiableList(?);
}