반응형

 

 

 

 

 

 

 

 

1. JSTL이란?

  • JSTL(JSP Standard Tag Library)은 JSP 페이지에서 조건문 처리, 반복문 처리 등을 html tag형태로 작성할 수 있게 도와줍니다.
  • for 웹디자이너
  • 자바 코드를 없애고 html 형태로 작성한다.

 

 

 

2. JSTL을 사용하려면?

 

 

 

3. JSTL이 제공하는 태그의 종류

 

 

 

 

4. 코어 태그

 

 

 

5. 코어 태그: 변수 지원 태그 - set, remove

 

 

 

5 -1). 코어 태그 : 실습

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="value1" scope="request" value="song"></c:set>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
성 : ${value1 }<br />
<c:remove var="value1" scope="request"/>
성 : ${value1 }<br />
</body>
</html>

jstl01.jsp

 

 

 

 

 

5 -2). 코어태그: 변수 지원 태그 - 프로퍼티, 맵의 처리

 

 

 

 

 

5 -3). 코어 태그: 흐름제어 태그

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
	request.setAttribute("score", 83);
%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:choose>
	<c:when test="${score >= 90 }">
		A학점입니다.
	</c:when>
	<c:when test="${score >= 80 }">
		B학점입니다.
	</c:when>
	<c:when test="${score >= 70 }">
		C학점입니다.
	</c:when>
	<c:when test="${score >= 60 }">
		D학점입니다.
	</c:when>
	<c:otherwise>
		F학점입니다.
	</c:otherwise>
</c:choose>

</body>
</html>

jstl03.jsp

 

 

-> choose, when, otherwise는 if / else 와 똑같은 기능을 한다.

 

 

 

 

5 -4). 코어 태그: 흐름제어 태그 - forEach

 

 

실습

<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
	List<String> list = new ArrayList<>();	
	list.add("hello");
	list.add("world");
	list.add("!!!!!");
	
	request.setAttribute("list", list);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<c:forEach var="item" items="${list }" begin="1" >
	${item } <br />
</c:forEach>

</body>
</html>

 

jstl04.jsp

 

 

 

-> 인덱스가 1부터 시작하기 때문에 두 번째 리스트값부터 출력한다.

 

 

 

 

 

 

 

5 -5) 코어 태그: 흐름제어태그 - import

 

 

 

실습

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
Hello World !!! <br />

jstlValue.jsp

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
<c:import url="http://localhost:8080/JSTL_example/jstlValue.jsp" var="urlValue" scope="request"></c:import>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

${urlValue }

</body>
</html>

jstl05.jsp

 

 

-> jstlValue.jsp 에 있는 내용이 jstl05.jsp 에서 출력된다.

 

 

 

 

 

 

5 -6) 코어 태그: 흐름제어태그 - redirect

 

 

 

 

 

5 -7) 코어 태그: 기타태그 - out

 

 

 

실습

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:set var="t" value="<script type='text/javascript'>alert(1);</script>" />

<c:out value="${t }" escapeXml="true"/>
<c:out value="${t }" escapeXml="false"/>

</body>
</html>

jstl07.jsp

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형
반응형

 

 

 

 

 

 

 

 

 

1. 표현 언어란?

  • 표현 언어(Expression Language)는 값을 표현하는 데 사용되는 스크립트 언어로서 JSP의 기본 문법을 보완하는 역할을 한다.

 

 

2. 표현 언어가 제공하는 기능

  • JSP의 스코프(scope)에 맞는 속성 사용
  • 집합 객체에 대한 접근 방법 제공
  • 수치 연산, 관계 연산, 논리 연산자 제공
  • 자바 클래스 메소드 호출 기능 제공
  • 표현언어만의 기본 객체 제공

 

 

3. 표현언어의 표현방법

${expr}

 

 

 

 

4. 표현언어의 기본 객체

 

pageContext

pageScope

requestScope

sessionScope

applicationScope

param

paramValues

header

headerValues 등

 

 

 

 

5. 표현 언어의 기본 객체 사용 예

 

${pageContext.request.requestURI}

${requestScope.name}

${param.code}

 

 

 

 

6. 표현 언어의 데이터 타입

  • 불리언 타입 - true와 false
  • 정수타입 - 0~9로 이루어진 정수 값 음수의 경우 '-'가 붙음
  • 실수타입 - 0~9로 이루어져 있으며, 소수점('.')을 사용할 수 있고, 3.24e3과 같이 지수형으로 표현 가능하다.
  • 문자열 타입 - 따옴표( ' 또는" )로 둘러싼 문자열. 만약 작은 따옴표(')를 사용해서 표현할 경우 값에 포함된 작은 따옴표는 \' 와 같이 \ 기호와 함께 사용해야 한다.
  • \ 기호 자체는 \\ 로 표시한다.
  • 널 타입 - null

 

 

 

 

 

7. 객체 접근 규칙

${<표현1}.<표현2>}
  • 표현 1이나 표현 2가 null이면 null을 반환한다.
  • 표현1이 Map일 경우 표현2를 key로한 값을 반환한다.
  • 표현1이 List나 배열이면 표현2가 정수일 경우 해당 정수 번째 index에 해당하는 값을 반환한다.
  • 만약 정수가 아닐 경우에는 오류가 발생한다.
  • 표현1이 객체일 경우는 표현2에 해당하는 getter메소드에 해당하는 메소드를 호출한 결과를 반환한다.

 

8. 표현 언어의 수치 연산자

  • + : 덧셈
  • - : 뺄셈
  • * : 곱셈
  • / 또는 div : 나눗셈
  • % 또는 mod : 나머지
  • 숫자가 아닌 객체와 수치 연산자를 사용할 경우 객체를 숫자 값으로 변환 후 연산자를 수행 : ${"10"+1} → ${10+1}
  • 숫자로 변환할 수 없는 객체와 수치 연산자를 함께 사용하면 에러를 발생 : ${"열"+1} → 에러
  • 수치 연산자에서 사용되는 객체가 null이면 0으로 처리 : ${null + 1} → ${0+1}

 

 

 

 

9. 비교 연산자

  • == 또는 eq
  • != 또는 ne
  • < 또는 lt
  • > 또는 gt
  • <= 또는 le
  • >= 또는 ge
  • 문자열 비교: ${str == '값'} str.compareTo("값") == 0 과 동일

 

 

 

10. 논리 연산자

  • && 또는 and
  • || 또는 or
  • ! 또는 not

 

11. empty 연산자, 비교선택 연산자

empty <값>

 

1) <값>이 null이면 true를 리턴한다.

2) <값>이 빈 문자열이면 true를 리턴한다.

3) <값>이 길이가 0인 배열이면 true를 리턴한다.

4) <값>이 빈 Map이면 true를 리턴한다.

5) <값>이 빈 Collection이면 true를 리턴한다.

6) 이 외의 경우에는 false를 반환한다.

 

 

예제)

<수식> ? <값1> : <값2>

-> <수식>의 결과값이 true이면 <값1>을 리턴하고, false이면 <값2>를 리턴한다. 

 

 

 

 

 

 

12. 연산자 우선순위

  1. [] .
  2. ()
  3. - (단일) not ! empty
  4. * / div % mod
  5. + -
  6. < > <= >= lt gt le ge
  7. == != eq ne
  8. && and
  9. || or
  10. ? :

 

 

 

 

13. 표현 언어 비활성화 : JSP에 명시하기

  • <%@ page isELIgnored = "true" %>

 

 

 

 

 

 

 

14. EL 예제 1)

4가지 scope에 값을 넣어서 EL 문법을 사용하여 출력해 보았다.

- pageScope.p1 에서 pageScope을 생략해줘도 출력이 가능하지만, 의미의 명확성을 위해 써 주는 것이 좋다.

 

* 만약 EL 태그에서 값이 중복될 때에는 범위가 작은 pageScope부터 탐색한다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%
	pageContext.setAttribute("p1", "page scope value");
	request.setAttribute("r1", "request scope value");
	session.setAttribute("s1", "session scope value");
	application.setAttribute("a1", "application scope value");
%>

<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	pageContext.getAttribute("p1") : <%=pageContext.getAttribute("p1") %> <br />
	
	pageContext.getAttribute("p1") : ${pageScope.p1} <br />
	request.getAttribute("r1") : ${requestScope.r1} <br />
	session.getAttribute("s1") : ${sessionScope.s1} <br />
	application.getAttribute("a1") : ${applicationScope.a1} <br />
	
	pageContext.getAttribute("p1") : ${p1} <br />
	request.getAttribute("r1") : ${r1} <br />
	session.getAttribute("s1") : ${s1} <br />
	application.getAttribute("a1") : ${a1} <br />

</body>
</html>

el01.jsp

 

 

 

 

 

 

 

 

15. EL 예제 2)

EL문법으로 사칙연산 해보기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
	request.setAttribute("k", 10);
	request.setAttribute("m", true);	
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

k : ${requestScope.k } <br />
k + 5 : ${k + 5 } <br />
k - 5 : ${k - 5 } <br />
k * 5 : ${k * 5 } <br />
k / 5 : ${k div 5 } <br /><br />

k : ${k } <br />
m : ${m } <br />

k > 5 : ${k > 5 } <br />
k < 5 : ${k < 5 } <br />
k <= 5 : ${k <= 5 } <br />
k >= 5 : ${k >= 5 } <br />
m : ${m } <br />
!m : ${!m } <br />


</body>
</html>

el02.jsp

 

 

<%@ page isELIgnored = "true" %> 를 추가해서 EL을 비활성화 해보기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page isELIgnored = "true" %>
<%
	request.setAttribute("k", 10);
	request.setAttribute("m", true);	
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

k : ${requestScope.k } <br />
k + 5 : ${k + 5 } <br />
k - 5 : ${k - 5 } <br />
k * 5 : ${k * 5 } <br />
k / 5 : ${k div 5 } <br /><br />

k : ${k } <br />
m : ${m } <br />

k > 5 : ${k > 5 } <br />
k < 5 : ${k < 5 } <br />
k <= 5 : ${k <= 5 } <br />
k >= 5 : ${k >= 5 } <br />
m : ${m } <br />
!m : ${!m } <br />


</body>
</html>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

'Programming > JSP & Servlet & Mysql' 카테고리의 다른 글

부스트캠프 7) Web API  (0) 2020.12.16
부스트캠프 6) JSTL  (0) 2020.12.16
부스트캠프 4) 4가지 Scope  (0) 2020.12.14
부스트캠프 3) 서블릿과 JSP 연동  (0) 2020.12.14
부스트캠프 2) REST API 란?  (0) 2020.11.21
반응형

 

 

 

 

 

 

 

 

 

 

 

1. 4가지 Scope

 

  • Application : 웹 어플리케이션이 시작되고 종료될 때까지 변수가 유지되는 경우 사용
  • Session : 웹 브라우저 별로 변수가 관리되는 경우 사용
  • Request : http요청을 WAS가 받아서 웹 브라우저에게 응답할 때까지 변수가 유지되는 경우 사용
  • Page : 페이지 내에서 지역변수처럼 사용

 

 

 

Q. 회사 관리 프로그램을 만듭니다. 회사 전체적으로 사용되는 특정 정보가 약 1메가 정도 있습니다. 이 정보는 자주 바뀌지 않고, 모든 사원들이 공통적으로 사용하는 코드입니다. 이러한 정보는 어떤 scope로 사용하는 것이 좋을까요?

 

A. Application Scope으로 만드는 게 좋을 것 같습니다.

왜냐하면 모든 사원들이 공통적으로 사용하고, 정보가 자주 바뀌지 않기 때문입니다.

 

 

 

 

 

 

2. Page Scope

  • PageContext 추상 클래스를 사용한다.
  • JSP 페이지에서 pageContext라는 내장 객체로 사용 가능 하다.
  • forward가 될 경우 해당 Page scope에 지정된 변수는 사용할 수 없다.
  • 사용방법은 Application scope나 Session scope, request scope와 같다.
  • 마치 지역변수처럼 사용된다는 것이 다른 Scope들과 다릅니다.
  • jsp에서 pageScope에 값을 저장한 후 해당 값을 EL표기법 등에서 사용할 때 사용됩니다.
  • 지역 변수처럼 해당 jsp나 서블릿이 실행되는 동안에만 정보를 유지하고자 할 때 사용됩니다.

 

- 요청이 끝날 때까지 유지되는 request 객체와 다르게,

page scope과 pageContext 객체는 해당 페이지가 실제 실행되는 동안에만 사용할 수 있다.

- 사용 방법은 pageContext.setAttribute, pageContext.getAttribute 를 사용하면 된다.

 

 

 

 

 

 

 

 

 

 

3. Request Scope

  • http 요청을 WAS가 받아서 웹 브라우저에게 응답할 때까지 변수값을 유지하고자 할 경우 사용한다.
  • HttpServletRequest 객체를 사용한다.
  • JSP에서는 request 내장 변수를 사용한다.
  • 서블릿에서는 HttpServletRequest 객체를 사용한다.
  • 값을 저장할 때는 request 객체의 setAttribute()메소드를 사용한다.
  • 값을 읽어 들일 때는 request 객체의 getAttribute()메소드를 사용한다.
  • forward 시 값을 유지하고자 사용한다.
  • 앞에서 forward에 대하여 배울 때 forward 하기 전에 request 객체의 setAttribute() 메소드로 값을 설정한 후, 서블릿이나 jsp에게 결과를 전달하여 값을 출력하도록 하였는데 이렇게 포워드 되는 동안 값이 유지되는 것이 Request scope를 이용했다고 합니다.

 

Q. 리다이렉트 될 경우에도 request scope를 이용하면 정보를 유지할 수 없는데, 그 이유는 무엇인가요?

A. 리다이렉트는 여러개의 요청과 응답객체를 통해 작업이 이루어지기 때문에

하나의 요청과 응답이 끝날 때까지만 정보가 유지되는 request Scope로는 정보를 유지할 수 없음

 

 

 

 

 

4. Session Scope

  • 웹 브라우저별로 변수를 관리하고자 할 경우 사용한다.
  • 웹 브라우저간의 탭 간에는 세션정보가 공유되기 때문에, 각각의 탭에서는 같은 세션정보를 사용할 수 있다.
  • HttpSession 인터페이스를 구현한 객체를 사용한다.
  • JSP에서는 session 내장 변수를 사용한다.
  • 서블릿에서는 HttpServletRequest의 getSession()메소드를 이용하여 session 객체를 얻는다.
  • 값을 저장할 때는 session 객체의 setAttribute()메소드를 사용한다.
  • 값을 읽어 들일 때는 session 객체의 getAttribute()메소드를 사용한다.
  • 장바구니처럼 사용자별로 유지가 되어야 할 정보가 있을 때 사용한다.

ex) 로그인 정보를 유지시킬 때

 

 

 

 

 

 

5. Application Scope

  • 웹 어플리케이션이 시작되고 종료될 때까지 변수를 사용할 수 있다.
  • ServletContext 인터페이스를 구현한 객체를 사용한다.
  • jsp에서는 application 내장 객체를 이용한다.
  • 서블릿의 경우는 getServletContext()메소드를 이용하여 application객체를 이용한다.
  • 웹 어플리케이션 하나당 하나의 application객체가 사용된다.
  • 값을 저장할 때는 application객체의 setAttribute()메소드를 사용한다.
  • 값을 읽어 들일 때는 application객체의 getAttribute()메소드를 사용한다.
  • 모든 클라이언트가 공통으로 사용해야 할 값들이 있을 때 사용한다.

 

 

 

5. -1) 예시

 

ApplicationScope01.java 에서 value 값을 1로 설정하고, application scope에 넣어준다.

ApplicationScope02.java에서 value 값을 받아서 1을 더해준 다음, application scope에 다시 넣어준다.

ApplicationScope01.jsp에서 value 값을 받아서 2를 더해준 다음, application scope에 다시 넣어준다.

 

package example;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/ApplicationScope01")
public class ApplicationScope01 extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public ApplicationScope01() {
        super();
        
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		
		response.setContentType("text/html; charset=UTF-8");
		
		PrintWriter out = response.getWriter();
	    ServletContext application = getServletContext();
	    
	    int value = 1;
	    application.setAttribute("value", value);
	    
	    out.println("<h1>value : " + value + "</h1>");
		
	}

}

ApplicationScope01.java

 

 

 

 

package example;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/ApplicationScope02")
public class ApplicationScope02 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       

    public ApplicationScope02() {
        super();
        // TODO Auto-generated constructor stub
    }


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		
	    ServletContext application = getServletContext();
	    try {
		    int value = (int)application.getAttribute("value");
		    value++;
		    application.setAttribute("value", value);
		    
		    out.println("<h1>value : " + value + "</h1>");
	    } catch(NullPointerException e) {
	    	out.println("value의 값이 설정되지 않았습니다.");
	    }
	}

}

ApplicationScope02.java

 

 

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	try {
	    int value = (int)application.getAttribute("value");		// jsp는 이미 application 내장객체를 가지고 있음
	    value += 2;
	    application.setAttribute("value", value);
%>
	<h1>value : <%=value %></h1>

<%
	} catch(NullPointerException e) {
%>
	<h1>설정된 값이 없습니다.</h1>
<%
	}
%>

</body>
</html>

ApplicationScope01.jsp

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형
반응형

 

 

 

 

 

 

 

1. 서블릿과 JSP 차이

서블릿은 자바이기 때문에 프로그램 로직을 짜기가 편리하다.

반면, JSP는 자바 코드를 사용하기 위해 스크립트릿이라든지 선언문이라든지를 통해 써야하기 때문에 번거롭다.

 

하지만, JSP는 html을 사용할 수 있기 때문에 "출력"면에서 편리하다.

서블릿에서는 html을 사용할 때 out.println에서 문자열로 html 태그를 다 넣어줘야 하기 때문에 매우 번거롭다.

 

즉, 프로그램 로직을 짜기에는 서블릿이 편하고, html을 출력하기 위해서는 JSP가 편하다.

따라서, 서블릿과 JSP를 연동하여 서블릿에서 프로그램 로직을 짜고, JSP로 포워딩한다.

 

 

 

 

2. 코드

: 2개의 랜덤 값을 더해서 출력하는 코드를 작성해본다.

 

 

package example;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/logic")
public class LogicServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
 
    public LogicServlet() {
        super();

    }

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		int v1 = (int)(Math.random() * 100) + 1;
		int v2 = (int)(Math.random() * 100) + 1;
		int result = v1 + v2;
		
		request.setAttribute("v1", v1);
		request.setAttribute("v2", v2);
		request.setAttribute("result", result);
		
		RequestDispatcher rd = request.getRequestDispatcher("/result.jsp");		// 루트 : WebContent
		rd.forward(request, response);
		
	}

}

LogicServlet.java

 

: v1과 v2 랜덤값을 발생시키고, result에 그 합을 넣는다

: request에 v1, v2, result 를 담아서 보낸다.

: RequestDispatcher로 result.jsp로 forward 한다.

 

 

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<!-- jsp -->
<%
	int v1 = (int)request.getAttribute("v1");
	int v2 = (int)request.getAttribute("v2");
	int result = (int)request.getAttribute("result");
%>
<%=v1 %> + <%=v2 %> = <%=result %>
<br />


<!-- jstl -->
${v1 } + ${v2 } = ${result}

</body>
</html>

result.jsp

 

 

: request 객체에서 v1, v2, result 값을 받아온다.

: JSTL로 구현도 가능하다.

 

 

 

 

 

: forward 이기 때문에 url 매핑은 바뀌지 않는다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형
반응형

 

 

 

 

 

 

 

 

 

1. 두 모집단의 평균 비교 : 표본 추출이 독립적인 경우

 

X바1과 X바2의 비교는 X바1 - X바2로 할 수 있다.

µ1과 µ2의 비교는 µ1 - µ2로 할 수 있다. 

 

 

E(X바1 - X바2) = µ1 - µ2

Var(X바1 - X바2) = Var(X바1) + Var(X바2) - 2Cov(X바1, X바2)

 

두 모집단에서 표본추출이 독립적이라면 Cov(X바1, X바2) = 0이므로,

Var(X바1 - X바2) = Var(X바1) + Var(X바2) = σ1^2 / n1 + σ2^2/n2

 

¡) 두 모집단이 정규분포를 따르면 X바1 - X바2도 정규분포를 따른다.

¡¡) 두 모집단이 정규분포를 따르지 않더라도 자유도가 30 이상이면 X바1 - X바2는 정규분포에 근사하다.

 

 

 

 

 

 

2. µ1 - µ2의 추정 - 표본추출이 독립적인 경우

1) 점추정 : µ1 - µ2의 추정량은 X바1 - X바2이므로 이 값이 점추정값이다.

2) 구간추정 : [ (X바1 - X바2) - Z(√σ1^2 / n1 + σ2^2/n2),(X바1 - X바2) + Z(√σ1^2 / n1 + σ2^2/n2)]

-> 점추정값 +- 오차한계

 

 

 

 

3. 가설 검정 : 모분산 σ1와 σ2를 아는 경우

 

1) 가설 설정

Ho : µ1 = µ2

Ha : µ1 ≠ µ2

 

2) α = 0.05

 

3) Z = (X바1 - X바2) - µ0 / √σ1^2 / n1 + σ2^2/n2

 

4) 검정통계량 Z 계산

 

5) 가설의 채택 / 기각 결정 

 

 

 

4. 가설 검정 : 모분산 σ1와 σ2를 모르는 경우 + n < 30

 

- 두 모집단의 분산이 동일하지 않은 경우

σ1와 σ2를 S1과 S2로 대체한다.

 

따라서, 검정통계량은 

T = (X바1 - X바2) - µ0 / √S1^2 / n1 + S2^2/n2   ~ tdf

자유도(df) = (S1^2 / n1 + S2^2/n2)^2 / { (S1^2 / n1)^2 / (n1 - 1) + (S2^2/n2)^2/(n2-1)}

 

 

- 두 모집단의 분산이 동일한 경우

σ1와 σ2를 모분산 추정량(Sp^2)으로 대체한다.

Sp^2 = { (n1 - 1)S1^2 + (n2 - 1)S2^2 }  /  (n1 + n2 - 2)

 

따라서, 검정통계량은

T = (X바1 - X바2) - µ0 / √Sp^2 / n1 + Sp^2/n2   ~ t(n1+n2-2)

자유도(df) = n1 + n2 - 2

 

 

 

 

 

 

 

5. µ1 µ2의 비교 : 쌍체 비교( 종속추출 표본 )

 

 

 

Di = Xi - Yi로 하면,

E(D) = µD

Var(D바) = σ^2D / n

T = D바 - µD0 / SD / √n  ~t(n-1)

 

 

 

 

 

1) 모평균 차이에 대한 추정 : 쌍체비교

- 점추정 : µD의 점추정값은 표본평균인 d바

- 구간추정 : d바 +- t(sd / √n)

 

 

2) 검정통계량

T = D바 - 0 / SD / √n  ~ t(n-1)

 

 

 

 

 

6. 두 모집단 비율의 비교 : 표본추출이 독립적인 경우

 

비율을 비교하는 대신, 비율의 차이에 대해 추정 및 검정한다.

E(P^1 - P^2) = p1 - p2

Var(P^1 - P^2) = p1(1-p1) / n1 + p2(1-p2) / n2

n1과 n2가 충분히 크면 P^1 - P^2가 정규분포에 근사하다.

 

- 점추정값 : p^1 - p^2

- 구간추정 : [ p^1 - p^2 - Z√p^1(1-p^1) / n1 + p^2(1 - p^2) / n2,  p^1 - p^2 + Z√p^1(1-p^1) / n1 + p^2(1 - p^2) / n2 ]

 

 

 

 

 

 

7. 두 모집단 분산 비교에 대한 검정

F = X1^2 / (n1 - 1) / X2^2 / (n2 - 1) =  S^1 / S^2 ~ F(n1-1, n2-1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형
반응형

 

 

 

 

 

 

 

 

 

 

 

1. 가설검정의 순서

 

1) 가설의 설정

2) 검정통계량의 선정

3) 유의수준의 결정

4) 검정규칙의 설정

5) 자료수집 및 검정통계량 계산

6) 가설의 채택/기각 결정

 

 

 

 

 

2. 가설의 설정

- 귀무가설(Ho) : 기존의 알려진 지식이나 이론, 입증할 필요가 없는 가설

- 대립가설(Ha) : 주장하고자 하는 지식이나 이론, 입증할 필요가 있는 가설

 

[예] 기존의 알려진 과학 이론이 있는데, 어느 학자가 새로운 이론을 주장한다면

Ho : 기존의 과학 이론이 옳다.

Ha : 새로운 이론이 옳다.

 

 

 

 

 

 

3. 귀무가설과 대립가설의 유형

1) 양측 검정

Ho : θ = θo

Ha : θ θo

 

< 단측 검정 >

2) 우측 검정

Ho :  θ <= θo

Ha :  θ > θo

 

3) 좌측 검정

Ho :  θ >= θo

Ha :  θ < θo

 

 

** 귀무가설이나 대립가설은 채택할 수는 없고, 기각하지 못 한다라고 표현하는 것이 원칙이다.

 

 

 

 

 

4. 유의수준 결정

유의수준 : 일어날 가능성이 희박하다고 생각되는 확률 수준으로 귀무가설을 기각하는 기준이 된다.

 

제 1종의 오류 : Ho가 사실임에도 불구하고, 이를 기각하는 오류

제 2종의 오류 : Ho이 허위임에도 불구하고, 이를 채택하는 오류

 

 

 

 

 

 

 

 

 

 

 

 

5. 검정규칙의 결정

 

 

 

 

6. 자료수집 및 검정통계량 계산

: Z분포 또는 t분포 식을 이용한다.

 

 

7. p-값이란?

: 귀무가설이 사실이라는 가정 하에서 관측된 결과보다 극단적인 결과가 발생할 확률이다.

 

< p-값 vs 알파 값 >

-> p-값  >= α 이면 귀무가설을 채택한다.

-> p-값 < α 이면 귀무가설을 기각한다.

 

 

 

 

 

 

 

8. 모비율 / 모분산 / 모평균에 대한 가설검정

1) 모비율의 검정통계량의 산정

Z = P^ - p0 / (p0(1-p0)/n) ~ N(0, 1)

 

 

2) 모분산의 검정통계량의 산정

V = (n-1)S^2 / σ ~ X^2(n-1)

 

 

3) 모평균의 검정통계량 산정

Z = X바 - μ /  (σ / √n)~N(0,1)

또는

T = X바 - μ /  (S / √n)~t(n-1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

+ Recent posts