싱글톤 Singleton (싱글 인스턴스)
객체 한개만 만들어서 필요할때 빌려다 사용하게 해주는 방식, 구조
쓰는 이유 : 무분불하게 객체 생성하지 않도록
로직
• 클래스 외부에서 new로 객체생성을 못하게 ▶ new 생성자 호출()을 할 수 없도록 막아야 함 ▶ 생성자 private
• 클래스 안에서 미리 객체 생성하기 ▶ 클래스로 만들어 메모리 무한로딩에 빠지지 않게 방지 ▶ 이때 자신의 객체는 외부에서 함부로 훼손되지 않게 private으로 만듬
• 내가 만들어둔 나의 객체를 외부에서 가져다 쓰도록 get메소드 public으로 만든다
이때, 객체 생성을 막았으므로 외부에소 get메솓를 사용하려면 객체 생성 안하고 바로 클래스명. 으로 접근가능하게 static 메서드로 만들어준다. (인스턴스메소드로 만들면 외부에서 객체생성하고 사용해야되는데 객체생성 막혀서 불가능)
class Test{
private Test() {} // new Test() 외부에서 new Test() 불가능
private static Test t = new Test(); // 내가 미리 만듬, 무한로딩X static, 외부 훼손안되게 private
public static Test getT(){ return t; } // 객체 생성 안하고 바로 쓸 수 있도록 static
}
싱글톤 구성 요소
✔ 자신 클래스 타입의 private 정적변수(static)
private static 클래스명 instance = new 클래스명();
✔ private 생성자
private 클래스명() {}
✔ 정적 get 메소드
public staitc 클래스명 getInstandce(){
return instance;
}
내부 클래스
• inner class, 중첩 클래스, nested class ... 다양하게 불림
• 클래스 내부에 다른 클래스를 정의하는것
• 이유 : 은닉화를 위해 사용 → 보안강화
class 외부클래스 {
외부 변수;
외부 메소드();
class 내부클래스{
내부 변수;
내부 메소드();
}
}
👀 클래스 정의 위치에 따라 크게 2가지 종류로 나뉜다.
멤버클래스
✔ 인스턴스 멤버 클래스
A클래스 객체를 생성해야만 사용할 수 있는 B내부 클래스
☑ 구조
class A {
...
class B{
...
}
}
☑ 클래스 정의
인스턴스 변수와 메소드만 선언 가능, static 변수와 메소드는 선언 불가
class A {
class B{
B(){} // 생성자
int x; // 인스턴스 변수
void method(){} // 인스턴스 메소드
//static int y; // static 변수 (x)
//static void methood2(){} // static 메소드 (x)
}
}
☑ 객체 생성
A클래스 외부에서 B의 객체를 생성하려면, A클래스 객체를 생성하고, B객체를 생성해야함
A a = new A();
A.B b = a.new B();
b.x = 10;
b.method()
✔ static 멤버 클래스
A클래스를 통해 바로 접근 가능한 B내부 클래스
static 키워드가 붙은 내부 클래스를 말함. 모든 종류의 변수와 메소드 선언 가능
☑ 구조
class A {
...
static class B{
...
}
}
☑ 클래스 정의
class A {
static class B{
B(){} // 생성자
int x; // 인스턴스 변수
void method(){} // 인스턴스 메소드
static int y; // static 변수
static void methood2(){} // static 메소드
}
}
☑ 객체 생성
A클래스 외부에서 B의 객체를 생성하려면 A객체 생성할 필요가 없다
A.B b = new A.B();
b.x = 10;
b.method();
A.B.y = 20;
A.B.method2();
** 멤버 클래스도 하나의 클래스임으로 컴파일하면 바이트코드파일(.class)별도로 생성 A$B.class
로컬(지역) 클래스
• method()안에 있는 클래스
• method()가 실행될때만 사용할 수 있는 B내부 클래스
☑ 특징
접근제어자와 static을 붙힐 수 없다.
메소드 실행할때 메소드 내부에서만 사용되므로 제한할 필요가 없다.
인스턴스 변수와 메소드만 선언 가능, static 변수와 메소드 선언 불가
☑ 구조
class A{
void method(){
class B {
변수.. 메소드..
}
}
}
바이트 코드 파일 : A$1.class
☑ 클래스 정의
void method(){
class B {
B(){} // 생성자
int x; // 인스턴스 변수
void method(){} // 인스턴스 메소드
//static int y; // static 변수 (x)
//static void methood2(){} // static 메소드 (x)
}
}
}
☑ 객체 생성
메소드 내부에서 이루어짐
B b = new B();
b.x = new B();
b.x = 10;
b.method();
익명 클래스 anonymous class
• 이름이 없는 클래스
• 객체 이름은 없지만 클래스를 정의하고 동시에 객체를 생성함
• 변수의 초기값, 지역변수의 초기값, 매개변수의 매개값으로 주로 대입됨
• 이벤트 처리할때나 스레드 객체를 간편하게 생성할 목적으로 활용됨
• 단독으로 생성 불가, 클래스를 상속하거나 인터페이스를 구현해야 생성가능
구조
new int [] = {} // 배열 객체 생성할때와 비슷한 느낌
new 클래스명() {
// 클래스 정의
}
new 인터페이스명(){
// 메소드 오버라이딩
}
예외처리 Exception handling
• 코드로 발생할 수 있는 에러를 미리 진단하고 해결방안을 코드로 처리해 놓은것
✔ 컴파일 에러
☑ 컴파일할때 발생 ( 실행조차 안됨)
☑ 문법 오류, 경고 있는 코드 사용했을때
✔ 런타임 에러
☑ 실행할때 발생
☑ 문법적으로는 맞아 컴파일은 되는데 입력오류 등으로 실행중 에러
💡 예외(Exception)와 에러(Eerror)의 차이
예외 : 프로그램 코드로 해결 가능한 것들
에러 : 문법적으로 (코드로) 해결 못하는 것들
특징
• 예외는 메소드에서 처리. 변수에서는 불가능
• 방법 : try-catch 구문
try {
// 예외가 발생할 것 같은 코드들 작성
}catch(NullPointException e) {
// 예외가 발생하면 대처해야할 코드 작성
}catch(Exception e) {
// 예외가 발생하면 대처해야할 코드 작성
}
• 예외 발생할 것이 많으면, catch구문을 여러개 만들어 가각 따로 처리해줄 수 있다
대표적인 예외
• ArrayIndexOutOfBoundsException : 배열 인덱스범위 벗어난 접근시
• NullPointerException : 객체 생성 안하고 사용하려고 할때 발생
• ClassCastException : 변환할 수 없는 타입으로 변환할때 발생
• ArithmeticException : 0으로 나누려고 할때 발생
• NumberFormatException : 숫자로 형변환 안될때 (문자열은 숫자로 형변환 불가)
• ClassNotfoundExceprion : 찾고자하는 클래스가 없을 경우 (class명 잘못 썻을때, 라이브러리 대치 안됐을때)
• OutOfMemoryException : 메모리 부족시 발생
• InterruptedException : 중간에 무언가가 끼어들어서 잘못된경우
• IllegalArgumentException : 잘못된 인자 전달시 발생
• IOException : 입출력 동작 실패 또는 인터럽트시 발생
👀 그외에 APi에서 참고
https://docs.oracle.com/javase/8/docs/api/
java.lang → Exception Summary
finally
• 예외 여부와 상관없이 무조건 실행되는 블럭
• 메소드 안에서 return을 먼저 만나도 finally 블럭이 있으면 finally 실행하고 return 처리가 됨
✔ 구조
try{
예외가 발생할 것 같은 코드들
}catch(Exception e) {
예외가 발생하면 대처해야할 코드 작성
}finally{ // 생략가능
예외 발생 여부와 상관없이 무조건 실행되어야 하는 코드 작성
}
💡run-time- exception 컴파일은 됨
예외 발생시, 바로 catch 구문으로 넘어가고 다시 돌아가지 않는다.
예외 발생시키기
Exception e = new Exception(); throw e; // 예외 발생
고의(강제)로 예외를 발생시키는것
상속 구조
Object - throwable - Exception, Error
'basic > java 이론' 카테고리의 다른 글
| day 16 - 패키지, API (0) | 2021.05.14 |
|---|---|
| 자바 문법 배운것 총정리 (0) | 2021.05.13 |
| day 14 - 추상클래스, 인터페이스 (0) | 2021.05.11 |
| day 13 - 상속과 생성자, 메소드 오버라이딩, 다형성 (0) | 2021.05.10 |
| day 12 - 상속 inheritance (0) | 2021.05.07 |