카테고리 없음

230105

Berylly 2023. 1. 5. 10:38

T. 김동식

 

JAVA

 

이론복습

지역변수는 내부에서만 사용될수잇고 스택 메모리에 생성된다.

static 예약어를 사용하는 static은 데이터영역 메모리에 생성된다.

 

이론

agile 방법론: 피드백->재설계->피드백->재설계

Water fall 방법론: 요구사항분석->설계->구현->테스트->유지보수

 

Stream 스트림

입력스트림: 출발지로 가는길(키보드, 파일, 프로그램)

출력스트림: 도착지로 가는길(모니터, 파일, 프로그램)

 

 

 

싱글톤 복습

class CardCompany1{
	String name;
	int cardNum;
	
	public CardCompany1(String name) {
		super();
		this.name = name;
		cardNum = 1000;
	}
	
	void makeCard() {
		cardNum++;
	}
}

 

//		카드회사에서 카드를 발급할ㄸ마다 고유번호를 부여, 카드가 생성될때마다 카드 번호가 자동으로 증가할 수 있도록 카드클래스
System.out.println("-----------------");
CardCompany1 cardCompany1 = new CardCompany1("박상희1");
System.out.println(cardCompany1.name+"의 카드번호는"+cardCompany1.cardNum);
cardCompany1.makeCard();
System.out.println("새로운 카드를 카드를 발급했다");
System.out.println(cardCompany1.name+"의 카드번호는"+cardCompany1.cardNum);
		
CardCompany1 cardCompany2 = new CardCompany1("박상희2");
System.out.println(cardCompany2.name+"의 카드번호는"+cardCompany2.cardNum);
cardCompany2.makeCard();

System.out.println(cardCompany1==cardCompany2);

false, 두 객체는 같지않다.

위 연습을 싱글톤으로 변화

 

class CardCompany2{
	static String name;
	int cardNum;
	
	private static CardCompany2 cardCompany2 = new CardCompany2(name);
	private CardCompany2(String name) {
		super();
		this.name = name;
		cardNum = 1000;
	}
	
	public static CardCompany2 getInstance() {
		if(cardCompany2 ==null) {
			cardCompany2 = new CardCompany2(name);
		}
		return cardCompany2;
	}
	
	void makeCard() {
		cardNum++;
	}
}

기존 class 안에서 객체와 그 객체를 보내줄 함수를 만들었다.

널 체크/유효성 체크를 추가한뒤 그 객체를 반환한다.

외 접근할 수 있도록  static을 붙였는데 사소한것들은 이클립스에서 알아서 오류로 챙겨줬다.

 

//	싱글톤으로
System.out.println("-----------------");
CardCompany2 cardCompany22 = CardCompany2.getInstance();
cardCompany22.name = "싱글톤1";
System.out.println(cardCompany22.name+"의 카드번호는"+cardCompany22.cardNum);
cardCompany22.makeCard();
System.out.println(cardCompany22.name+"의 카드번호는"+cardCompany22.cardNum);
		
CardCompany2 cardCompany222 = CardCompany2.getInstance();
cardCompany222.name = "싱글톤2";
System.out.println(cardCompany222.name+"의 카드번호는"+cardCompany222.cardNum);
cardCompany222.makeCard();
System.out.println(cardCompany222.name+"의 카드번호는"+cardCompany222.cardNum);
		
System.out.println(cardCompany22==cardCompany222);

true, 두 객체는 같다.

 

이후 new class()가 아닌 함수로 객체를 생성하고,

출력한뒤, 한번더 출력해 확인해봤다.

카운팅도 잘되어 카드번호도 잘 + 되는것을 확인했다.

출력은 이전과 똑같이 나오지만, 주소값이 동일해 결국 같은 객체임을 확인 할 수 있었다.

 

 

 

 

 

Servlet

 

서블릿 life cycle
init 초기화, 맨 처음 한 번만 호출
doGet 작업 수행, 매번 호출
doPost 작업 수행, 클라이언트가 요청하는 작업을 수행
destroy 종료, 메모리에서 소멸

 

 

프로젝트 서버올리기

1. Dynamic Web Project생성 - Project name - Target runtime 톰캣결 - NEXT - NEXT - Generate web.xml deployment descriptor 체크 - FINISH
2. Java Resources - 패키지 생성 - 해당 패키지에서 - [NEW] Servlet - class name지정 - NEXT - URL mappings Edit - Constructors from superclass 체크해제 / method 선택 - FINISH

3. class수정 - 서버연결 - 서버 시작

 

 

 

url 패턴
생성한 class 파일에서 아래와 같이 수정

//@WebServlet("/h1")
@WebServlet(urlPatterns = {"/hi", "/hi1", "/hi2"})

 

 

 

화면띄우기

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("doGet");
		
//		PrintWriter로 출력한다
		PrintWriter pw = response.getWriter();
		pw.print("sanghee");
	}

 

pw.print("<html><h1>sanghee</h1></html>");

 

 

 

위 처럼 setContentType이 없어도 인식되지만,

아래가 정석.

response.setContentType("text/html; charset=UTF-8");
PrintWriter pw = response.getWriter();
//pw.print("sanghee");
pw.print("<html><h1>sanghee | 박상희</h1></html>");

 

 

 

Node

자바스크립트를 실행하는 엔진, JavaScript runtime built

https://nodejs.org/en/

 

Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

 

자동형변환

> "52"-1
51

 

===

값 뿐만아니라 형까지도 같은지 확인한다

> `${52 == "52"}`
'true'
> `${52 === "52"}`
'false'

> `${0==""}`
'true'
> `${0===""}`
'false'

 

hoisting

변수선언의 끌어올림, 값까지 끌어올리지않는다.

console.log(a)
VM221:1 Uncaught ReferenceError: a is not defined at <anonymous>:1:13

console.log(a)
var a
undefined

console.log(b)
var b = "박상희"
undefined

console.log(b)
박상희

 

 

 

 

*이후 배우게 될것들

 

npm

node 패키지 관리자

 

pip

python 패키지 관리자