웹 어플리케이션


1. 웹 어플리케이션은 웹 브라우저(웹 클라이언트)의 요청에 대하여 서버에서 처리해서 결과를 보여주는 프로그램


웹 클라이언트              -       웹 서버




브라우저                           톰캣

웹주소 요청                        웹서버 응답

http://www.naver.com        네이버 컴퓨터 응답

사용자                               개발자



HTML, CSS, Javascript

브라우저에서 실행가능              원본은 웹서버에 저장된 상태


                                             JSP&Servlet

결과 페이지만 확인                   웹서버에서 실행 가능




웹 어플리케이션 실행 순서


1단계. 웹 클라이언트(웹 브라우저)에서 주소 요청 - 사용자

2단계. 웹서버(톰캣) 응답 준비 - 서버

3단계. 응답은 요청에 따라서 다르다. -서버

HTML, CSS, Javascript 요청한 경우 원본을 그대로 클라이언트에게 전달.

JSP&Servlet 요청한 경우 JVM을 이용해서 실행 및 결과(HTML Document)를 내고, HTML Document를 클라이언트에게 전달.

4단계. 전달받은 HTML Document 를 브라우저에서 실행 및 결과(웹 페이지) 출력. - 사용자





웹 어플리케이션 개발 언어


1. 웹 클라이언트 언어 - HTML, CSS, Javascript, XML, Ajax, jQuery

2. 웹 서버 언어 - JSP&Servlet(Java), ASP, PHP, ASP.NET(C#)





웹 서버 구축


1. http://www.apache.org에서 아파치톰캣 프로그램 다운로드.

- apache-tomcat-6.0.36.zip

2. 압축 해제

3. 이클립스에서 프로젝트 생성시 Dynamic Web Project 선택.

4. 최초 웹 프로젝트 생성시에서는 런타임 지정 필요. -> 아파치 톰캣 지정

5. Servers 탭에서 아파치 톰캣 등록

6. 웹프로젝트를 톰캣 서버에 등록.

7. 테스트 페이지 작성 및 실행.

-> 이클립스에서 실행시 외부 브라우저 선택 필요.

-> 방화벽 차단 해제 필요

-> 이클립에서 톰캣 실행시 서버 포트(8080 -> 8090) 변경 필요. (오라클서비스와 충돌 방지)

-> 브라우저가 익스플로어인 경우 인트라넷 설정 필요.


실행시 브라우저에 주소를 아래와 같이 입력할 것.

http://localhost:8090/HTML20121106/Sample01.html

-> localhost:8090 -> ip주소:포트번호/이하주소 입력시 다른 컴퓨터에 접속가능.





HTML(HyperText Markup Language)


<태그>

<태그 />

<시작태그>콘텐츠</끝태그>


<html>...</html>

<head>...</head>

<body>...</body>


기본 HTML 페이지 형식

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title></title>

</head>

<body>


</body>

</html>


3. XHTML 1.0, HTML 4.01 버전이 존재. HTML5(웹표준)는 가장 최근 버전.


4. 태그의 종류

- 인라인 요소: 콘텐츠가 라인단위로 표현됨. <span>, <a>, <img>, ....

- 블럭 요소: 콘텐츠가 블럭단위로 표현됨. <div>, <p>, <table>, ....


5. 규칙

- <body> 태그에서 제일 먼저 만나는 태그는 블럭 요소여야 함.


- 태그는 중첩해서 사용할 수 있으나, 중첩 표시가 정확해야 한다.

올바른 중첩형태

<부모태그>

<자식태그> 컨텐츠 </자식태그>

</부모태그>


틀린 중첩형태

<부모태그>

<자식태그> 컨텐츠 </부모태그>

</자식태그>


- 블럭요소 안에는 블럭요소가 올수 있지만, 인라인 요소 안에는 블럭요소가 올수 없다.

올바른 형태

<div>  <div>컨텐츠</div>  </div>


틀린 형태

<span>  <div>컨텐츠</div>  </span>


-일부 태그는 자식 태그를 한정적으로 허용함. 예를 들어 <ol>태그는 자식태그로 <li>만 허용.

<ol>

<li>컨텐츠1</li>

<li>컨텐츠2</li>

</ol>





웹표준 검사 (ACID)


1. 브라우저가 웹 콘텐츠를 얼마나 정확하게 표현할 수 있는지 검사해주는 페이지. 

-> 검사 항목은 HTML, CSS, Javascript에 대한 종합 검사

-> 페이지가 정상적으로 보이고, 점수가 높을수록 좋은 상태.

-> 검사 대상 브라우저에서 아래 사이트 연결

http://acid2.acidtests.org

http://acid3.acidtests.org


2. 크롬 브라우저 권장.





텍스트 표현 태그


1. 내용 지정

<h> : 제목 지정. h1 ~ h6. 블럭요소

<p> : 문단 지정. 블럭요소


2. 모양 지정 - CSS (Cascade Style Sheet)을 이용

 - 태그별로 style 속성을 추가한 후 CSS 속성 지정하는 방법과 <style> 태그를 이용해서 통합 지정하는 방법이 있다.

 - body가 아닌 head 영역에 작성


<style>

식별자 {속성이름:값;.....}

</style>


3. 엔티티 - 특수문자 표기


< : &lt;

> : &gt;

공백 : &nbsp;





이미지 표현 태그


1. <img> 태그 이용. 인라인 요소.

<img src = "그림주소" alt="대체문자">


그림주소가 로컬인 경우 그림이름만 쓰면 되지만, 원격인 경우는 웹주소형태로 표기






텍스트 이미지 표현 샘플.


//Sample05.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>


<style type="text/css">

h1 /* HTML Document에서 모든 h1 태그에 대해서 CSS 속성 적용 */

{

font-size:18pt; /* 글자 크기 지정 속성 */

}

h2 

{

font-size:10pt;

color: grey;  /* 글자색 지정 속성 */

font-weight: normal; /* 글자 굵기 지정 속성 */

}

h3 

{

font-size:12pt;

font-weight: normal; /* 글자 굵기 지정 속성 */

}

p  /* HTML Document에서 모든 p 태그에 대해서 CSS 속성 적용 */ 

{

line-height: 180%; /* 줄간격 지정 속성 */

}

</style>


</head>

<body>

<div>


<h1>애플, 특허전쟁서 구글에 한 방 먹었다</h1>

<h2><img src="http://imgnews.naver.net/image/news/2009/press/top_031.gif" alt="">| 기사입력 2012-11-06 10:03 | 최종수정 2012-11-06 10:24</h2>


<h3>&lt;아이뉴스24&gt;</h3>


<p>[김익현기자] 3G 표준특허권을 둘러싼 구글과의 대리전에서 애플이 패배했다.</p> 


<p>미국 위스콘신주 매디슨 지역법원은 5일(현지 시간) 표준 특허권을 둘러싼 애플과 모토로라 모빌리티간의 소송에서 애플의 요구를 기각했다고 주요 외신들이 보도했다.</p> 


<p>이번 소송은 5일 오후 1시(미국 중부 시간 기준) 열릴 예정이었다. 하지만 담당 판사가 소송 시작 직전에 기각하면서 사실상 애플이 패소한 셈이 됐다.</p> 


<p>애플로선 "아이폰 한 대당 1달러 이상 줄 수 없다"는 과한 요구를 한 것이 결정적인 패인으로 꼽히고 있다.</p> 


<p><img src="http://imgnews.naver.net/image/031/2012/11/06/1346370139376_1_181848_59_20121106102402.jpg" alt=""></p>


<h4>◆애플 "아이폰 한 대당 1달러 이하" 요구가 결정타</h4> 


<p>이번 소송은 모토로라가 구글에 인수되기 전인 지난 해 5월 제기한 것. 모토로라는 소송 제기 3개월 뒤인 지난 해 8월 구글에 인수됐다.</p> 


<p>지리한 법정 공방을 해 오던 모토로라와 애플은 지난 주부터 막판 힘겨루기를 벌였다. 모토로라가 아이폰 가격의 2.25% 가량의 로열티를 요구한 반면 애플은 1달러 이상은 줄 수 없다고 맞선 것.</p>


<p>처음엔 애플 쪽에 다소 유리한 방향으로 진행됐다. 매디슨 지역법원이 프랜드 로열티 기준을 정한 뒤 양측이 협상하도록 하는 방안을 고려한 것.</p>


<p>이에 대해 모토로라가 지난 달 30일 법정에서 프랜드 로열티 기준을 정하는 것은 합당하지 않다고 맞섰다.</p>


<p>이런 상황에서 애플이 "아이폰 한 대당 1달러 이상은 줄 수 없다"고 나오면서 분위기가 확 달라지기 시작했다. 이번 사건을 담당하고 있는 브바라 크랩 판사가 애플의 주장에 대해 상당히 부정적으로 받아들인 때문이다.</p>


<p>특허 전문가인 플로리언 뮐러에 따르면 크랩 판사는 그 때부터 프랜드 관련 재판을 하는 게 무의미하다는 쪽으로 입장 선회하기 시작했다.</p> 


<p>구글 측은 "모토로라는 그 동안 표준 특허에 대해 합당한 조건으로 라이선싱해 왔다"면서 "(애플의) 이번 소송을 편견으로 가득차 있다면서 기각한 데 대해 매우 기쁘게 생각한다"고 밝혔다.</p> 


<h4>◆FTC 반독점 조사 등 변수 많아</h4> 


<p>물론 이번 결정으로 모토로라와 애플 간의 표준 특허 공방이 완전히 마무리된 것은 아니다. 애플은 매디슨 지역법원 결정에 대해 항소할 수도 있다. 그럴 경우 항소법원에서 또 다시 공방을 벌일 가능성이 많다.</p>


<p>미국 연방무역위원회(FTC)도 이번 공방의 또 다른 변수다. FTC 측이 구글의 표준 특허 관행에 대해 조사를 진행하고 있기 때문이다. 지난 주 FTC 한 위원은 표준 특허 남용을 이유로 구글을 제재하는 방안을 검토하고 있다고 밝히기도 했다.</p>


<p>그럼에도 불구하고 애플 입장에선 매디슨 법원에서 기각당한 것이 적잖은 타격이 될 전망이다. 표준 특허권의 가치를 지나치게 무시함으로써 담당 판사로부터 "편견으로 가득 차 있다"는 평가를 받았기 때문이다.</p>


<p>특허 전문가인 플로리언 뮐러 역시 "애플이 이번 재판을 통해 필수표준 특허 라이선싱을 했어야 한다"면서 "애플이 기회를 놓쳤다"고 평가했다.</p> 


<h4>/김익현기자 sini@inews24.com</h4>


</div>  

</body>

</html>





목록 표현 샘플


http://www.google.co.kr/intl/ko/policies/privacy/principles/

->구글의 개인 정보 보호 원칙 페이지 작성



1.

<ol> - 순서 있는 목록 표현시 사용.

<ul> - 순서 없는 목록 표현시 사용.

<li> - <ol>, <ul>의 자식 태그로써 항목 표현시 사용.



//Sample06.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

<style type = "text/css">

body

{

color: #444444;   /* RGB 컬러 #000000 ~ #FFFFFF */

font-size:10pt;

line-height: 150%

}

.title01 /* title01 클래스명이 적용된 모든 태그에 css속성 적용 */

{

font-weight: bold;

}

li

{

margin-top: 40px;     /* 블럭 요소에서 바깥쪽 여백 지정 속성 */

padding: 2px;  /* 블럭 요소에서 안쪽 여백 지정 속성 */

}

</style>

</head>

<body>

<div>


<h1>개인정보 보호원칙</h1>


<p>Google은 종종 기존 기술의 한계를 뛰어넘는 아이디어와 제품을 추구합니다. Google은 책임감 있게 행동하는

기업으로서 혁신과 Google 사용자에 대한 적절한 수준의 개인정보 보호 및 보안이 균형을 이룰 수 있도록 노력합니다.

Google의 개인정보 보호원칙은 회사의 각 단계에서 결정을 내릴 때 올바른 기준을 제시하므로, 전 세계의 정보를 체계화하는

임무를 이행하는 동시에 Google 사용자를 보호하고 경쟁력 강화에 도움을 줄 수 있습니다.</p>


<ol>

<li>

<p class = "title01">정보를 활용하여 사용자에게 유용한 제품과 서비스를 제공합니다.</p>

<p>‘최상의 사용자 경험 제공’은 <a href="http://www.google.co.kr/intl/ko/about/company/tenthings.html">Google 경영철학</a>의 첫 번째 신조입니다. 사용자가 Google과 정보를

공유하면 Google은 이 정보를 활용하여 사용자에게 유용한 서비스와 제품을 구축할 수 있습니다. Google은

사용자에게 초점을 맞추면 혁신을 이끌고 온라인 사용자의 충성도를 확보하는 제품 및 개인정보 보호 강화 기능이 모두 발전할

것으로 믿고 있습니다.</p>

<p>Google은 사용자가 검색을 수행할 때 범하는 오타나 맞춤법 오류를 통해 정보를 습득하여 사용자에게 보다

빠르고 정확한 검색결과를 제공하는데 활용합니다. 따라서 사용자가 [우채국]이라고 입력하는 경우 [우체국]을 입력하려고 한

것으로 추측할 수 있습니다.</p>

</li>

<li>

<p class = "title01">강력한 개인정보 보호 기준과 관행을 반영하는 제품을 개발합니다.</p>

<p>기술의 최첨단을 추구하는 Google은 사용자 경험의 질을 떨어뜨리지 않으면서 사용자가 간편하게 개인정보를

관리하도록 해주는 도구를 개발하기 위해 노력하고 있습니다. Google은 개인정보 보호법을 준수하며 또한 내부적으로

그리고 규제당국 및 업계 파트너와 협력하여 강력한 개인정보 보호 기준을 개발하고 구현합니다.</p>

<p>Google에서는 서로 다른 사용자와 서로 다른 정보를 쉽게 공유할 수 있도록 서클을 염두에 두고

Google+를 설계했습니다. 따라서 사용자는 현실 세계에서와 마찬가지로 친구들을 위한 서클, 가족을 위한 서클, 그리고

직장 상사만 따로 분리시켜 놓은 서클을 만들 수 있습니다.</p>

</li>

<li>

<p class = "title01">개인정보 수집을 투명하게 관리합니다.</p>

<p>Google은 Google 서비스를 맞춤설정하는 데 사용되는 정보를 사용자에게 보여드리기 위해 노력합니다.

필요한 경우 Google이 보유하고 있는 개별 사용자 정보, 서비스 제공을 위해 정보를 활용하는 방식을 투명하게 공개하는

것을 목표로 삼고 있습니다.</p>

<p>Google 대시보드를 사용하면 ‘Google이 나에 대해 무엇을 알고 있나요?’라는 질문에 대한 대답을 찾을

수 있습니다. Google 대시보드에서는 최근 Blogger 게시물 또는 업로드한 사진 등 Google 계정에 저장된 내

정보를 볼 수 있으며 여러 제품에 대한 개인정보 보호 설정을 한 곳에서 변경할 수 있습니다.</p>

</li>

<li>

<p class = "title01">개인정보 보호와 관련하여 사용자의 의사를 표시할 수 있도록 선택권을 드립니다.</p>

<p>사용자는 각각 개인정보 보호와 관련된 관심사와 요구가 다릅니다. 모든 Google 사용자에게 최상의 서비스를

제공하기 위해 Google은 개인정보 사용에 대해 사용자의 의사를 표시할 수 있도록 의미 있고 세분화된 선택권을

제공하고자 합니다. Google은 개인정보를 독점해서는 안 된다고 생각합니다. 사용자가 다른 서비스로 개인정보를 이전할

수 있는 제품을 만듭니다. Google은 사용자의 개인정보를 판매하지 않습니다.</p>

<p>사용자는 Google의 개인정보 보호 도구를 사용하여 자신의 컴퓨터와 Google 사이의 검색 트래픽을

암호화하고, 비공개로 인터넷을 탐색하고, 검색 기록을 삭제하고, Google의 데이터 백업 도구를 사용해 자신의 데이터를

Google 제품 밖으로 쉽게 옮길 수 있으며 이 외에도 다양한 작업을 수행할 수 있습니다.</p>

</li>

<li>

<p class = "title01">보유한 정보를 책임감 있게 관리합니다.</p>

<p>Google은 사용자가 Google에 위임한 데이터 보호에 대한 책임을 잘 알고 있습니다. Google은 보안

문제를 철저하게 관리하며 더욱 안전한 인터넷을 만들 수 있도록 광범위한 사용자와 개발자 및 외부 보안 전문가 커뮤니티와

협력합니다.</p>

<p>Google은 처음부터 보안 및 복원력을 염두에 두고 Google 제품을 설계합니다. Google의 자동화된

스캐너가 매일 수백만 명의 사용자를 악성코드, 피싱, 사기 및 스팸으로부터 보호하기 위해 데이터를 사용합니다.</p>

</li>

</ol>

</div>

</body>

</html>







하이퍼링크 태그


1. 텍스트나 이미를 마우스 클릭시 다른 웹페이지로 이동시켜주는 기능. 인라인 요소

2. <a href = "다른 웹페이지 주소">컨텐츠</a>



//Sample07.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>Insert title here</title>

<style type="text/css">

a

{

text-decoration: none; /* 글자 장식 속성 */

}

a:hover /* 특정 객체 위에 마우스커서가 올려진 상태인 경우 */

{

text-decoration: underline; /* 글자 장식 속성 */

}

#title01    /* 아이디 속성이 지정된 객체*/

{

font-size:24pt;

color:grey;

margin: 10px;

margin-left: 20px;

}

#title02

{

padding: 14px;

margin-top: 10px;

margin-bottom: 10px;

background-color: #416bb5;

color:white;

font-weight: bold;

}

#title02 a /* 부모 식별자 안에 있는 하위 식별자만 영향받는 경우 */

{

color:white;

font-weight:normal;

}

</style>

</head>

<body>

<div>

<div>

<img src="http://www.google.com/images/logos/google_logo_41.png" alt="">

<span id="title01">정책 및 원칙</span>

</div>

<div id="title02">

<a href="http://www.google.co.kr/intl/ko/policies/">개요</a>

개인정보보호

<a href="http://www.google.co.kr/intl/ko/policies/terms/">서비스 약관</a>

</div>

<div>

<a href="http://www.google.co.kr/intl/ko/policies/privacy/">개인정보취급방침</a>

<a href="http://www.google.co.kr/intl/ko/policies/privacy/ads/">광고</a>

원칙

<a href="http://www.google.co.kr/intl/ko/policies/privacy/tools/">도구</a>

<a href="http://www.google.co.kr/intl/ko/policies/privacy/faq/">FAQ</a>

</div>


</div>

</body>

</html>


WRITTEN BY
빨강꼬마

,
10일차의 가장 중요한 포인트

- 사용자 정의 클래스 자료형 만들기 및 클래스 자료형 선언 방법
- 선언한 클래스 자료형을 이용하여 여러 객체 생성
- 클래스 자료형으로 배열 만드는 이유
- 유저가 자료를 임의로 입력할때 setter 를 이용하여 클래스 자료형 배열에 객체를 저장.
- 클래스 자료형 배열 내에 getter를 이용하여 객체n번째에 저장된 자료를 출력


클래스, 객체, 인스턴스

1. 클래스의 객체에 원본 정의서.

2. 객체(instance)는 클래스가 실행되서 메모리에 적재된 상태를 말함.
클래스(원본) -> 객체1 -> 독립적인 상태 유지 -> 소멸 -> 가비지 컬렉터
                  -> 객체2 -> 독립적인 상태 유지 -> 소멸 -> 가비지 컬렉터
                  -> 객체3 -> 독립적인 상태 유지 -> 소멸 -> 가비지 컬렉터

클래스명 변수명 = new 클래스명();



문제) 거스름돈을 화폐단위로 구분해서 출력.
실행예)
금액(10~1000)? 990
총액 : 990원
오백원 1개, 백원 4개, 오십원 1개, 십원 4개




문제) 2자리 이상의 수를 입력 받아서 자릿수들의 합을 계산해서 출력. 클래스 이용.
실행 예)
숫자 입력(2자리 이상)?1234
1000자리의 수 -> 1
100자리의 수 -> 2
10자리의 수 -> 3
1자리의 수 -> 4
자릿수의 합 : 10

1234 -> 문자열 길이를 얻는다 -> 4

2 -> (10)2-1승 -> 10
3 -> (10)3-1승 -> 100
4 -> (10)4-1승 -> 1000
...
n -> (10)n-1승 -> 100000....  -> a

1234 -> (1234%10000)/1000 -> 1234/1000   -> 1
1234 -> (1234%1000)/100 -> 2
1234 -> ((1234%1000)%100)/10 -> 3
1234 -> (((1234%1000)%100)%10)/1 -> 4






문제) 2자리 이상의 수를 입력 받아서 자릿수들의 합을 계산해서 출력. 클래스 이용.
문자열을 한 글자씩 분리하는 방법으로 해결 
실행 예)
숫자 입력(2자리 이상)?1234
1000자리의 수 -> 1
100자리의 수 -> 2
10자리의 수 -> 3
1자리의 수 -> 4
자릿수의 합 : 10






문제) 세 개의 숫자 중에서 가장 큰 숫자 구하기. 사용자 정의 클래스 이용. sort() 메소드 금지
실행 예)
숫자1? X
숫자2? Y
숫자3? Z
입력 받은 숫자: X, Y, Z가장 큰 숫자: X






문제) 여러 개의 숫자 중에서 가장 큰 숫자 구하기. 배열 및 사용자 정의 클래스 이용. sort() 메소드 금지
실행 예)
입력할 숫자의 갯수 지정(2~10)?
숫자1? X
숫자2? Y
숫자3? Z
...
입력 받은 숫자: X, Y, Z, .....
가장 큰 숫자: X





접근 지정자


1. public, private, protected, default(표시하지 않는 상태)

2. 외부에서 해당 멤버를 접근할 수 있는 기준제시.

package 패키지명;
접근지정자 class 클래스명 {

접근지정자 자료형 멤버변수;
접근지정자 자료형 메소드명(매개변수 리스트) {
자료형 지역변수; //접근지정자 사용 불가.
//실행문
}

자료형 멤버변수;
접근지정자 자료형 메소드명(매개변수 리스트) {
자료형 지역변수; //접근지정자 사용 불가.
//실행문
}
}


3. 멤버변수는 private, 클래스나 메소드는 public을 주로 사용.

4.
public 지정시 -> 어떤 위치에서든지 접근 가능.
private 지정시 -> 해당 영역 안에서만 접근 가능.
protected 지정시 -> 상속 관계가 있는 클래스에서만 접근 가능.
default 지정시(아무것도 안썼을때) -> 같은 패키지 내에서만 접근 가능.

Class08_02 -> [각주:1] (같은 패키지에 소속되어 있는 상태)
Class08_3 -> [각주:2] (다른 패키지에 소속되어 있는 상태)
Class08_4 -> [각주:3] (다른 패키지에 소속되어 있는 상태)





getter, setter

1. 메소드중에서 private 멤버변수를 위한 접근용 메소드.






이클립스 기능을 이용한 getter, setter 메소드 자동 완성





중요 예제 (클래스 자료형 선언, 객체 생성, 출력등)

이름과 전화번호를 저장할 수 있는 자료형 만들기
실행 예)
회원 수(1~10)?3
이름 전화번호(1)? hong 111-1111
이름 전화번호(2)? kim 222-2222
이름 전화번호(3)? park 333-3333
----------------
전체 회원수: 3명
----------------
이름    전화번호
hong    111-1111
kim     222-2222
park    333-3333
----------------

//Member.java (사용자 정의 클래스)

package com.test;

public class Member {

private String name, tel;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
}


//Class11.java (main() 메소드 포함 클래스)


package com.test;

import java.util.*;

public class Class11 {
public static void main(String[] args) {

//입력
Scanner sc = new Scanner(System.in);
System.out.print("회원수 입력(1~10)?");
String num = sc.next();
int count = Integer.parseInt(num);

//이름및 전화번호 자료형 클래스 활성화 및 저장용 배열 생성
                //아래에서 사용된 Member는 사용자 정의 클래스 자료형(참조형)을 의미한다.
                //배열의 자료형 선언은 String, int, 참조형등 여러 자료형 선언이 가능하고,
                //
배열 자체가 for문등 사용자 임의의 수를 기반으로 데이터를 운용하기에 
                //매우 적합하기 때문에 이 예제에서 클래스 자료형 배열을 생성한 것이다.

Member[] members = new Member[count]; // 사용자 정의 클래스 자료형인 배열을 생성

//처리

for (int a=0; a<members.length; a++) {
System.out.printf("이름:전화번호(%d)?", (a+1));
String name = sc.next(); //이름
String tel = sc.next(); //전화번호

Member member = new Member();   // member 객체 생성 과정
member.setName(name);                //member 객체에 이름 저장(바로 윗줄에서 생성한 객체이름)
member.setTel(tel);                       //member 객체에 전화번호 저장
members[a] = member;                 //member 객체를 배열에 저장하는 과정

}

//출력

System.out.println("----------------");
System.out.printf("전체 회원수: %d명%n", count);
System.out.println("----------------");
System.out.println("이름   전화번호");
for (int a=0; a<members.length; a++) {

//members[a]는  Member 객체를 리턴할 뿐이다.
//name, tel 접근을 하려면  Member 객체에서 gerName(), gerTel()을 이용해야 한다.
// System.out.printf("%s %s %n", members[a]); 일케하면 members[a]는 자동으로 이름과 전화번호를 뿌려주지 않는다.


//캐스트 연산자 Member 유의. 추후 캐스트 연산자를 이런식으로 사용할 수 있는 케이스가 있다.
//현재 예제에서는 캐스트 연산자를 사용하지 않아도 된다.


//members[a] 에는 name 과 tel 이라는 두 저장공간이 있다.
//
출력단에서 출력할때에 members[a]라고만 기재할 경우 출력되지 않으며,
//(배열명).사용자정의클래스내메소드명()     형식으로 기재해야한다.
//
즉, (members[a]).getName()

    System.out.printf("%s    %s %n", ((Member)members[a]).getName(), ((Member)members[a]).getTel()); 
}

System.out.println("----------------");

}

}

  1. public void method1() { System.out.println("Class08_2 > method1() 호출");} void method2() { System.out.println("Class08_2 > method2() 호출");} private void method3() { System.out.println("Class08_2 > method3() 호출");} [본문으로]
  2. public void method1() { System.out.println("Class08_3 > method1() 호출");} void method2() { System.out.println("Class08_3 > method2() 호출");} private void method3() { System.out.println("Class08_3 > method3() 호출");} [본문으로]
  3. public void method1() { System.out.println("Class08_4 > method1() 호출");} void method2() { System.out.println("Class08_4 > method2() 호출");} private void method3() { System.out.println("Class08_4 > method3() 호출");} public void method4() { method3();} } [본문으로]

WRITTEN BY
빨강꼬마

,