내일은 금요일~
알게 모르게 9월 달이 지나갔다.
static = 먼저 한번 올려 공유한다.
try catch finally
프로그램을 죽지 않게 하려고 예외처리하는 것
모든 클래스는 object클래스를 상속한다.
즉, 모든 클래스의 뒤에는 extends Object가 생략되어 있는거다.
java.lang.object처럼 java.lang.패키지에 있다.
컴파일할 때 자동적으로 무조건 넣어진다.
object의 메소드들을 자식들이 다 써먹을 수 있다.
자주 쓰는 게 정해져 있음.
왜 고슬링아저씨가 object를 최고 조상으로 만들어놨을까?
객체지향설계원칙
부모클래스의 공통적인 필드값이나 메소드가 있으면,
그걸 함수 오버라이딩을 통해서 자식클래스가 다형성을 이용해서 써먹는게
객체지향언어에서 가장 기본적인 활용법이다.
메모리의 객체주소값이 변수에 들어간다.
boolean equals()도 직접 만들어서 써도 되지만,
@Override로 최고 상위클래스인 Object의 method를 십분 활용하여 boolean equals() method를 써도 된다.
이 과정에서 명시적 강제형변환하면서 다운캐스팅(하위형변환)이 된다.
Object가 최고 상위클래스라는 것도 알아야하고,
Polymorphism으로 인해 가지는 특성과 활용도 알아야하고,
Override도 알아야하고,
instanceof의 역할과 활용도 알아야하고,
명시적 강제형변환을 통한 DownCasting도 알아야한다.
instanceof와 명시적 강제형변환을 항상 묶어서 생각해야 한다.
좋은 소스코드를 만들기 위해서는 instanceof로 한번 조건을 걸러내는 것이 좋다.
다음은 toString() method를 익히고 활용할 줄 알아야 한다.
toString() method는 객체명@주소로 내보낸다.
String클래스는 결국 배열이다.
문자가 한개 있으면 char지만
문자가 두개 이상이면 문자열이라 하고 String이라 한다.
수많은 함수들의 역할은 데이터를 제어하는 것이다.
왜 String은 참조객체인데 값의 비교가 되는가?
https://www.codeit.kr/community/threads/7960
https://starkying.tistory.com/entry/what-is-java-string-pool
new로 생성한 인스턴스 객체는 주소값을 참조하지만,
primative타입은 풀에 생성된다.
Java는 Javascript나 Python과는 다르게 ==가 아닌 .equals()가 비교하는 방법이다.
.equals()는 객체값을 비교하기 위해, .toString()은 문자열로 바꾸기 위해 method override를 했음을 알 수 있다.
.charAt()은 문자열(사실은 배열)의 인덱스에 해당하는 값을 추출한다.
Java에서는 리터럴도 객체로 인식한다.
.indexOf()는 문자열(사실은 배열)에서 해당 문자열이 어떤 인덱스에 있는지 반환한다.
매칭되지 않으면 -1을 반환한다.
.length()는 문자열의 총 길이를 반환한다.
.trim()은 문자열의 앞과 뒤에 공백을 없앤다.
.split()은 문자열을 나눠준다.
.valueOf()는 primative값을 객체값으로 형변환 해준다.
static함수안에는 static에 해당하는 것만 올 수 있음
for문으로 배열의 하나씩 값에 접근해야 할 경우,
inhanced for문인 for(값:배열) { }을 사용한다.
while-try-(if-break)-catch(e)-continue
last in first out(LIFO)
call stack 호출스택
핵심개념은 stack의 위치를 가르키는 변수를 도입한다는 것