Thread
-주니어 개발자에게 맡기지 않는다.
: 언제 필요할까?
:어떻게 생성할까?
구현방법
- extends Thread
- implements Runnable
공통점
메소드 오버 라이딩
@Override
public void run(){}
A a=new A();
Thread th= new A();
th.start();
선언부의 타입과 생성부의 타입이 같은 경우가 있고 다른경우가 있다.
선언부 타입(추상클래스, 인터페이스) != 생성부 타입(구현체 클래스)
다형성을 누리고 싶으면 선언부와 생성부의 타입을 다르게 가져간다.
유지보수시 코드를 최소한으로 수정하고 기능수정이 가능하게됨(오타, 실수)
다형성(polymorphism)이란?
다형성(polymorphism)이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미합니다.
자바에서는 이러한 다형성을 부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있도록 하여 구현하고 있습니다.
다형성은 상속, 추상화와 더불어 객체 지향 프로그래밍을 구성하는 중요한 특징 중 하나입니다.
웹서버-web application server(WAS)-스레드 구현되어있음
메인에서
Sub을 호출하면 this.m();은 Sub이 호출됨
super.m();은 Sup이 호출됨.
(인터페이스)List는 ArrayList와 Vector(구현체클래스)를 가지고있다.
인터페이스에는 반드시 구현체클래스가 있어야한다.
package dev_java.week5;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
//List-java.util.List(interface)-ArrayList, Vector입니다.
//결론-그래서 m메소드가 m2메소드보다 더 다양하다
public class MyB {
void m(List<String> myNames){
System.out.println("===========[[List<String>]]==========");
for(String s:myNames){
System.out.println(s);
}
}
void m2(Vector<String> myNames){
System.out.println("===========[[Vector<String>]]==========");
for(String s:myNames){
System.out.println(s);
}
}
//JVM에서 제공하는 List에 대해서 구현체 클래스가 여러가지 있다.
//생성부와 선언부의 타입이 서로 다를수 있다. -권장사항
//권장하는 이유는 2가지 선택지가 있다.
public static void main(String[] args) {
MyB myB= new MyB();
List<String> nickNames3=new Vector<>();
nickNames3.add("사자");
nickNames3.add("호랑이");
nickNames3.add("표범");
ArrayList <String> nickNames= new ArrayList<>();
nickNames.add("토마토");//0
nickNames.add("키위");//1
nickNames.add("사과");//2
Vector<String> nickNames2= new Vector<>();
nickNames2.add("바나나");
nickNames2.add("포도");
nickNames2.add("딸기");
myB.m(nickNames3);//9번이 호출된다.왜 15번은 안돼?-범위(=Scope. List보다 타입이 더 구체적이다. )가 작으니까
myB.m(nickNames);
// myB.m2(nickNames);
myB.m(nickNames2);
myB.m2(nickNames2);
}
}
class A implements Runnable
@Override
public void run(){}
A a = new A();
Thread th = new Thread(a);
th.start();
콜백 함수란
1. 다른 함수의 인자로써 이용되는 함수.
2. 어떤 이벤트에 의해 호출되어지는 함수.
메소드를 관리하는 Stack에서 지역변수로 객체생성이 일어남
지역변수=local variable=atomatic variable
오버라이딩의 규칙
절대 선언부를 건드리지 않는다. 타입을 건드리지 않는다.
나는 Thread를 상속 받았다-그 말은 내생성자가 호출되면 그보다 먼저 Thread생성자 호출됨
클래스가 클래스임과 동시에 스레드일수있다.
스레드는 자바.랭에있어서 임포트를 안했다.
스레드 우선순위
스레드를 쓰는 이유는 suspend, yield, join 등등을 사용하기위함이다. 간단하게 이렇게 생각하기.
suspend-일시정지
join()-기다림. 다른스레드의 작업을 마칠때까지 일시정지
yield()-작업시간 양보
package dev_java.week5;
public class PriorityTest extends Thread {
//Field
private String threadName; //스래드 이름 기억용
//Constructor
public PriorityTest(String threadName) {
this.threadName = threadName;
}
//Method
@Override
public void run() {
//스래드 이름 출력 3번 반복
for(int i = 0; i < 3; i++) {
System.out.println(this.getName() + "가 구동됨.");//자바가 정해주는 이름
System.out.println(threadName + "가 구동됨.");
}
}//실행 할 때 마다 순서가 달라진다.
public static void main(String[] args) {
// 우선 순위 테스트용
//나는 Thread를 상속 받았다-그 말은 내생성자가 호출되면 그보다 먼저 Thread생성자 호출됨
Thread t1 = new PriorityTest("제일 높은 스래드");
Thread t2 = new PriorityTest("보통 스래드");
Thread t3 = new PriorityTest("제일 낮은 스래드");
t1.setPriority(Thread.MAX_PRIORITY); //10-가중치-절대적이지 않다. 밀려날수도있다.
t2.setPriority(Thread.NORM_PRIORITY); //5
t3.setPriority(Thread.MIN_PRIORITY); //1
t1.start();
t2.start();
t3.start();
}
}
start()가 호출되었을때 바로 호출되는것이 아니다.
대기하는 방이 있다. 그 방에서 yield join등등 으로 순서를 따져서 진입한다.
package dev_java.thread1;
import javax.swing.JFrame;
public class JFrameTimerClose extends JFrame {
public JFrameTimerClose() {
super("JFrame테스트-5초 후 창닫기");
this.setSize(500, 500);
this.setVisible(true);
// 대기
try {
Thread.sleep(5000);// 5초
} catch (InterruptedException ie) {
ie.printStackTrace();
}
setVisible(false);// 5초후에 사라짐
}
public static void main(String[] args) {
new JFrameTimerClose();// 생성자 호출하기
}
}
http 프로토콜을 이용하면 카카오 서버에 요청을 보내고 응답(토큰)을 받을 수 있다.
stateless의 특징을 가진다. 비상태 프로토콜이다.
https : s는 시큐리티
url서비스를 이용
카카오 서버와 통신
네이버 서버와 통신
RESTfull API 사전지식
GET방식 POST방식
톰캣 (Tomcat)
dynamic(동적)인 웹을 만들기 위한 웹 컨테이너, 서블릿 컨테이너라고 불리며, 웹서버에서 정적으로 처리해야할 데이터를 제외한 JSP, ASP, PHP 등은 웹 컨테이너(톰캣)에게 전달한다.
- WAS(Web Application Server)
- 컨테이너, 웹 컨테이너, 서블릿 컨테이너라고 부름
- JSP,서블릿처리,HTTP요청 수신 및 응답
- 아파치만 쓰면 정적인 웹페이지만 처리하므로 처리속도가 매우 빠르고 안정적이다.
하지만 톰캣(WAS)를 쓰면 동적인 데이터 처리가 가능하다. DB연결,데이터 조작, 다른 응용프로그램과 상호 작용이 가능하다. 톰캣은 8080포트로 처리한다.
출처 : https://byul91oh.tistory.com/65
톰캣은 vscode에서하려면 복잡하다.
eclipes로 돌아가자.
RESTful API란 무엇인가? - RESTful API 초보자 가이드 - AWS (amazon.com)
RESTful API란 무엇인가요?
RESTful API는 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스입니다.
오라클 연동 자체가 서드파티 어플리케이션
서버를 통해서 요청을 하고 응답을 받는것이다.
오라클 서버는 DML을 사용한다.
소켓통신은 자바를 사용한다.
그 사이에 규칙을 정의하는것이 API이다.
집에서도 다른 컴퓨터는 아이피가 다르다.
반드시 공유기를 경유해야 아이피 어드레스를 할당 받는다.
각 기계마다 따로
사설 아이피를 카카오쪽에 등록해야한다.
카카오톡 API사용할때 나는 클라이언트 입장
'학원수업 > 12월' 카테고리의 다른 글
12/29 국비수업 URL, 자바에서 Tomcat확인하기 (1) | 2022.12.29 |
---|---|
12/29 국비학원 자바수업 24회차(컬렉션 프레임워크, List, Map) (0) | 2022.12.29 |
12/27 국비학원 자바수업 22회차(오라클 Toad사용, Thread) (1) | 2022.12.27 |
12/26 국비학원 자바수업 21회차 (0) | 2022.12.26 |
12/23 국비학원 20회차(서버, 채팅프로그램 만들기) (1) | 2022.12.23 |
댓글