본문 바로가기
학원수업/12월

12/28 국비학원 자바수업 23회차(Tread, Override, Tomcat)

by 코딩마스터^^ 2022. 12. 28.

Thread

-주니어 개발자에게 맡기지 않는다.

: 언제 필요할까? 

:어떻게 생성할까?

 

구현방법

  1.  extends Thread
  2. 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)
  1. 컨테이너, 웹 컨테이너, 서블릿 컨테이너라고 부름
  2. JSP,서블릿처리,HTTP요청 수신 및 응답
  3. 아파치만 쓰면 정적인 웹페이지만 처리하므로 처리속도가 매우 빠르고 안정적이다.

하지만 톰캣(WAS)를 쓰면 동적인 데이터 처리가 가능하다. DB연결,데이터 조작, 다른 응용프로그램과 상호 작용이 가능하다. 톰캣은 8080포트로 처리한다.

출처 : https://byul91oh.tistory.com/65

 

[Apache Tomcat] 아파치 톰캣이란 ?

리눅스 서버나 웹서버를 만들다보면 만나는 Apache Tomcat에 대해 알아보자. 아파치 톰캣 ? Server, Web Server 우리가 사용하는 웹페이지는 아파치와 톰캣으로 이루어져있다. 리눅스 서버를 만들거나 웹

byul91oh.tistory.com

톰캣은 vscode에서하려면 복잡하다.

eclipes로 돌아가자.

RESTful API란 무엇인가? - RESTful API 초보자 가이드 - AWS (amazon.com)

 

RESTful API란 무엇인가? - RESTful API 초보자 가이드 - AWS

Amazon API Gateway는 어떤 규모에서든 개발자가 API를 손쉽게 생성, 게시, 유지 관리, 모니터링 및 보안 유지할 수 있도록 하는 완전관리형 서비스입니다. API Gateway를 사용하면 실시간 양방향 통신 애

aws.amazon.com

RESTful API란 무엇인가요?

RESTful API는 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스입니다. 

오라클 연동 자체가 서드파티 어플리케이션 

서버를 통해서 요청을 하고 응답을 받는것이다.

오라클 서버는 DML을 사용한다.

소켓통신은 자바를 사용한다.

그 사이에 규칙을 정의하는것이 API이다.

 

집에서도 다른 컴퓨터는 아이피가 다르다.

반드시 공유기를 경유해야 아이피 어드레스를 할당 받는다.

각 기계마다 따로

사설 아이피를 카카오쪽에 등록해야한다.

카카오톡 API사용할때 나는 클라이언트 입장

댓글