[TIL] 구디아카데미 6일차_1: 참조타입, 클래스만들기, 조건문, 반복문

Mijin·2023년 4월 12일
0

TIL

목록 보기
4/21
post-thumbnail

구디아카데미의 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
	}

❗ radio, select 값 넘겨받기


<%
	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);
%>
profile
개발자로 가는 길 🏃‍♀️

0개의 댓글