[TIL] 국비지원 7일차_2: 클래스, for문, foreach문, 리스트만들기

Mijin·2023년 4월 13일
0

TIL

목록 보기
7/21
post-thumbnail

✅클래스안에 선언된 메서드 호출하기

클래스의 역할
1. 사용자 정의 타입
2. 메서드의 상자

  • 데이터 타입 클래스
package good;

public class Student { // 클래스: 사용자 정의 타입
	public int no;
	public int age;
	public String name;
	public char gender; 
}
  • 클래스 안에 선언된 메서드
package good;

public class Function {
	// 일반 메서드
	public int add(int x, int y) { // x와 y는 매개변수
		int z = x + y;
		return z;
	}
	
	// static 메서드
	public static int minus(int x, int y) {
		int z = x - y;
		return z;
	}
}

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "good.Student"%>
<%@ page import = "good.Function"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	//1. 클래스는 사용자정의 타입 
	Student s = null; 
	/* 
	String, Calendar 등은 API에서 제공하는 클래스
	다른 사람이 이미 만들어 놓은 클래스들 -> 라이브러리
	라이브러리를 사용하는 방식 -> API
	*/
	s = new Student();
	/* 
	new 연산자
	1. 메모리확보
	2. 초기화
		no = 0; 
		age = 0;
		name = null;
		gender=''; <-없는 문자
	 */
	 
	s.no = 7;
	s.age = 28;
	s.name = "홍길동";
	s.gender = '남';
%>
	<div><%=s.name%></div>

<%
	// 2. 클래스는 메서드의 상자
	Function f = null; 
	f = new Function();
	int result = f.add(1, 2); // 3
	int k = 7;
	result = f.add(k, 7/3); // f.add(7, 2) = 9
			
	int result2 = Function.minus(5, 2);
	// result = Function.add(5, 2); error
	// static 메소드는 호출할 때 클래스 이름을 붙인다

	// static 메서드의 예
	Math.random();
	/* 우리가 선언하지 않아도 이미 선언되어 있는 내장객체
	out.print(); 
	request.getParameter("");
	*/
%>
</body>
</html>

✅ 배열, for문, foreach문

<%
	// 배열 : 동일한 타입 여러개를 참조하는 참조 타입
	int[] a = null;
	a = new int[3]; // a[0]->0, a[1]->0, a[2]->0
	// 배열호출 : 참조변수[인덱스]
	a[0] = 7;
	a[1] = 2;
	a[2] =10;
	// a[3] =1; // 예외(exception)발생

	int[] b = new int[3];
	int[] c = new int[]{7, 9, 10};
	int[] d = {8, 10};
	int[] e = null;
	// e = {8, 10}; error
	out.print(a.length); // 인덱스의 길이 3
%>
	<br>
<%	
	int[] arr = {2,5,7,10}; // length 4
%>
	<div>
		<%=arr[0]%>
		<%=arr[1]%>
		<%=arr[2]%>
		<%=arr[3]%>
	</div>
<%
	// for문 읽기 쓰기 가능 (배열을 직접적으로 변경 -> 보안에 취약)
	for(int i=0; i<arr.length; i+=1) { 
    // 배열의 길이가 변경될 수 있기 때문에 상수를 쓰기보다 변수를 이용한다
%>
		<%=arr[i]%>
<%
	}
%>
	<br>
<%
	// foreach문 읽기만 가능 (배열을 바꿀 수 없다)
	for(int n : arr) {
%>
		<%=n%> <!-- n이 변경되고 배열의 값은 그대로 -->
<%	
	}
%>
	<br>
<%
	// for문 읽기 쓰기 가능 (배열을 직접적으로 변경 -> 보안에 취약)
	for(int i=0; i<arr.length; i+=1) {
		arr[i] = arr[i]*10;
	}
%>

✅swap과 로또만들기

  • Swap
<%
	int x = 1;
	int y = 2;
	int temp = 0;
	
	temp = y; 
	y = x;
	x = temp;
%>
  • 로또만들기
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	// 1. 45개의 공을 만든다
	int[] ball = new int[45]; // 초기화 0, 0, ... , 0
	// 1~45 값을 대입
	for(int i=0; i<ball.length; i+=1) {
		ball[i] = i+1;
	}
	// 디버깅 코드(변수의 값이 원하는대로 제대로 들어갔는지 확인하는 코드)
	for(int n : ball) {
		System.out.print(n+","); // println -> 줄바꿈 포함
	}
	System.out.println(); // 콘솔줄바꿈
	
	// 2. 공을 섞는다
	// shuffle
	for(int i=0; i<100000; i+=1) {
		int targetIdx = (int)(Math.random() * 45); // 0~44까지 랜덤숫자
		int temp = ball[0];
		ball[0] = ball[targetIdx];
		ball[targetIdx] = temp; // swap을 10만번 반복
	}
	
	// 디버깅 코드(변수의 값이 원하는대로 제대로 들어갔는지 확인하는 코드)
		for(int n : ball) {
			System.out.print(n+","); // println -> 줄바꿈 포함
		}
	
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Lotto</title>
</head>
<body>
	<h1>로또번호</h1>
	<%
		// 3. 6개의 공을 뽑는다
		for(int i=0; i<6; i+=1) {
	%>
			<%=ball[i]%>&nbsp;
	<%
		}
	%>
</body>
</html>

✅리스트 만들기

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "good.Member" %>
<%@ page import = "java.util.Calendar" %>
<%
	// 데이터 초기화

	Member[] list = new Member[2]; // null, null로 초기화
	list[0] = new Member(); 
	list[0].name = "루피";
	list[0].birthYear = 2005;
	list[0].gender = "여";
	list[0].major = false;
    
    list[1] = new Member(); 
	list[1].name = "뽀로로";
	list[1].birthYear = 2006;
	list[1].gender = "남";
	list[1].major = true;
 %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>memberList.jsp</title>
<style>
	table, th, td {
		border: 1px solid #404040; 
		border-collapse: collapse;
		text-align: center;
		}
	table {width: 40%;}
	th {background-color: #D5D5D5;}
	
</style>
</head>
<body>
	<h1>학생목록</h1>
	<div>전체 <%=list.length%></div>
	<table>
		<tr>
			<th>이름</th>
			<th>나이</th>
			<th>성별<br>(아이콘)</th>
			<th>전공유무<br>(전공/비전공)</th>
		</tr>
		<%
			// 현재년도
			Calendar today = Calendar.getInstance(); 
			int todayYear = today.get(Calendar.YEAR);
			
			// 학생목록 출력
			for(Member m : list) {
		%>
				<tr>
					<td><%=m.name%></td>
					<td><%=todayYear - m.birthYear +1%></td> <!-- 한국나이 = 현재년도-태어난년도+1 -->
					<td>
					<%
						if(m.gender.equals("남")) {
					%>
						&#128104; <!-- 남자 아이콘 -->
					<%
						} else {
					%>
						&#128105; <!-- 여자 아이콘 -->
					<%
						}
					%>
					</td>
					<td>
					<%
						if(m.major==false) {
					%>
						비전공
					<%
						} else {
					%>
						전공
					<%
						}
					%>
					</td>
				</tr>
		<%		
			}
		%>
	</table>
</body>
</html>

💪 느낀점

  • 복습의 중요성!
    리스트 만들기 중에서 나이는 현재시간 기준으로 계산해야 하므로 calendar클래스를 사용해야 한다.
  • 배열과 for문이 함께 나오면 코드 한줄 한줄 더 집중해서 보자
  • 어제보다는 HTML과 Java가 번갈아서 나오는 것에 익숙해졌다. "어려운 것이 아니라 익숙치 않은 것일 뿐"이라는 말을 기억하자!
profile
개발자로 가는 길 🏃‍♀️

0개의 댓글