구디아카데미의 6일차가 지났다.
오늘부터는 과정 시작 전에 제대로 예습하지 못한 부분들이라 굉장히 새로웠다.
// 기본타입(8개) : 정수(byte, short, int, long), 실수(float, double), boolean, char
// 참조타입(?) : String, 배열, class
String name = new String("지니"); // new연산자는 참조의 데이터를 저장하는 공간을 생성하는 연산자(생성자)
// String name = "지니"; // 문자열상수를 사용하는 방법
out.print(name); // 출력 : 지니 → String은 다른 참조타입과 달리 데이터가 바로 출력된다
out.print(name.hashCode()); // 출력 : 1646856
// 배열 : 같은 타입의 변수를 여러개
int[] arr = null; // null : 아무것도 아니다
arr = new int[3]; //
out.print(arr); // 출력: [I@113d37b1 : int배열 @(구분자) 데이터위치
arr[0] = 7; // . []는 참조연산자
// [0] = 7; // 다른 배열을 만들면 똑같이 0이 있기 때문에 사용 불가
arr[1] = 6;
arr[2] = 3;
out.print(arr[0]); // 7
out.print(arr[1]); // 6
out.print(arr[2]); // 3
package gdj66; // package이름은 절대 대문자를 적지 않는다
// class이름은 대문자로 시작한다 (ex. JavaClass)
public class Person {
public int no; // public : 오픈되어있음, protected : 보안
public int age;
public boolean married;
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.lang.*"%> <!-- import는 자바문법이 아니라 단축표현에 불과하다 -->
<%@ page import="gdj66.Person"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
Person p;
p = new Person(); // gdj66.Person()는 생성자메소드, 항상 클래스 이름과 동일하다
p.no = 1;
p.age = 24;
p.married = false;
Person kyh; // import를 사용: 클래스 이름을 줄여 gdj66.Person 대신 Person사용 가능
kyh = new Person();
kyh.no = 1;
kyh.age = 29;
kyh.married = false;
Person ksj;
ksj = new Person();
ksj.no = 2;
ksj.age = 30;
ksj.married = false;
out.print(p); // 참조값 출력)
// 추상화의 결과 : 데이터타입
%>
<div>번호 : <%=p.no%></div>
<div>나이 : <%=p.age%></div>
<div>결혼유무 : <%=p.married%></div>
<h2>KYH</h2>
<div>번호 : <%=kyh.no%></div>
<div>나이 : <%=kyh.age%></div>
<div>결혼유무 : <%=kyh.married%></div>
<h2>KSJ</h2>
<div>번호 : <%=ksj.no%></div>
<div>나이 : <%=ksj.age%></div>
<div>결혼유무 : <%=ksj.married%></div>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import = "java.util.Calendar" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
// 1. 요청처리
String sn = request.getParameter("sn1") + request.getParameter("sn2");
// 9012251234567
// 7(인덱스6)번째 문자(열)를 뽑아서 숫자로 변경
String s7 = sn.substring(6, 7);
int gender = Integer.parseInt(s7);
// 2. 성별
String sGender = null; // if 짝수 홀수
if(gender%2==1) {
sGender = "남성";
} else {
sGender = "여성";
}
// 3. 나이
String preYear = "null";
if(gender==0 || gender==9 ) {
preYear = "18";
} else if (gender == 1 || gender == 2 || gender == 5 || gender == 6) {
preYear = "19";
} else {
preYear = "20";
}
String year = preYear + sn.substring(0, 2);
int birthYear = Integer.parseInt(year);
// 오늘 날짜 정보를 반화하는 클래스 java.lang.Calendar
Calendar today = Calendar.getInstance();
// today에서 오늘 년도만 추출
int todayYear = today.get(Calendar.YEAR);
int age = todayYear - birthYear;
%>
성별 : <%=sGender %><br>
나이 : <%=age %>세
</body>
</html>
// 변수 생명주기(variable scope)
// 1. 변수 선언 후 사용 가능
// out.print(x); // 변수 x가 선언되기 전이라 error
int x = 1;
out.print(x);
// 2. 자바언어의 변수 생명주기는 블록{}
{
int a = 2;
a = 7;
out.print(a);
}
// a = 10; // error
int b = 3;
{
b = 5;
out.print(b);
int c = 6;
{
out.print(b);
out.print(c);
int d = 9;
}
// out.print(d); // error
}
<%
request.setCharacterEncoding("utf-8"); // void: 반환값이 없다
String gender = request.getParameter("gender");
String married = request.getParameter("married");
%>
<div>
성별
<%
if(gender.equals("남")) {
// radio에서 남이 선택된 상태
%>
<input type="radio" value="남" name="gender" checked="checked">남
<input type="radio" value="여" name="gender">여
<%
} else {
// radio에서 여가 선택된 상태
%>
<input type="radio" value="남" name="gender">남
<input type="radio" value="여" name="gender" checked="checked">여
<%
}
%>
</div>
<div>
<select name="married">
<%
if(married.equals("미혼")) {
// select에서 미혼이 선택된 상태
%>
<option value="미혼" selected="selected">미혼</option>
<option value="기혼">기혼</option>
<%
} else {
// select에서 기혼이 선택된 상태
%>
<option value="미혼">미혼</option>
<option value="기혼" selected="selected">기혼</option>
<%
}
%>
</select>
</div>
<%
// 1. 값분기
int score = 80;
if(score==100) {
out.print("A");
} else if(score==90) {
out.print("B");
} else if(score==80) {
out.print("C");
} else {
out.print("D");
}
%>
<br>
<%
switch(score) {
case 100:
out.print("A");
break; // break가 없으면 아래 조건도 만족하므로 ABCD모두 출력된다
case 90:
out.print("B");
break;
case 80:
out.print("C");
break;
default:
out.print("D");
}
%>
<br>
<%
// 2. 범위분기
int score2 = 80;
if(score2==100) {
out.print("A");
} else if(score2>=90) {
out.print("B");
} else if(score2>=80) {
out.print("C");
} else {
out.print("D");
}
// switch문으로 범위분기를 구현하는 것은 거의 불가능하다(만약 하려면 모든 case를 작성해야함)
%>
<%
// 반복문
int x = 0;
while(x < 5) {
out.print("hello");
x = x+1;
}
// hello가 5번 출력
%>
<br>
<%
for(int i=0; i<5; i=i+1) { // i는 블록안에서 생성된 지역변수와 같다 -> 블록을 나가면 i 쓸 수 있다
out.print("hi");
}
// hi가 5번 출력
%>
<br>
<%
// 1부터 10까지의 합
int n = 1;
int sum = 0;
for(int i=0; i<10; i=i+1) {
sum = sum + n;
n = n + 1;
}
out.print(sum);
%>
<br>
<%
// 1부터 10까지의 합
int sum2 = 0;
for(int i=1; i<11; i=i+1) {
sum2 = sum2 + i;
}
out.print(sum);
%>
<br>
<%
// 1부터 10까지의 짝수의 합
int sum3 = 0;
for(int i=1; i<11; i=i+1) { // ++i, i++, i+=1
if(i%2==0) {
sum3 = sum3 + i;
}
}
out.print(sum3);
%>