인터페이스에 대해서 배웠다
인터페이스는 분명히 추상클래스와 달랐다
인터페이스와 추상 클래스의 차이는 추상 클래스는 인터페이스와는 달리 일반 클래스처럼 객체변수, 생성자, private 메서드 등을 가질 수 있다.
인터페이스에는 상수와 추상메소드가 들어간다.
자바8 버전부터 인터페이스에 default 메서드가 추가되어 추상 클래스와의 차이점이 살짝 모호해졌다.
※ private 메서드는 클래스 내에서만 사용되는 메서드로 다른 클래스에서 호출이 불가능하다.
추상클래스는 클래스의 상속처럼 extends로 상속하지만, 인터페이스는 implements로 상속한다.
인터페이스는 프레임워크에서 인터페이스를 기반으로 많이 활용한다.
static변수는 클래스 변수이다.
객체를 생성하지 않고도 스태틱 자원에 접근이 가능하다.
클래스변수의 접근방법
클래스 내부에 스태틱 자료타입 변수명 선언을 하게 되면,
클래스 명을 통해서 .변수명으로 접근이 가능하다.
초기화를 하지 않으면 자동으로 컴파일러가 변수에 해당하는 값을 0으로 부여한다.
또한 기존에 알고 있다시피 클래스를 통해서 객체 인스턴스를 생성하면 객체명으로도 클래스에 있는 변수에 접근이 가능하다.
컨트롤+시프트+물음표 하면 영역주석처리가 된다.
static이 변수의 선언에 붙으면 해당 변수는 선언될 때 static영역에 생성된다.
static변수는 instance변수와는 다르게 전역에서 접근이 가능한 공간에 생성되어 사용할 수 있기 때문에 범용성과 접근성이 좋다.
클래스를 생성할 때 공통적으로 공유하는 변수가 있을 경우 static 변수생성을 고려해볼 수 있다.
card class를 static을 활용해서 짠다면,
카드무늬, 카드숫자, 카드의 폭과 카드의 높이가 있을텐데,
폭과 높이는 카드 클래스에서 static변수로 설정할 수 있다.
circle class를 static을 활용해서 짠다면,
PI라는 상수를 계속해서 활용해야 하기 때문에
static final double PI = 3.141592;라고 선언하면
반복해서 편리하게 사용할 수 있다.
static을 활용하여 바로 접근할 수 있는 이 기능이 이미 구현된 클래스가 있다.
바로 Math class이다.
.로 접근할 수 있다는 것은 static에 있을 확률이 크다.
그리고 System의 out(변수명)의 println도 이와 비슷하다.
java CardTest 명령어실행
method area(클래스 올리는 곳)에 class CardTest 실행
call stack area(함수올리는 곳)에 main() 올라감
Card c1에서 method area에 class Card올리고 static 변수를 대입
call stack area에 c1이란 객체 생성
new Card()하면 heap area에 객체를 생성하고,
method area의 주소값과, class Card에 있는 String kind에는 null, class Card에 있는 int number에는 0을 할당한다.
그리고 이 모든 걸 한 heap area의 메모리 주소를 call stack의 c1에 할당한다.
println이 있는 코드가 실행되면, call stack에 해당 println함수가 올려지고 실행되면 call stack에서 비워진다.
예외처리는 에러같은 우발상황에 대한 예방을 할 수 있는 매커니즘
예외처리는 두가지 방법이 존재한다.
try catch finally로 하는 방법이 있다.
그 다음으로는 throws가 있다.
자바의 기본적인 예외처리 매커니즘은 우발상황이 발생한 부분에서 break를 하고, 우발상황에 대한 정보출력을 한다.
자바에서 예외처리를 해주는 여러 도구 중 try catch finally는 다음과 같다.
int a = 0;
try {
a = 1/0;
System.out.println("try코드");
} catch (Exception e) {
e.printStackTrace();
System.out.println("catch코드");
} finally {
System.out.println("finally코드");
}
System.out.println("try catch finally 외부코드");
System.out.println(a);
try안에는 시도해볼 코드를 넣지만 에러발생 시 멈춘다.
멈추고 나면 catch안에 코드로 이동하여 실행이 된다.
에러가 발생하든 안 발생하든 finally안에 코드는 실행된다.
e.printStackTrace();
이 코드는 에러가 왜 어디서 발생했는지에 대한 정보를 제공하는 메소드
다중캐치문에서 최상위 클래스가 가장 처음에 나올 경우,
컴파일러는 이후의 코드가 작성되었으나 실행이 안될것이라 경고함
Exception이 모든 에러타입의 최상위 부모타입(다형성)
Write()함수는 코드를 따라가보면 throws IOException과 같이 쓰인다.
throws는 예외처리를 호출한 상위개체에게 맡긴다는 뜻
FileReader()함수는 코드를 따라가보면 throws FileNotFoundException과 같이 쓰인다.
최고 조상클래스는 class Object다.
Throwable은 크게 Error와 Exception이 존재한다.
Error는 JVM이 그냥 코드를 끝낸다.
개발자가 Checked Exception을 try catch로 예외처리 안해주면 컴파일 에러(빨간줄)가 뜬다.
그 외의 기억해야 하는 대표적인 Exception들은 Runtime, Arithmetic, ClassCast, IndexOutOfBounds, ArrayIndexOutOfBounds등이 있다.
.close()도 IOException 발생하므로 try catch로 감싸야한다.
디버깅하는 방법에 대해서 숙달하지 않으면 매번 출력해봐야 하는 번거로움이 있다.
요건정의서를 바탕으로 클래스와 변수명까진 있으니까 설명을 보고 구현