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
자동형변환
> "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 패키지 관리자