그 외 공부

JAVA 필요한 나만의 정리

ssangeun 2017. 11. 25. 19:32

# 상수 선언
final int num = 10;
num = 30 (X) => "final"로 선언한 수는 상수이므로 일반 변수처럼 사용이 불가해서 변환이 되지 않는다.

# 접근제어자 (access modifier)
-변수, 메서드에게 접근할 수 있는 속성을 붙일 수 있다.

- class는 public/ default만 가능

- 종류
1. private : class 밖에서는 사용 금지
2. default : 접근제어자가 없는 상태/ 해당 package내에서만 사용가능
3. protected : 같은 package내에서 사용가능, package가 다를 경우 상속상태라면 해당 요소(변수,메소드) 사용가능.
4. public : 한 프로젝트 영역까지 공개

# 예외처리 (exception handling)
try{
     에러가 발생할 만한 코드;
    }catch(에러클래스명 e){
     에러 발생 시 보여주고 싶은 내용;
    }finally{
     생략가능
     에러 발생 여부와 무관하게 무조건 실행해야할 코드;
    }

NullpointerException : 값이 null인 상황에서 처리하려 할 때 발생
ArithmeticException : 0으로 나누려 할 때 발행
FileNotFoundException : 파일이 없을 때 발생
ArrayIndexOutofBounsExceptio : 배열의 요소 범위를 초과했을 때 발생

- 프로그램 오류의 종류
 1. 컴파일 에러
  : 자바의 문법적 오류로 컴파일 되지 않는 구문상의 오류
 2. 런타임 에러
  : 실행 시 발생하는 에러
 3. 논리적 에러
  : 예를 들어 게임 프로그래밍에서 비행기가 총알을 맞아도 죽지 않음(논리적으로 이해할 수 없는 상황,
   but 코드상의 문제가 없는 경우라서 오류를 찾기가 힘들다.)

- 참조 메서드 만드는 방법
/**
 * @이런형식으로 메서드 위에 작성해주면 다른 개발자가 내가 작성한 메서드를 참조할때 hot to use형식을 볼 수 있다(F2를 누르면 보이는 메모장 형식의 정보)
 * @author 이상은
 * @param num
 * @return num의 값
 */
public void something(){...}


- (String name = "dd";) (String name =  new String("dd");) 차이점!
String n1 = "dd" 와 String n2 = "dd"는 같다.
String n1 = new String("dd") 와 String n2 = new String("dd")는 다르다.
이유  : 생성자 없이 같은 값을 선언한 변수는, 이미 존재하는 값이라면 존재하는 값의 주소를 참조한다. (주소를 공유)
 생성자를 통해 선언한 변수는, 공유없이 바로 새로운 공간을 받아 값을 넣는다. (+ String 변수의 주소를 출력은 hashcode메서드 사용)

- String class는 immutable, StringBuffer class는 mutable!
String n1 = "dd", 추후에 n1 = "hello"로 변경한경우에는
"dd" 주소에 "hello"으로 변환하는게 아니라 "hello"를 위한 새로운 공간을 만든다. 즉, "dd"가 "hello"로 바뀌는것이 아니고
n1이 "dd"를 가리키는 선을 끊고 새로 생긴 "hello"에 연결이 생긴다. => 메모리 낭비 ; 그래서 필요한 StringBuffer class!


- Calendar cal = Calendar.getInstance(); => 싱글 패턴


- extends와 implement!

1) extends는 일반 클래스와 abstract 클래스 상속에 사용

2) implement는 interface 상속에 사용

** 여기서 abstract 클래스와 interface의 차이점 (공통점은 prototype만 있고 body가 없는 메소드를 멤버함수로 가진다)

*** abstract 클래스는 일반 메소드와 혼용해서 사용가능하지만 interface는 모든 메소드들이 abstract 메소드로 존재 해야한다.

*** 일반클래스가 포함되었다면 다중상속이 불가하지만 interface의 경우 다중상속이 가능하다.

*** 결국 큰 범주에서 본다면 abstract method로만 이루어진 abstract class가 interface인 셈