티스토리 뷰

카테고리 없음

콜백 정리

real_water 2020. 7. 8. 17:04

callback

caller : 호출자 callee: 피호출자

-callee side에서 callee side 위에 작동하는 메소드를 호출하는 것.

사용자가 시스템에게 처리요청하면call,

시스템이 사용자에게 처리요청하면 callback.

 

-다른 함수의 인자로써 이용되는 함수.

-어떤 이벤트에 의해 호출되어지는 함수.

콜백함수 구현 순서

1.기능호출

2.콜백인터페이스 구현 및 callee 객체에 등록

3.호출

위 그림처럼 call한 기능을 수행하다가 어떠한 조건을 만족시키면 callback을 발생시키게 된다.

 

장점 : 어떤 특정 조건이 만족되었을 대 지정한 기능을 수행하는 경우, 조건을 확인하기위해 계속해서 조건을 만족하는지 확인하는 과정없이 조건이 만족되었을 대 기능을 호출하기 때문에 효율적으로 기능을 수행할 수 있다, 비동기로 조건에 대한 작업을 수행할 수 있게 되기 때문.

 

쓰레드

쓰레드를 이용하면 하나의 프로세스에서도 병렬적으로 처리, 즉 여러개의 처리루틴을 가질 수 있다.

프로세스 내에서 실행되는 흐름의 단위.

 

만드는 방법 

1)Thread클래스 사용

2)Runnable 클래스 구현 : run()만 구현하면 됨.

현재의 클래스가 이미 다른 클래스로부터 상속 받고 있다면 Runnable 인터페이스를 이용하여 스레드를 생성할 수 있습니다.

 

특징

- 스레드 상태는 JVM에 의해 기록 관리된다.

- run()메소드가 종료하면 스레드는 종료된다.

  스레드를 계속 실행시킬려면 run()메소드를 무한루프 속에 실행되어야합니다.

- 한번 종료한 스레드는 다시 시작시킬수 없습니다.

  스레드 객체를 다시 생성해야 합니다.

- 한 스레드에서 다른 스레드를 강제 종료할 수 있습니다.

 

- 스레드의 상태 6가지

① NEW : 스레드가 생성되었지만 스레드가 아직 실행할 준비가 되지 않았음

② RUNNABLE : 스레드가 실행되고 있거나 실행준비되어 스케쥴링은 기달리는 상태

③ WAITING : 다른 스레드가 notify(), notifyAll()을 불러주기 기다리고 있는 상태(동기화)

④ TIMED_WAITING : 스레드가 sleep(n) 호출로 인해 n 밀리초동안 잠을 자고 있는 상태

⑤ BLOCK : 스레드가 I/O 작업을 요청하면 자동으로 스레드를 BLOCK 상태로 만든다.

⑥ TERMINATED : 스레드가 종료한 상태

 

인터페이스

개발자 사이의 코드 규약을 정한다.

여러 구현체에서 공통적인 부분을 추상화한다.(다형성)

자바인터페이스는 기본적으로 추상메서드의 모음이다.(추상메서드란 구현부가 없는 메소드)

인터페이스를 만든다면 반드시 구현하는 클래스를 만들어야 하며, 인터페이스를 구현하기로 한 클래스는 반드시 인터페이스에 명시되어 있는 추상메소드들을 모두 구현해야 한다.(안하면 컴파일 에러뜸)

인터페이스는 구현과 상속을 모두 할 수 있다.

-인터페이스를 사용하는 구체 클래스는 해당 인터페이스를 구현해야한다,

-인터페이스 사이에는 상속을 할 수 있다. 다중상속 가능

기본 제어자는 public, 메소드를 private로 설정하면 인터페이스내에 메소드를 구현해야한다.

모든 멤버변수는 public static final이어야 하며 이를 생략할수 있으며,

모든 메소드는 public abstract이어야하고 이를 생략할 수 있다.

 

사용이유:

자바의 다형성을 극대화하여 개발코드 수정을 줄이고 프로그램 유지보수성을 높이기 위해 사용.

극단적으로 동일한 목적 하에 동일한 기능을 수행하게끔 강제하는 것

 

인터페이스에서는 4가지를 정의하거나 구현할 수 있음.

public interface 인터페이스명 {

 

//상수

타입 상수명 = 값;

 

//추상 메소드

타입 메소드명(매개변수, ... );

 

//디폴트 메소드

default 타입 메소드명(매개변수, ... ){

  //구현부

}

 

//정적 메소드

static 타입 메소드명(매개변수) {

  //구현부

}

 

}

상수 : 인터페이스에서 값을 정해줄테니 함부로 바꾸지 말고 제공해주는 값만 참조해라 (절대적)

추상메소드 : 가이드만 줄테니 추상메소드를 오버라이팅해서 재구현해라. (강제적)

디폴트메소드 : 인터페이스에서 기본적으로 제공해주지만, 맘에 안들면 각자 구현해서 써라. (선택적)

정적메소드 : 인터페이스에서 제공해주는 것으로 무조건 사용 (절대적)

 

그렇다면 왜 인터페이스는 가능할까요?

그건 바로 인터페이스는 실질적인 구현이 이루어지지 않고 메소드에 대한 정의만 하고 있기 때문입니다. 결국엔 메소드가 겹치더라도 최종 구현 부분은 구현 객체(Concrete class)에서 이루어질 것이기 때문에 위와 같은 코드가 전혀 문제없게 됩니다.

 

클래스 상속과 인터페이스 상속의 차이

클래스 상속은 is-a 관계, 인터페이스는 can-do 관계

클래스 상속은 부모클래스의 기능을 자식클래스가 모두 사용해야 하지만  인터페이이스는 필요한 기능 일부만 사용이 가능하다.

 

핸들러

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함