객체 지향의 목적 : 유지 보수성이 높은 언어를 개발하기 위해 사용
객체 : 속성과 행동으로 구성된 하나의 단위
인스턴스 : new 명령문으로 heap메모리에 생성된 클래스(객체)
new : 메모리에 객체를 생성해주는 명령문
code 영역 : 실행 코드들이 사용하는 영역, Method영역 이라고도함
heap 영역 : new 명령문으로 생성된 인스턴스들이 사용하는 메모리
stack 영역 : 지역 변수들이 사용하는 영역
참조 변수 : heap 메모리의 주소 값을 가지는 변수
. 의 의미 : 참조 변수의 주소 값을 찾아가라는 의미
public void test() {
Item item1 = new Item();
} // item1 이라는 변수에 heap메모리에 생성된 인스턴스의 주소값을 할당함
static 키워드 위치
static 변수(클래스 변수) : main 메소드 실행 전 code 영역에 생성됨
static 메소드 : main 메소드 실행 전 사용 준비가 완료됨
static 블록 : main 메소드 실행 전에 실행할 실행 블록 (전처리 작업)
생성자 역할 : 멤버 변수의 초기화
기본 생성자 : 생략될 경우 컴파일 할 때 자동으로 만들어줌
this : 현재 객체 자신의 주소를 가지는 키워드
상속의 목적 : 클래스 간의 중복된 내용을 별도의 클래스에 중복된 내용을 정의하고 사용하기 위해 사용
상속의 조건
상속 문법 : <자식클래스> extends <부모 클래스>
메소드 오버라이딩 : 부모로부터 상속받은 메소드의 내용을 재정의하는 것
super : 부모를 지칭
super(); 가 없으면 무조건 1번 실행함부모 생성자 활용
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Student(String name, int age, String grade) {
super(name, age) // 부모 생성자를 호출
this.grade = grade;
}
추상 메소드
abstract 키워드를 사용 (추상 메소드, 추상 클래스에서만 사용할 수 있음)
추상 메소드를 하나라도 가지고 있으면 추상 클래스, 인터페이스가 되어야 함
메소드 바디를 생략해도 됨
상속받는 클래스는 메소드 바디를 구현해야함, 하지 않을 시 자신도 추상 클래스가 되어야 함
다중 상속 가능(인터페이스만), 복합 상속 가능
변수 선언 : 컴파일 시 public static final 이 자동으로 붙으므로 public static final 으로 선언해야 함
메소드 : 컴파일 시 abstract 가 붙으므로 추상 메소드로 선언해야함
default 메소드
static 메소드
다형성이 가능한 이유 : Object로 시작되서 해당 클래스까지 상속되었기 때문에
Object 클래스 : 모든 자바 클래스의 루트 클래스
파라미터로 받을 때 부모 클래스(타입)로 받아서 다형성을 이용할 수 있음
instanceof : 타입 확인을 위해 사용
타입 변경 : (데이터 타입(부모의 타입)) 참조 변수
한 클래스의 멤버로서 선언된 클래스
접근할 때 OuterClass.InnerClass 형식으로 접근함
다양한 기능을 가진 코드들의 집합
자바API : 클래스 파일 형태로 제공하는 라이브러리
Object
hashCode() : 인스턴스의 고유번호를 생성getClass() : Class타입의 객체를 생성하여 리턴함String : 원본 변경 불가
eqaulsIgnoreCase() : 대소문자 구분 xcharAt() : 인자로 지정한 위치에 대한 문자를 리턴함 valueOf() : 문자열로 바꿔줌StringBuffer, StringBuilder (동시처리가능/ 동시처리 불가능) : 원본 변경 가능
Math
Wrapper : 기본 데이터 타입과 매핑되는 클래스 (데이터 타입을 객체로)
parse<기본 데이터 타입>(String s): 인자로 문자열을 받아서 기본 데이터 타입으로 변환하는 메소드Date/Calendar : 날짜, 시간에 관련된 기능을 처리하는 객체
SimpleDateFormat : 날짜와 시간의 포맷 지정을 처리하는 객체
MessageFormat, DecimalFormat : 문자의 포맷, 숫자의 포맷
StringTokenizer : 문자열을 분리하는 기능을 가진 객체
Random() : 난수를 발생하는 기능을 가진 객체
Arrays : 배열에 관련된 기능을 제공하는 객체
사용 목적 : 배열의 크기 변경, 수정 시 처리 과정을 보완하기 위해서 사용함
생성자 : 클래스<데이터 타입> 변수 = new 클래스<데이터 타입>();
제네릭 <> = ArrayList에서 데이터 타입을 미리 지정해주는 것
get, indexOf, add, remove, clear, size, asList 등의 메소드 사용
Iterator() : Iterator 객체를 이용, 커서를 이용하여 접근함 (속도에서 유리)
여러 개의 Map.Entry를 갖는 Collection 객체
HashMap 동일, null 키와 null 값을 저장할 수 없음, 동기화 처리됨
저장되는 순서가 의미없음, 중복된 값을 저장할 수 없음
데이터 구조가 Tree 형태의 Set
RuntimeException : 실행 시 발생한 예외
IOException : 입출력 시 발생한 예외
catch 처리 시 : Exception 한번에 예외 처리 할 수 있음 (다형성)
getMessage() : 예외에 대한 메시지를 받음printStackTrace() : 실행한 코드를 단계별로 예외 출력finally : 자원 반환, 해제를 위해 주로 사용, (파일을 닫거나 네트워크 연결을 종료)
try-with-resources
try(자원) {}catch {}throws : 메소드 선언시 사용, 예외를 던짐 호출하는 쪽에서 처리해야함
throw : 오류를 강제로 발생시키는 명령문
사용자 정의 예외 : Exception을 상속받아야함
상속, 추상, 다형성을 그냥 사용했지만 개념을 살펴보니 서로 연관이 있었다.
API 부분은 너무 많은 메소드가 있어서 정말 공식문서를 이용하여 더 효율적으로 작업할 수 있을 것 같다.
코드적으로 사용하던 부분을 개념적으로 다시 살펴보니 더 기반을 다지는 것 같았다.