회원관리클래스(설계도면!) >>>>통해서>>>> 새로운 객체 생성 > 새 주소 생성 > 데이타/메소드 영역 생김 > (id 영역에 id001값)데이터 세팅할 수 있다. -끝-
다시 주소를 찾아가 >> id 값 꺼내온다 .(getting)
package kr.or.ksmart.A;
public class User {
//*전역변수 (global variable) = 필드 (field) = 멤버 = 멤버필드
// - 클래스 블록 안쪽 메서드 블록 바깥쪽에 선언되어있는 변수
//프로퍼티 (property)
//변수의 영역 기준 (블록기준)
// - 중괄호 밖에 선언된 변수는 안쪽에서 사용 가능
// - 중괄호 안에 선언된 변수는 밖에서 사용 불가
//User class에서 값을 세팅/게팅하는 개념X
String uid;
String upw;
String uphone;
char ugender;
int uage;
String ulevel;
}
package kr.or.ksmart.A;
public class AA01 {
public static void main(String[] args) {
User u01 = new User();
}
}
User class data type으로 u01객체참조변수를 선언하고 User생성자메서드로 새로운 객체를 생성하고 생성된 객체의 주소값을 u01객체참조변수에 할당한다.
package kr.or.ksmart.A;
public class AA01 {
public static void main(String[] args) {
User u01 = new User();
System.out.println(u01 + "<- u01");
System.out.println(u01.uid + "<- u01.uid");
//u01객체참조변수에 할당된 주소(User class를 통해 생성된 객체)에 찾아가서
//data 영역 uid 전역변수에 담겨있는 값 null을 꺼내와서 (getting) 콘솔창에 출력한다.
u01.uid ="id001";
//u01객체참조변수에 할당된 주소(User class를 통해 생성된 객체)에 찾아가서
//data 영역 uid 전역변수에 id001 값을 세팅(입력)한다.
System.out.println(u01.uid + "<- u01.uid");
//u01객체참조변수에 할당된 주소(User class를 통해 생성된 객체)에 찾아가서
//data 영역 uid 전역변수에 담겨있는 값 id001을 꺼내와서 (getting) 콘솔창에 출력한다.
}
}
1 - ② - ⑵하나의 패키지내서로다른 클래스에서 리턴 없고 입력 있는메서드 선언 및 호출
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Form Tag</title>
</head>
<body>
<!--
###############################################
<< form tag >>
데이터를 전송하기 위한 태그
form 태그의 속성에 method, action을 설정하여
전송방식 및 전송경로를 지정해야한다.
또한 form 태그의 자식 요소에 input, select, textarea 등
데이타 입력 태그를 두고 submit을 실행하면 데이타가 전송된다.
method 속성의 값은 post와 get으로 설정이 가능
- post : 데이터를 body에 숨겨 전송 →등록, 수정
- get : url로 전송 →검색 등
url에서 ?~~~ : url query
ex: ?sm=tab_hty.top&where=nexearch&query=Merge+Cells&oquery=Merge+Cells&tqi=UDmpLlprvxsssBYYx4VsssssteK-098759
== ?sm=tab_hty.top
&where=nexearch
&query=Merge+Cells
&oquery=Merge+Cells
&tqi=UDmpLlprvxsssBYYx4VsssssteK-098759
→ 키 = 값
(이어서&)키 = 값
(이어서&)키 = 값
- action : 전송될 경로를 입력
1. input - 텍스트 등록 및 수정 태그 (type 속성에 text, radio(단일 체크), checkbox(다중체크) 설정 가능)
1) input 속성
- type : input의 형태 지정
+text - 일반적인 텍스트 입력
+radio - 같은 name 값 중 1개만 선택
+checkbox - 같은 name 값 다중 선택
+date, number 등
- name : 서버에 전송될 key의 명칭
- value : 서버에 name의 key값으로 전송될 값
- placeholder : 안내글
2. select - 테이터 선택 태그
3. textarea - 장문의 텍스트 등록 태그
4. button - 이벤트 실행 및 submit
1) button 속성
- type : 이벤트 형태 지정
+button - javascript와 연동하여 이벤트 동작
+submit - 데이터 전송
###############################################
-->
<form action="./form2.jsp" method="get"> <!-- html에서는 데이터 받기가 안됨 -->
<label>
유저명 :
<input type="text" name="memberName" value="" placeholder="유저명 입력">
</label>
<button type="submit">전송</button>
</form>
</body>
</html>
<만들어진 폼>
<jsp 파일 만들기>
데이터를 주고받기 위해 jsp 파일을 만든다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//주석
/* 주석 */
//자바코드 기록
/***************************************************************
request 객체는 요청에 해당하는 정보를 담고있다.
request의 getParameter라는 메서드를 활용하여
데이터를 받을 수 있다.
getParameter의 메서드 인수값을 전송된 key의 명으로 넣어 해당 key의 값을 받을 수 있다.
***************************************************************/
request.setCharacterEncoding("UTF-8");
String memberName = request.getParameter("memberName"); //parameter > 문자열
out.println(memberName);
%>
<!-- html 작성 -->
-항상 블록 요소안에 포함되어 있음(항상 부모 객체는 블록 요소) -인라인 요소안에 인라인 요소 포함 가능 -높이설정 불가능 -CSS 속성 중 Line-height로 텍스트(줄) 높낮이를 조절 가능 -CSS 속성 중 text-align로 좌,우,중 정렬가능 -줄 바꿈이 자동으로 없음
인라인 요소 종류
a, abbr, acronym, b, bdo, big, br, button, cite, code, dfn, em, i, img, input, kbd, label, map, object, q, samp, small, script, select, span, strong, sub, sup, textarea, tt, var
<레이아웃 구성하기 실습>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>레이아웃 구성하기</title>
<style type="text/css">
/*
****************************************
레이아웃 구성시 주로 사용되는 css 속성
float : 블럭 요소의 객체를 정렬할 때 쓰는 속성
- 속성이 적용된 객체는 자동 가로 사이즈 100%가 해제된다.
clear : float으로 정렬된 속성을 해제할 때 쓰는 속성
margin : 선택된 객체의 외부 여백 (상 우 하 좌 / 상하 좌우 / 상하좌우)
padding : 선택된 객체의 내부 여백
width : 가로 사이즈
height : 세로 사이즈
min-width : 최소 가로 사이즈
max-width : 최대 가로 사이즈
min-height : 최소 세로 사이즈
max-height : 최대 세로 사이즈
****************************************
*/
a{color: #f00; text-decoration: none;}
a:hover{color: #00f;}
body{
background-color: #efefef;
background: url('./resource/img/logo.PNG');
background-repeat:no-repeat;
background-position: top center;
}
#container{width : 1100px; margin: 0 auto; min-height: 600px; clear:both;}
#left-wrap, #content-warp {float: left;}
#left-wrap{width: 250px; min-height: 700px;}
#left-wrap ul li{list-style : decimal;}
#content-wrap{width: 900px; margin: 0;}
#footer{clear: both; text-align: center; height: 100px; border-top: 1px solid #000;}
header{margin: auto auto; height: 100px;}
#logo{float: left; height: 50px; width: 20%; text-align: center; padding: 20px 0 }
#logo img{width: 100px;} /* 인라인 태그중 높이가 적용되는 태그. 세로 없이 가로만 지정하면 비율에 맞춰 크기 조절 */
#expt-logo{float: right; height: 100%; width: 80%;}
#top-link{height: 50%; text-align: right;}
#menu{}
#menu ul{float: right;}
#menu ul li{float: left; list-style: none; padding: 10px; }
#menu ul li a{padding: 0 15px;}
td{border: 1px solid #000;}
</style>
</head>
<body>
<header >
<div id="logo">
<img src="./resource/img/logo.PNG" alt="로고" >
</div>
<div id="expt-logo">
<div id="top-link">
<a href="./layout_css.html">home</a>
|
<a href="#">join</a>
|
<a href="#">login</a>
</div>
<nav id= "menu">
<ul>
<li> <a href="#">대메뉴1</a> </li>
<li> <a href="#">대메뉴2</a> </li>
<li> <a href="#">대메뉴3</a> </li>
<li> <a href="#">대메뉴4</a> </li>
<li> <a href="#">대메뉴5</a> </li>
</ul>
</nav>
</div>
</header>
<div id= "container" >
<div id= "left-wrap">
<ul>
<li> <a href="#">서브메뉴1</a> </li>
<li> <a href="#">서브메뉴2</a> </li>
<li> <a href="#">서브메뉴3</a> </li>
</ul>
</div>
<div id="content-wrap">
<!--
##############################################
< 병합하기 >
td의 속성을 지정하여 병합을 할 수 있다.
- colspan : 가로병합
- rowspan : 세로병합
##############################################
-->
<table>
<thead>
<tr>
<th>번호</th>
<th>카테고리</th>
<th>제목</th>
</tr>
</thead>
<tbody>
<tr>
<td>
5
</td>
<td rowspan="2" ><!-- 병합할 셀 개수 (나 자신을 포함) -->
국어
</td>
<td>
국어점수
</td>
</tr>
<tr>
<td>
5
</td>
<td>
국어점수2
</td>
</tr>
<tr>
<td>
5
</td>
<td colspan="2">
수학
</td>
</tr>
</tbody>
<tfoot>
</tfoot>
</table>
<!--
##########################################
실습1. 테이블을 아래
분류, 제목, 작성자, 작성일의 열을 가진
데이타를 10행을 생성하여 출력을 시키고
같은 분류의 내용은 병합시켜라.
##########################################
-->
<table>
<thead>
<tr>
<th>분류</th>
<th>제목</th>
<th>작성자</th>
<th>작성일</th>
</tr>
</thead>
<tbody>
<tr>
<td rowspan="2">문학</td>
<td>괭이씨미요</td>
<td>김모모</td>
<td>2020.02.26</td>
</tr>
<tr>
<td>쿠쿠</td>
<td>unis</td>
<td>1999.01.15</td>
</tr>
<tr>
<td rowspan="3">예술</td>
<td>미학오디세이1</td>
<td>진중권</td>
<td>2010.10.10</td>
</tr>
<tr>
<td>미학오디세이2</td>
<td>진중권</td>
<td>2011.11.11</td>
</tr>
<tr>
<td>미학오디세이3</td>
<td>진중권</td>
<td>2012.12.12</td>
</tr>
<tr>
<td rowspan="2">기술과학</td>
<td>ncs학습모듈</td>
<td>cns</td>
<td>2020.02.25</td>
</tr>
<tr>
<td>이기적 유전자</td>
<td>리처드 도킨슨</td>
<td>1976.5.5</td>
</tr>
<tr>
<td>철학</td>
<td>생각한다는 것</td>
<td>고병권</td>
<td>2010.12.23</td>
</tr>
<tr>
<td rowspan="2">언어</td>
<td>토익 RC</td>
<td>토익책팔이</td>
<td>2019.12.10</td>
</tr>
<tr>
<td>토익 LC</td>
<td>토익책팔이</td>
<td>2019.11.5</td>
</tr>
</tbody>
<tfoot>
</tfoot>
</table>
</div>
</div>
<footer id= "footer">
풋터 영역
</footer>
</body>
</html>
css를 외부 파일(resource)로 만들기
Wepcontent/resource/css 폴더 내에 common.css 파일 생성
html 파일에서 작성했던 <style>..</style> 내용을 생성한 common.css에 잘라넣기
<CSS>
@charset "UTF-8";
<style type="text/css">
/*
****************************************
레이아웃 구성시 주로 사용되는 css 속성
float : 블럭 요소의 객체를 정렬할 때 쓰는 속성
- 속성이 적용된 객체는 자동 가로 사이즈 100%가 해제된다.
clear : float으로 정렬된 속성을 해제할 때 쓰는 속성
margin : 선택된 객체의 외부 여백 (상 우 하 좌 / 상하 좌우 / 상하좌우)
padding : 선택된 객체의 내부 여백
width : 가로 사이즈
height : 세로 사이즈
min-width : 최소 가로 사이즈
max-width : 최대 가로 사이즈
min-height : 최소 세로 사이즈
max-height : 최대 세로 사이즈
****************************************
*/
div, span, li, td{
margin: 0; padding: 0; font-size: 14px; color: #2e2e2e;
}
a{color: #ff0000; text-decoration: none;}
a:hover{color: #0000ff;}
body{
background-color: #efefef;
background: url('./resource/img/logo.PNG');
background-repeat:no-repeat;
background-position: top center;
}
#container{width : 1100px; margin: 0 auto; min-height: 600px; clear:both;}
#left-wrap, #content-warp {float: left;}
#left-wrap{width: 250px; min-height: 700px;}
#left-wrap ul li{list-style : decimal;}
#content-wrap{width: 900px; margin: 0;}
#footer{clear: both; text-align: center; height: 100px; border-top: 1px solid #000;}
header{margin: auto auto; height: 100px;}
#logo{float: left; height: 50px; width: 20%; text-align: center; padding: 20px 0 }
#logo img{width: 100px;} /* 인라인 태그중 높이가 적용되는 태그. 세로 없이 가로만 지정하면 비율에 맞춰 크기 조절 */
#expt-logo{float: right; height: 100%; width: 80%;}
#top-link{height: 50%; text-align: right;}
#menu{}
#menu ul{float: right;}
#menu ul li{float: left; list-style: none; padding: 10px; }
#menu ul li a{padding: 0 15px;}
td{border: 1px solid #000;}
</style>
method 호출 원리는 변함이 없다 | Return data type 과 method 호출은 관련이 없다!
1 - ① - ⑶하나의 패키지 내 하나의 클래스에서 리턴 있고 입력 없는메서드 선언 및 호출
<<실행순서 서술하기>>
① a 메서드 호출 ② a 메서드 실행 "01 a 메서드 실행" 문자열을 콘솔창에 실행 ③ return 값 "1루타" 를 메서드 호출한 곳으로 리턴 ④ String data type으로 result 변수 선언 "1루타" 문자열을 result 변수에 대입 ⑤ result 변수에 담겨있는 "1루타" 문자열을 포함하여 콘솔창에 출력
리턴값은 하나인데 조건에 따라서 리턴값이 바뀔 수 있다.
현재는 리턴값 하나가 리턴된다. 여러개 리턴은 나중에 가능할 것!
1 - ① - ⑷ 하나의 패키지 내 하나의 클래스에서 리턴 있고 입력 있는 메서드 선언 및 호출
입력된 id와 dbid가 같고 입력된 pw와 dbpw가 같으므로 log 변수에 담긴 값은 1
② return 값 log 변수에 담겨있는 값 1을 메서드를 호출한 곳으로 리턴
③ int data type 으로 result 변수를 선언하고 정수 1을 result 변수에 대입
④ logre 메서드를 호출, 실행
result 변수에 담겨있는 값은 정수 1 > log 변수에 입력.
log 변수에 담긴 값이 1이라면 " 로그인 성공! 환영합니다. 입력된 atype, aname의 집사님" 문자열을 출력하고 atype이 강아지 문자열일 경우 log 변수에 담긴 값 1 고양이 문자열일 경우 log 변수에 담긴 값 2 강아지 또는 고양이 문자열이 아닐 경우 log 변수에 담긴 값 3
log 변수에 담긴 값이 2라면 "PW를 확인하세요." 문자열 출력 log 변수에 담긴 값이 3이라면 "등록되지 않은 ID 입니다." 문자열 출력
log 변수에 입력된 값이 1이고 atype에 입력된 값이 고슴도치 문자열이기 때문에 log 변수에 담겨있는 값은 정수 3
⑤ return 값 log 변수에 담겨있는 값 3을 메서드를 호출한 곳으로 리턴 int data type으로 result2를 선언하고 정수 3을 result2 변수에 대입한다.
⑥ typsort 메소드를 호출, 실행
result2 변수에 담겨있는 값은 정수 3 > log 변수에 입력.
log 변수에 담긴 값이 1이라면 강아지 나이 : aage 살 문자열 출력. 입력받은 aage의 나이가 1보다 작거나 같으면 log 변수에 담긴 값 11 2보다 크거나 같고 4보다 작거나 같으면 log 변수에 담긴 값 12 5보다 크거나 같고 10보다 작거나 같으면 log 변수에 담긴 값 13 그 외는 log 변수에 담긴 값 14
log 변수에 담긴 값이 2라면 고양이 나이 : aage 살 문자열 출력. 입력받은 aage의 나이가 1보다 작거나 같으면 log 변수에 담긴 값 21 2보다 크거나 같고 4보다 작거나 같으면 log 변수에 담긴 값 22 5보다 크거나 같고 10보다 작거나 같으면 log 변수에 담긴 값 23 그 외는 log 변수에 담긴 값 24
log 변수에 담긴 값이 3이라면 기타 동물 등록은 고객 센터에 문의 바랍니다. 문자열 출력
log 변수에 담긴 값이 3이기 때문에 기타 동물 등록은 고객 센터에 문의 바랍니다. 문자열을 출력한다.
package Dog.and.Cat;
public class Login {
public static void main(String[] args) {
int result = uInsert ("id002", "pw002");
logre (result, "윤깨물", "고슴도치");
typsort(result, 21);
agegroup (result);
}
public static void agegroup (int log) {..
public static int typsort(int log, int aage) {..
public static int logre (int log, String aname, String atype) {..
public static int uInsert (String id, String pw) {..
}
오류내용
문법상의 오류는 없었지만 의도와 다른 내용이 출력되었다.
고슴도치이기 때문에 이 내용이 출력되어야 한다.
오류 수정
메서드 호출부분에서 result 값을 계속 같은 result 값으로 받았기 때문에 발생한 오류였다! 새로운 변수 result2를 int data type 으로 지정해주고 result2 다음 메서드에서 새로운 result2의 값을 받았더니 원하는 내용이 출력되었다.
- 객체를 참조하는 형태 type - String class : 참조형에 속하지만 기본형처럼 사용. 불변객체. 기본형 비교는 == / String 객체간 비교는 .equals() 메소드 사용 - Wrapper class : 기본형을 클래스로 감싼 형태 기본형에 null을 넣고싶다면 래퍼클래스를 활용. ex 기본형 대응 래퍼 클래스 byte Byte short Short int Int long Long float Float double Double char Char boolean Boolean * 참고 : void 의 래퍼 클래스 Void 도 존재
* 인터페이스
interface MyInterface {
void add(T value);
}
인터페이스를 만드는 것은 새로운 참조 자료형을 만드는 것과 같다. 자료형이기 때문에 자신을 구현한 객체의 주소를 가질 수 있다. (인터페이스에 정의된 메소드만 사용 가능)
* 배열형
public class ArrayType {
public static void main(String[] args) {
int [] i = new int[2];
Long [] l = new Long[2];
Object[][] o = null;
}
}
기본형으로도 만들 수 있고 참조형으로도 만들 수 있다.
자료형에 대해 []를 선언함으로 배열을 지정. (배열형 변수 또안 배열의 주소를 가지고 있기 때문에 클래스형의 특징과 일치) 같은 객체의 주소를 바라보게 만들면 동일한 배열을 가리킨다.
4) method name : uInsert 5) 매개변수 data type / name - 첫번째 매개변수 data type:String *첫번째 매개변수 name : name - 두번째 매개변수 data type: int *두번째 매개변수 name : age - 세번째 매개변수 data type:char *세번째 매개변수 name : gender 로 메서드가 선언 되었다. *********메서드 호출 원리 (가장 중요!)********* 1) 메서드name 일치 2) 매개변수 개수와 입력 개수 일치 3) 매개변수 data type에 일치하는 값이 각각의 매개변수에 입력되어야 메서드가 호출
* 조건의 false/true를 확인하는 방법
method body 내에 조건식만 출력해보기
<<조건식>>
예제1-1) int/ if, else if
예제 1-2) int/if, else
예제 3) String/ if 안의 if, else
예제4) char/ if, else if, else
*Method Overloading
하나의 클래스에서 동일한 이름의 메서드를 입력받는 데이터의 개수와 data type을 다르게 프로그래밍 할 수 있는 방법.