/*
<표현식(Expression)>
-어떠한 값이나 변수, 혹은 메서드의 호출 결과 간의 연산을하는것(코드조작)을 의미한다.
-구문에 포함되는 개념이다.
<구문(Statement)>
-표현식(들)으로 이루어진 하나의 코드 실행 단위이다.
-세미콜론( ; )으로 끝내야만 한다.
<블록(Block)>
-코드(들) 혹은 구문(들)의 집합이다.
-중괄호( { 및 } ) 로 감싼다.
ex)
public static void main(String [] args)
{
System.out.println(1 + 2 + 3); //sout:구문
}//{ 코드 } : 코드 블록
<패키지(Package>
◎ 클래스를 포함하는 구성요소 등이 존재하는 위치이다.
◎ 가령, 클래스 First 가 a.b.c 라는 패키지 경로 아래에 있다면 해당 클래스의 풀 네임은 a.b.c.First 가 된다.
◎ 패키지는 실질적으로 디렉토리이며 각 디렉토리간의 구분을 마침표( . ) 로 한다.
◎ 패키지 경로의 시작은 반드시 본인이 소유하고 있는 도메인의 역순이어야 한다.
가령, mydomain.com 이라는 도메인을 소유하고 있다면 패키지의 시작은 com.mydomain 이어야 한다.
전통적으로는 그 뒤에 프로젝트의 이름이 온다.
◎ 패키지의 명명에는 카멜케이스 혹은 스네이크 케이스를 이용한다. 간혹 단어 구분없이 전체 소문자로 작성하는 경우도
있음으로 회사의 방침에 따른다.
<접근 제한자(Access Modifier)>
◎ 접근 제한자(Access Modifier) 는 어떠한 대상(클래스,메서드 등)에 접근할 수 있는 주체를 제한하기 위해 사용한다.
1. public
: 해당 대상에 대한 접근에 제한이 없다. (아무나 어디서든 접근 가능)
2. protected
: 같은 패키지 경로에 있거나, 상속관계 일때 만 접근할 수 있다.
3. (default)
: 같은 패키지 경로에 있을때만 접근할 수 있다. (실제로 default 라고 적는것이 아니라, 접근 제한자를 생략하면
default 접근 제한자가 되는 것.)
4. private
: 같은 객체(클래스 등) 내에서만 접근할 수 있다.
<정적(static) 및 비정적(Non-static)>
◎ 어떠한 대상(주로 변수나 메서드)이 정적(static)일 경우 '프로그램 실행과 동시에' 해당 변수 및 메서드의 존재가 '메모리에
등록'되게 되어 존재하게 된다.
◎ 정적인 대상은 스레드(Thread) 내에 '하나만 존재'한다.
◎ 정적인 대상에 접근할 때에는 객체(인스턴스)가 아닌 타입으로 접근해야 한다.
<빈 값(널,null)>
◎ 어떠한 변수의 타입이 참조 타입일때 해당 변수가 할당된 스택(Stack)이 힙(Heap)주소를 가리키지 않고
값을 가지고 있지 않을 때 그 상태를 null 이라 한다.
◎ 스택 값이 null 인 어떠한 참조타입의 변수를 연산(할당 instanceof 제외)할 경우
NullPointerException 예외가 발생하니 유의한다.
◎ 기초 타입은 null 일 수 없다.(스택이 값을 바로 가짐으로)
◎ 값을 가지지 않는 기초 타입의 지역변수는 null 이 아님으로 유의한다.
<리팩토링(Refactoring)>
◎ 리팩토링(Refactoring)은 java 언어 뿐만 아니라 모든 언어에서 참조(Referred)되는 대상의 이름을 변경하고,
이러한 변경 사항이 참조중(Referring)인 컨텍스트에서도 동시에 변경되게 하고자 할 때 사용하는 기능이다.
JetBrains 에서 제작한 IDE 는 shift + f6 키 조합을 단축키로 사용하고 있다.
반면, Microsoft 에서 제작한 IDE(가령 Visual Studio, Visual Studio Code 등)는 f2 단축키로 사용하고 있다.
<다형성(Polymorphism)>
◎ 어떠한 A 타입의 객체가 B 타입의 변수에 대입될 수 있는 상황을 의미한다. 이때 각 A와 B는 아래 상황 중 하나 이상이다.
-A 타입이 B 타입을 상속받는경우 ("부모 타입의 변수는 자식 타입의 객체를 받을 수 있다.")
-A 타입이 B 타입의 인터페이스를 구현(Implement)하는 경우
◎ 본래 객체화된 타입이 이가 상속받는 부모 타입으로 형변환되었다 하더라도, 이 객체를 다시 자식 객체로 강제 형변환할수 있다.
Object o = new String("Hi");
//String s = o; // 부모 타입의 객체를 자식 타입의 변수에 대입할 수 없다. (일반적으로)
String s = (String) o; //하지만, 강제 형변환을 통하면 가능하다.
Object o = new SimpleDateFormat("yyyy");
String s = (String) o;
System.out.println(o instanceof String); //false
//단, 부모 타입의 변수에 할당된 객체의 원래타입(`SimpleDateTime`)과 관련 없는 타입(`String`)으로의 형변환은 불가능하다.
// `instanceof` 연산을 사용하여 안전하게 강제 형변환이 가능한지 항시 확인해야 한다.
<어노테이션(Annotation)>
◎ 어노테이션(Annotation)은 앳(At,@) 기호를 사용하여 표시한다.
◎ 어노테이션은 해당 어노테이션 뒤에 오는 대상(클래스,인터페이스,메서드,변수 등등)에 대한 부수적인 힌트(정보)를
부여하고자 할때 사용한다.
◎ @Override : 해당 메서드가 재정의되었음을 알린다.
◎ @Deprecated : 해당 대상이 추 후에 출시될 버전에서 삭제될 수 있음으로 더 이상 사용되어서는 안된다고 알린다.
*/