New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
JAVA A TO Z #4
Comments
-JDK / JRE -JDK -JRE
|
클래스
객체 (객체란 속성(상태)과 기능(동작)을 가진 덩어리)
인스턴스 (생성된 객체, 어떤 클래스에 속하는 각각의 객체)
-자바의 배열 -배열의 직렬화 |
-자바의 클래스 클래스란?
-익명클래스
-그러나 자바에서 기본 클래스와 익명클래스는 동일하지 않다. -NEW 키워드
-그런데 String 같은 레퍼런스 타입도 클래스로 정의 되었는데 왜 new를 사용하지 않는가?
-자바의 생성자 |
-상속 extends -자식 클래스가 부모 클래스의 한 종류(is-a) -부모와 자식이 있을 경우 부모부터 초기화된다
-다중 상속 부모의 멤버변수,함수 접근- private protected public ★부모에서 자식으로 타입변환은 안전하지만 자식에서 부모는 컴파일러가 오류를 발생시킨다. -상속의 장단점 -장점 -단점 상속 단계가 증가하면 추상화하기 힘들다 -super 키워드 -다이나믹 메소드 디스패치 (Dynamic Method Dispatch) 정적 디스패치 동적 디스패치 -추상클래스 -Final 키워드 |
-Static
예제
|
자바의 패키지
1. 패키지의 역할패키지는 연관된 클래스를 담는 컨테이너 역할을 한다. 패키지 내에는 외부로부터 접근 가능한 클래스들과 특정 목적을 위해 접근이 제한된 클래스가 존재한다. 1-1) 동일한 이름을 가진 클래스들을 구분할 수 있다.livestudy.week7.Test , livestudy.week6.Test 1-2) 접근을 제어할 수 있다protected : 같은 패키지에 존재하는 클래스와 자식 클래스에서 접근 가능 1-3) 데이터캡슐화(혹은 데이터 은닉)의 용도로 사용할 수 있다.2. 패키지 사용방법
패키지에 클래스 추가
하위 패키지
3. 패키지 내의 클래스에 접근하기
4. 패키지의 종류
4-1) Built-in 패키지
4-2) 사용자 정의 패키지
5. static import 사용하기
6. 디렉토리 구조패키지명은 클래스들을 저장하기 위해 사용하는 디렉토리의 구조와 연관되어 있다.
CLASSPATH란?
JVM은 Menu클래스의 위치를 찾아서 해당 클래스의 인스턴스를 생성한다.
만약 Menu 클래스가 dir이라는 디렉토리에 존재한다면, Menu 클래스의 전체 경로는 dir/org/company/Menu가 된다. 이 때 dir이라는 디렉토리를 classpath 변수로 등록해 놓고, 나머지 정보(org/company/Meny)는 import 명령어를 통해 제공해주므로서 외부 패키지의 클래스를 가져와 사용할 수 있게 된다. 접근제어자
|
인터페이스인터페이스는 일종의 추상클래스이다. 인터페이스는 추상클래스처럼 추상메소드를 갖지만
접근제어자에서 사용하는 default와 같은 키워드이지만, 접근제어자는 아무것도 명시하지 않은 접근제어자를 default라 하며 인터페이스의 default method는 'default'라는 키워드를 명시해야 한다.
-★implements한 클래스에서 재정의가 가능하다.
-★interface이름.메소드로 호출해야 한다.
java9 에서는 private method와 private static method가 추가 되었다. java8의 default method와 static method는 여전히 불편하게 만든다. 단지 특정 기능을 처리하는 내부 method일 뿐인데도, 외부에 공개되는public method로 만들어야하기 때문이다. interface를 구현하는 다른 interface 혹은 class가 해당 method에 엑세스 하거나 상속할 수 있는 것을 원하지 않아도, 그렇게 될 수 있는 것이다. java9 에서는 위와 같은 사항으로 인해 private method와 private static method라는 새로운 기능을 제공해준다. →코드의 중복을 피하고 interface에 대한 캡슐화를 유지 할 수 있게 되었다.
car method by DefaultCar Process finished with exit code 0 |
자바의 예외처리
RuntimeException 종류
예외를 던지기 throws+++ mvc 예외처리 |
멀티쓰레드 프로그래밍Process란
Thread란
Thread클래스와 Runnable인터페이스
Thread의 상태Thread메서드
Thread의 상태를 확인하는 메서드쓰레드의 우선순위
메인 쓰레드
동기화 Synchronize
데드락 DeadLock
참고 : https://sujl95.tistory.com/63 자바는 크게 3가지 영역의 메모리 영역이 존재
자바의 멀티쓰레드에서는 쓰레드끼리 stack을 제외한 다른 영역 공유 -> 동기화문제
멀티 쓰레드 환경에서 공유변수 volatile키워드
|
자바 Enum
혹은 enum을 정의할 때
enum의 메서드
java.lang.Enum은 모든 열거형의 조상이고 모든 열거형은 Enum을 상속받는다
EnumSet
|
어노테이션장점
사용이유
빌트인 어노테이션과 메타어노테이션빌트인 어노테이션
메타 어노테이션
커스텀 어노테이션 - 메타어노테이션을 조합하여 새로운 어노테이션을 만들어서 사용할 수 있다.
어노테이션 프로세서
|
자바의 I/O입출력
스트림 stream
바이트 기반 스트림 - inputStream , OutputStream보조 스트림
문자기반 스트림 - Reader,Writer
채널기반의 스트림 NIO (new input/output)
바이트기반 스트림 InputStream / OutputStreamprint스트림
InputStreamReader와 OutputStreamWriter
표준 입출력-System.in, System.out, System.err
표준입출력의 대상을 변경하는 setOut(), setErr(), setIn()
파일과 객체 ㅣ 직렬화
ObjectInputStream, ObjectOutputStream
파일입출력
|
자바의 제네릭제네릭이란? : 데이터의 타입을 일반화하는 것
왜? 사용하는가 : 컴파일타임에 잘못된 타입사용을 걸러낼 수 있다.
제네릭의 주요개념( 바운디드타입, 와일드카드)바운드타입 : 특정한 타입의 하위 타입들로 제한 / ex) Number타입 하위의 int long 등
와일드카드
메서드와 제네릭
Erasure : 제네릭의 타입 소거
ex) 스택 구현예시와 같은 클래스가 존재할 때
|
자바의 람다식1. 람다식 사용법
여기서 람다식 (i) -> (int)(Math.random() * 5) + 1) 는 아래 함수를 대체한다.
람다식을 작성하는 방법
ex) 람다식 변환 예시
이 매서드는 람다식으로 표현하면
2. 함수형 인터페이스
아래의 인터페이스가 존재한다고 했을 때
인터페이스를 구현한 익명 객체 생성은
★ 앞서 람다식은 익명객체와 동등하다고 했다. - 람다식으로 변환하면
★ 주의할 점은 이러한 기능 하나의 매서드를 포함한 인터페이스일 때만 해당된다.
@FunctionalInterface를 통해 컴파일러가 검증을 해준다.
3. Variable Capture
자바가 이 문제를 해결하는 방법이 바로 Variable Capture: 컴파일시점에서 멤버 매서드 내부에서 생성된 개게가 멤버 매서드 내부에서 사용되는 지역변수를 사용할 경우 객체 내부로 값을 복사해온다. 주의해야할 점은 final 키워드 or final 성격을 가진 변수만 가능하다. ++ 매서드 생성자에 대한 내용은 아래 참조 |
객체 지향과 데코레이터 패턴
|
주의 ! 어떤 결과가 나올까?
즉 Integer a = 1 / Integer b = 1 라고 했을 때 매 번 새로운 객체를 만들어서 반환 해주는 것이 아니라 싱글톤처럼 동일한 객체를 둘에게 전달한다. |
왜 String대신 StringBuffer / StringBuilder 를 사용해야 하는가? ++ 스레드 세이프한가?
결과
1. 메모리
2. 스레드 세이프
빌더의 값이 더 작은 것을 확인할 수 있다.결과 : 스트링버퍼는 멀티스레드 환경에서 동시에 건드리지 못하도록 막는다. // 반면 빌더는 이런 동기화 부분이 제외됐고 결과가 다르다.
--- 직접 작성 쓰레드 코드
결과
|
정적 멤버 클래스
simple ex) main
Myclass / Idmaker
turn a / turn b / turn c / turn d 순서 봐보기
|
자바 제네릭 - 배열과 리스트공변과 불공변
|
프록시와 프록시 패턴(디자인 패턴)프록시
프록시 패턴
|
자바 리플렉션리플렉션이란?
리플렉션의 동작 방식을 알아보자
전체적인 동작을 살펴보자문제 상황 : articleController의 foo는 articleService의 foo를 실행한다. 그러나 컨트롤러가 articleService가 뭔지알고 가져오는가?
|
결과를 예측해봐라
즉 b는 a와 동일한 주소를 가르킨다
|
스레드를 활용하여 싱글톤 패턴 동시에 접근테스트
|
|
|
자바의 this keyword
|
Java 직렬화직렬화란??
|
todo
The text was updated successfully, but these errors were encountered: