-
반응형
## 너무 쉬운건 제외하고 헷갈릴 만한 부분만 추림
1장 - 자바 시작
- .java 파일 (소스 코드) -> .class 파일 (바이트 코드) - 컴파일 방식
- .class 파일 -> JVM 적재 - 인터프리터 방식
- JVM은 필요할 때 클래스 파일 로딩 -> 링크 과정이 없음
- JDK (Java Development Kit) : 개발에 필요한 자바 도구 모음
- JRE (Java Runtime Environment) : 자바 실행에 필요한 API 포함
- Java SE : 표준 배포판 - 데스크탑, 서버 응용 개발 플랫폼
- Java ME : 마이크로 배포판 - SE + 임베디드 개발에 필요한 API
- Java EE : 기업용 배포판 - SE + 인터넷 기반 서버사이드 컴퓨팅 API 추가
2장 - 기본
3장 - 루프와 예외처리
- 정방형 배열 : 각 행의 열 개수가 같은 배열
- 비정방형 배열 : 각 행의 열 개수가 다른 배열 -> 각각마다의 초기화를 따로 해줘야함
4장 - 클래스와 객체
- 다형성
- 메소드 오버로딩 : 메소드 명은 같지만 매개변수가 다름 (프로토타입이 다름)
- 메소드 오버라이딩 : 부모 클래스의 메소드를 재정의 - 프로토타입이 같음
- public class 는 파일마다 하나만 가능
- 기본 생성자 : 클래스에 생성자가 하나도 없을때 컴파일러에 의해 자동으로 만들어짐 -> 아무 작업 X
- 클래스에 생성자 하나라도 있으면 기본 생성자 생성 안함
- this : 객체 자신에 대한 레퍼런스, this() : 클래스 내의 다른 생성자 호출 - 생성자 내에서만 호출 가능
- 객체의 치환
Circle obj1 = new Circle();
Circle obj2 = new Circle();
Circle s = obj2;
obj1 = obj2
에서 obj1 에는 obj2의 값이 복사되는 것이 아닌 레퍼런스가 복사됨 -> s와 obj1은 같은 객체를 가리킴
- 메소드 접근 지정자
- public : 모든 클래스에 허용
- private : 완벽 차단
- protected : 동일 패키지, 자식 클래스에 허용(다른 패키지에 있어도 허용)
- 디폴트(아무것도 입력 안한것) : 동일 패키지에 허용
- 인자 전달
- call by value : 기본 타입 전달 - 값이 복사되어 전달 - 호출한 실인자 값이 변경되지 않음
- call by reference : 레퍼런스 타입 전달 - 레퍼런스만 전달 - 호출한 실인자 값이 변경됨
- java 에서는 배열도 레퍼런스로 간주
- 가비지 : 가리키는 레퍼런스가 하나도 없는 객체
- 가비지 컬렉션 : JVM(가비지 컬렉션 스레드)이 자동으로 가비지 수집
- static 멤버 : 클래스당 하나, 객체를 생성하지 않아도 사용 가능
- final
- 클래스 : 상속 불가
- 메소드 : 오버라이딩 불가
- 필드 : 변경 불가
5장 - 상속
- 자바에서는 클래스의 다중 상속 불가능
- 모든 클래스는 자동으로 java.lang.Object 상속받음
- 궁금증
class MyClass extends ParentClass {}
라는 클래스가 있다고 가정할 때 어떻게 Object 상속? 자바에서는 다중 상속 불가능
ans) ParentClass가 Object 상속받기 때문에 자동으로 MyClass 도 Object 상속받은것- 슈퍼/서브 클래스의 생성자호출 및 실행
1. 서브 클래스 객체 생성시 어떤 생성자 호출?
ans) 둘다 실행 - 슈퍼 클래스 생성자 실행 후 서브 클래스 생성자 실행
2. 누가 먼저?
ans) 호출은 서브 클래스 -> 슈퍼 클래스 but 실행은 슈퍼 클래스 -> 서브 클래스
- super() : 슈퍼 클래스의 생성자 호출하는 방법 - 매개변수의 형태로 부모 클래스 생성자 중 선택
- 업캐스팅 : 서브 클래스 객체를 슈퍼 클래스 타입으로 형변환 - 자동으로 가능
- 업캐스팅된 레퍼런스 - 슈퍼 클래스 멤버만 접근 가능
- 다운캐스팅 - 슈퍼 클래스 객체를 서브 클래스 타입으로 형변환 - 명시적으로 해야함
- 객체레퍼런스 instanceof 클래스타입 -> 레퍼런스가 가리키는 객체의 타입 식별
- 메소드 오버라이딩
- 슈퍼 클래스 메소드를 서브 클래스에서 재정의
- 동적 바인딩 : 서브 클래스에서 오버라이딩된 메소드가 무조건 실행됨
- Shape shape (부모) = new Line() (자식); shape.draw() 호출 시 line.draw() 실행됨
- super.멤버 - 정적 바인딩 : 부모의 멤버를 접근할 때 사용
- 추상 메소드
- 선언만 되고 구현 X 된 메소드 - abstract
- 서브 클래스에서 오버라이딩으로 구현해야함
- 추상 클래스
- 추상 메소드를 하나라도 가진 클래스
- 추상 메소드가 하나도 없지만 abstract로 선언된 클래스
- 추상 클래스는 객체 생성 불가능
- 용도 : 설계와 구현 분리
- 인터페이스
- 필드 : 자동으로 public static final 삽입됨
- 메소드 : 자동으로 public abstract 삽입됨
- 디폴트 메소드 (default 메소드명) : 기본적인 동작 구현 가능
- 인터페이스는 다중 상속 가능
- 용도 : 규격화, 스펙 - 클래스들이 기능을 서로 다르게 구현하도록
- 추상 클래스, 인터페이스 모두 다형성 실현
6장 - 패키지
- Object 클래스
- 모든 클래스의 수퍼 클래스
- hashCode(), toString(), equals() 등이 있음
- == 연산자 : 두 개의 레퍼런스 비교 - 가리키는 객체가 같은지 비교
- equals() : 객체의 내용이 서로 같은지 비교 - 직접 구현해야함
- Wrapper 클래스
- Integer, Long, Float, Double 등 기존 기본 타입을 클래스로 wrap 해놓은것
- 박싱(boxing) - 기본 타입 -> Wrapper 객체
- 언박싱(unboxing) - Wrapper 객체 -> 기본 타입
- JDK1.5 부터 자동으로 가능
- String 객체
- 힙 메모리에 String 객체 생성
- 수정 불가능 -> String 객체 내의 메소드들은 새로운 String 객체를 내부적으로 리턴
- StringBuffer 클래스
- String과 달리 문자열 변경 가능 - 메소드들이 매개변수로 온 문자열 자체를 바꿈
- 이 때 매개변수로 StringBuffer 가 오는 경우가 많음
7장 - 제네릭과 컬렉션
Collection<E>
- Set<E>
- HashSet<E> : 구현
- List<E>
- ArrayList<E> : 구현
- Vector<E> : 구현
- Stack<E> : 구현
- LinkedList<E> : 구현
- Queue<E>
- LinkedList<E> : 구현
Map<K, V>
- HashMap<K, V> : 구현
- 제네릭
- 여러 종류의 타입으로 가능
- 자바에서 컴파일 타임에 E, K, V 와 같은 부분을 Object 타입으로 바꿔놓음
- 원래는 기본 타입으로 선언 불가능하지만 JDK 1.5부터 자동 박싱으로 가능
- 제네릭 클래스, 인터페이스의 배열 불가능
- 제네릭 타입의 배열도 안됨 but 매개변수로써는 가능
8장 - 스트림
- 버퍼를 가지고 응용프로그램과 입출력 장치를 연결
- 단방향 -> 입력과 출력 동시에 할수없음
- 바이트 스트림, 문자 스트림 존재반응형'Java' 카테고리의 다른 글
자바 string 비교 (0) 2021.09.16