웹 표준 & 웹 접근성목 차 TOC o "1-2" h z HYPERLINK l "_Toc263780766"1.웹표준이란? PAGEREF _Toc263780766 h 1HYPERLINK l "_Toc263780767"1.1웹표준은 무엇인가? PAGEREF _Toc263780767 h 1HYPERLINK l "_Toc263780768"2.웹접근성 PAGEREF _Toc263780768 h 2HYPERLINK l "_Toc263780769"2.1웹 접근성에 대한 W3C의 정의 PAGEREF _Toc263780769 h 2HYPERLINK l "_Toc263780770"2.2웹 접근성에 대한 한국정보문화진흥원(KADO)의 정의 PAGEREF _Toc263780770 h 3HYPERLINK l "_Toc263780771"2.3웹 접근성 지침사항 PAGEREF _Toc263780771 h 3HYPERLINK l "_Toc263780772"2.4HTML Guideline PAGEREF _Toc263780772 h 4웹표준이란?웹표준은 무엇인가?웹표준(Web Standards) – 웹에서 표준적으로 사용되는 기술의 총칭누가 웹표준을 정하는가?W3C(World Wide Consortium) – 다른 단체들도 있으며 관여는 하지만 가장 중심적인 역할 수행ISO(국제표준화기구) – 공업규격 국제표준화 단체: 언어코드, 유니코드, ISO-HTML 규정IETF – 인터넷기술 표준화 단체 : 통신프로토콜에 관여IANA - IP어드레스와 도메인명 등의 주소 자원 표준화와 분배를 담당OASIS - e비즈니스의 표준개발, SGML과 XML툴, 웹서비스 등의 표준화 담당인프라와 트렌드에서 생각하는 웹표준웹표준 경시와 브라우저 전쟁 – 화려한 요소에만 치우친 상태에서 웹브라우저의 경쟁 가속화웹표준의 거두 – 미국 Wired News 가 2002년 9월 XHTML + CSS 기반으로 재구축(웹표준 엄격히 준수)되면서 파일사이즈가 줄어들고 랜더링속도가 향상, 각종 업구분할 수 있도록 제공해당페이지를 잘 이해할 수 있도록 페이지 올바른 제목제공컨텐츠는 논리적인 순서로 구성되도록 제공온라인서식을 제공할 경우,레이블도 제공애플릿,플러그인(activex,플래시) 등 부가 애플리케이션 제공 시 해당 애플리케이션이 자체적인 접근성 준수하거나 대체 컨텐츠 선택하여 이용할 수 있도록 제공마크업 언어로 구현할 수 있는 기능을 자바스크립트로만 구현하지 말아야 한다.HTML GuidelineW3C의 표준 문법을 준수합니다.DTD(Document Type Definition)는 생략할 수 없으며 반드시 명시 합니다.(X)...(O)...DTD와 관계없이 모든 요소(Element)와 속성(Properties) 및 값(Value)은 영문 소문자로 마크업 합니다. 요소와 속성을 소문자로 처리하는 것은 XHTML 문서로의 확장을 용이하게 합니다. 속성의 값을 소문자로 처리하는 것은 대부분의 브라우저에서 Quirks Mode DTD일때 대소문자를 구분하지 않기 때문이며, 이러한 이유로 id/class의 속성 값을 소문자로 처리하는 것은 공통 지침입니다. (X) (O)작성이 완료된 순수 HTML 문서는 HYPERLINK "http://validator.w3.org/" t "_blank" o "새창"W3C HTML Validation 검사를 실시하고 Pass 될 때까지 디버깅 한 후 협업부서에 넘깁니다.개발이 완료된 문서는 다시 한번 HYPERLINK "http://validator.w3.org/" t "_blank" o "새창"W3C HTML Validation 검사를 실시하고 Pass 될 때까지 협업부서에 디버깅을 요청 합니다. 협업부서에서 처리되지 않은 디버깅 내역은 반드시 그 사유를 기록해 둡니다.HYPERLINK "http://html.nhndesign.com/html_guideline" l "section2"문서형(DTD)을 선언합니다.제시된 3 종류의 DTD 가운데 하나를 사용할 수 있으며 권장되는 순서는 아래와 같습니다. DTD별 , 과 같이 표기하여 시작태그에서 곧 종료됨을 표기해 주어야 합니다.a, applet, frame, iframe, img, map 요소의 name 속성은 폐기되었으며 다음 버전부터는 지원하지 않습니다.상기 마크업의 name 속성은 모두 id 속성으로 교체되어야 합니다. name 속성은 공식적으로 폐기하였지만 여전히 XHTML 1.0 Transitional 버전의 문서까지는 지원하고 있습니다. 하지만 XHTML 1.0 Strict 버전에서는 지원하지 않으며 다음 버전에서는 폐기됩니다.문자셋(charset)과 자연어를 명시합니다.권장하는 하는 인코딩은 'utf-8' 입니다. 하지만 반드시 협업부서와 협의과정을 거쳐야 합니다.utf-8 인코딩 사용이 불가한 것으로 판정되는 경우의 문자셋은 'euc-kr' 으로 지정합니다.현재 문서의 주된 자연어를 명시 합니다. 국가별 언어코드 표준 명세 : HYPERLINK "http://xml.coverpages.org/iso639a.html" t "_blank" o "새창"ENG , HYPERLINK "http://trio.co.kr/webrefer/others/langcode.html" t "_blank" o "새창"KORDTD가 HTML인 경우 한국어 영어 일본어 중국어DTD가 XHTML인 경우 한국어 영어 일본어 중국어문서 중간에 자연어가 바뀌는 경우에도 자연어를 명시 합니다. 자연어를 정확히 명시하게 되면 하나의 문자가 여러 국가에서 다르게 사용되는 경우에도 검색엔진이나 음성장치가 이것을 구분할 수 있습니다. 단, 문서 중간에 빈번하게 등장하는 자연어에 대한 언어코드 명시는 단지 권장하는 수준입니다....HYPERLINK "http://html.nhndesign.com/html_guideline" l "section4"의미에 맞는 태그로 마크업 합니다. 태그의 적합한 의미와 용도는 HYPERLINK "http://www.w3.org/TR/html401/index/elements.html" t "_blank"://html.nhndesign.com/html_guideline" l "section5"Table의 바른 사용법.Table 요소는 2차원의 격자형 데이터를 표현할 때 사용되며 예외적으로 dt, dd 형식으로 마크업 할 수 있는 데이터도 표현할 수 있습니다. Table 요소는 표를 설명하는 적절한 제목을 지녀야 하는데 h1~h6, caption, summary 중 한가지 요소 또는 속성을 반드시 사용하여야 합니다. 아래 예제를 통하여 올바른 사용법을 익힐 수 있습니다.caption :표의 제목 요소. table요소 바로 뒤에만 허용되며 한 번만 표시할 수 있습니다.summary :표의 요약 속성. table요소에 동반되는 속성으로서 표의 제목caption이 존재하지 않는 경우나 표에 요약설명이 필요한 경우 사용할 수 있습니다.thead, tbody, tfoot :표의 행tr을 그룹핑하는 요소로서 표의 머리글, 본문, 풋터를 지정합니다. tfoot요소의 경우 보통 이에 해당하는 데이터가 없어서 생략되는 경우가 많습니다.th :표의 머리글 셀을 지정합니다. 표의 머리글 셀은 scope, abbr 과 같은 속성을 동반합니다. scope 속성은 사용이 강력하게 권장되며 abbr 속성은 필요에 따라 사용할 수 있습니다.scope :th 요소에 동반되는 속성으로서 현재의 셀이 어느 셀의 제목인지 그 범위를 명시합니다. scope 속성의 값으로는 col, colgroup, row, rowgroup 이 있습니다.abbr :th 요소에 동반되는 속성으로서 포함하고 있는 콘텐츠에 대한 약식표기가 가능한 경우 약어를 표기하는데 사용합니다. th셀의 내용을 반복해서 음성으로 출력하는 도구들은 abbr 속성에 표기된 약어를 읽게 됩니다.자장면과 짬뽕의 가격과 열량 비교구분가격(won)열량(kcal)자장면3,000300짬뽕3,500350화면낭독기와 같은 보조공학기기는 현재의 표를 다음과 같이 읽어주어야 합니다.표 제목 : 자장면과 짬뽕의 가격과 열량 비교표 요약 : 짬뽕은 자장면보다us (△) 시각이 없는 사용자는 내용의 변화를 예측하거나 인식하지 못하므로 되도록 지양onclick (O) 시각이 없는 사용자도 내용의 변화를 예측할 수 있음앵커 의 참조 값으로 "#" 을 넣거나 Javascript 를 이용하여 URI를 연결하는 방법을 사용하지 않습니다. (X) href 속성이 참조하는 URI 값이 유효하지 않음 (X) href 속성이 참조하는 URI 값이 유효하지 않음 (O) 현재 페이지의 #help를 참조하는 유효한 방식 (O) href의 값이 유효하고 onclick은 동작만 제어 (O) help.html 페이지를 참조하는 유효한 방식 (O) href의 URI 값이 유효하고 onclick은 동작만을 제어하여 javascript 미지원 환경에서도 새창 띄우기를 지원input 요소는 label 요소 또는 title 속성을 이용하여 설명합니다. 스크린리더 사용자는 주변 맥락에 대한 이해 없이 각 요소에 독립적으로 접근해도 폼을 이해할 수 있게 됩니다.아이디 (X)아이디 (O)(X)유선전화(O)유선전화클릭 가능한 버튼의 최소 크기는 너비와 높이가 18px 이상이어야 합니다. 버튼 이미지의 너비와 높이가 18px 미만인 경우 CSS를 이용하여 클릭 가능한 영역을 확장합니다. 클릭 가능한 영역이 다른 UI와 겹치거나 인라인 형식으로 존재하는 경우에는 예외가 허용됩니다. 손의 사용능력이 원할하지 못한 사람과 모바일 브라우징 장치의 접근성을 향상시켜줍니다.HYPERLINK "http://html.nhndesign.com/html_guideline" l "section8"특수문자는 Entity 코드로 변환합니다.Entity 코드로 표현된 특수문자는 대부분의 브라우저에서 문제없이 출력됩니다. 대표적인 예로 꺽쇠기호 < > 등을 Entity로 처리하지 않는 경우 브라우저들은 이것을 HTML 태그의 시작이나 끝으로 인식할 수 있습니다. 따옴표 " "는 HTML 속성의 값이 시작되거나 끝난 것으로 인식할 수 있으며 & 기호는 Entity기호의 시작으로 가이드
절차지향과 객체지향절차지향 대 객체지향절차지향의 특징데이터를 변화시키는 알고리즘(함수) 데이터와 함수의 분리형태객체지향의 특징객체들의 집합 객체의 생성과 객체들간의 메시지 전달을 통해 정보전달 객체는 데이터와 메소드로 구성절차지향언어의 종류제 3세대 언어 Fortran,COBOL,C객체지향언어의 종류추상 데이터형 프로그램 언어의 시조라고 할 수 있는 시뮬레이션 언어 시뮬라, 스몰토크 80 등객체지향의 장점객체지향 모델은 실생활을 잘 반영 인간의 사고와 유사한 표현이 가능 모델링부터 구현까지 일관된 개념의 유지기능 개발 생산성 증대 및 유지 보수를 용이하게 한다 객체를 통한 재사용성 및 품질 향상 유지 보수시 부분적 교체가 가능: 전체 영향의 최소화객체지향의 장점(계속)복잡하고 다양한 정보의 표현 가능 추상화 데이터 타입을 통한 다양한 표현 능력 제공 멀티미디어(이미지, 소리, 동영상 등) 데이터와 기능의 통합 추상화로 복잡한 데이터 처리 용이 도면, 지적도 등Object-Oriented-ProgrammingOOP-상속진화 단순한 개체- 복잡한 개체 다양한 기능이 후손에게 상속됨OOP-다형성여러 개의 함수를 하나의 method(또는 함수)로 표현 오버로딩(Overloading)과 오버라이딩(Overriding)method : 데이터를 조작 처리하는 절차를 기술OOP-캡슐화Black Box 개념 객체의 내부 구조와 구현 내용에 대한 지식 불필요 오직 인터페이스(대화 창구와 방법)만으로 객체를 사용 예) CPU: 1과 10을 입력하고 더하기를 요구하면 11을 반환 장단점 객체의 이식성과 호환성 객체를 부품처럼 사용 정보 손상과 잘못된 사용 방지 유연성이 결여 (예, 감기약 콘택600)OOP-추상화예 사각형, 타원, 삼각형, 육각형 - 도형으로 추상화 반대로, 도형 - 사각형, 타원 등으로 구체화C++현재 가장 많이 사용되는 언어 중 하나 Java와 C#의 모체 탄생 C언어를 만든 Bell 연구소의 뱐 스트라우스트럽이 1980년 초에 개발 C + OOP 개념 OOP 개념은 Simula67에서 채용 특징 OO 개념의 고수준 추상화 제공 C언어의 저수준 H/W 접근 기능 제공C++ (계속)C++ 개발 도구 MS: Visual C++ 6.0, Visual C++.NET Borland: C-Builder, Kylix (Linux용) GNU: g++ Library MFC(MS), OWL(Borland) SDK(S/W Development Kit) Library와 개발 도구 예) DirectMediaJava탄생 1991년, SUN에서 제임스 고슬링과 아서 밴 호프의 Green 프로젝트팀 가전제품 제어 S/W용 언어로 개발 C/C++의 낮은 이식성 극복이 동기 고신뢰성도 중요한 설계 기준Java (계속)Java의 용도 일반 애플리케이션 J2SE(무료 배포) 개발도구 웹 애플리케이션 Java Applet와 Java Servlet(+ JSP와 EJB) 기업 환경의 인터넷 프로그램 J2EE(상용) 개발도구 휴대용 정보기기 애플리케이션 휴대폰이나 PDA용 J2ME(상용) 개발도구 가장 주목받는 차세대 핵심언어C#배경 90년대 중반, MS는 인터넷의 잠재성을 인식 못함 인터넷의 성장으로 웹브라우저, Java, JavaScript등 관련 기술 급성장 MS 뒤늦게, IE와 VBscript 개발 당시 핫이슈는 Java Java 임의로 변형해 IE에 탑재 MS, Visual J++ 개발 후 무료 배포 SUN, 법정 소송에서 승소 MS, Java 기술 사용 불가 Java 기반 분산 네트워크 기술 급부상 MS, 위기 타개를 위해 .NET 기술 발표C# (계속).NET 웹 애플리케이션 개발을 위한 모든 방법과 기술을 제공하는 MS의 차세대 플랫폼 JDK와 같은 library 제공 C# .NET을 가장 효율적으로 사용해 개발할 수 있는 언어로서 개발 Java와 매우 흡사 Java에 비해 활용도가 낮음{nameOfApplication=Show}
차 례-★웹프로그래밍의 종류와 특징★1 . HTML....2 . SGML....3 . XML......4 . Dynamic HTML........5 . CGI.......6 . JSP.......7 . ASP......8 . PHP......9 . Perl.......10. C#........11. JAVA.....1. HTMLHTML(Hyper Text Markup Language) : 하이퍼텍스트 생성 언어-Hyper Text는문자와 문자를 서로 관련지어서 찾아볼 수 있도록대한 표준이다. 이러한 규격 그 자체는 DTD (document type definition)이다. SGML은 문서 언어 그 자체에 들어있는 것은 아니며, 다만 어떻게 지정할 것인지에 대한 설명이다. 이것은 메타 언어이다.SGML은 문서들은 그 요소들이 어떻게 표현될 것인가에 관한 언급 없이 묘사될 수 있는 구조적이고 의미론적인 요소들을 가지고 있다는 사고에 기반을 두고 있다. 이러한 문서의 실제적인 표현은 출력매체나 스타일의 선호도에 따라 달라질 수 있다.-SGML에 기반을 두고 있는 문서들의 장점문서의 표현특성보다는 구조에 중점을 두고 만들어질 수 있다.SGML 컴파일러가 그 문서의 DTD 참조를 통해 어떠한 문서라도 해석할 수 있으므로, 이식성이 좋아진다.프린트매체를 위해 만들어진 문서들이 컴퓨터 화면 등의 같은 다른 매체에 쉽게 다시 제작될 수 있다.웹브라우저에서 사용하는 언어인 HTML도 실은 SGML에 기반을 두고 있는 언어이며, HTML을 위한 DTD가 따로 있다 (그리고 HTML 규격을 읽는 것은 실제로는 DTD의 확장판을 읽는 것이다). SGML은 어느 정도는 일찍이 IBM에서 개발된 일반화된 마크업 언어인 GML과 ISIL 등에 기반을 두고 있다.3. XMLXML (Extensible Markup Language)XML는 eXtensible Markup Language의 약자로 HTML(Hyper Text Markup Language)와 같이 Markup Language이다. 그러나 정확한 뜻은 마크업 언어가 아니라 '마크업 언어를 정의하기 위한 언어' 이다.즉, HTML과는 달리 Tag를 정의할 수 있고 데이터를 기술할 수 있다.XML은 1996년 W3C(World Wide Web Consortium)에서 제안한 것으로서, 웹 상에서 구조화된 문서를 전송 가능하도록 설계된 표준화된 텍스트 형식이다. 이는 인터넷에서 기존에 사용하던 HTML의 한계를 극복하고 SGML의 복잡함을 해결하는 방안으로써 HTML에 사용자가 새로운 태그(tag)를 정포인터를 갖다대면 텍스트의 색깔이 변하는 것, (2) 사용자가 이미지를 웹페이지의 다른 위치로 "끌어다 놓기"를 할 수 있는 것 등이 있다. 다이내믹 HTML을 쓰면, 웹문서들을 마치 데스크탑 응용프로그램들이나 멀티미디어 제품처럼 보이고, 동작하게 할 수 있다.다이내믹 HTML을 구성하고 있는 특성들은 넷스케이프의 최신 웹브라우저인 네비게이터 4.0과 마이크로소프트의 브라우저인 인터넷 익스플로러 4.0 내에 포함되어 있다. HTML 4.0은 넷스케이프와 마이크로소프트 브라우저 둘 모두에 의해 지원되지만, 오직 어느 한쪽의 브라우저에서만 지원되는 기능들도 몇몇 있다. 다이내믹 HTML 사용에 있어 가장 커다란 장애물은, 많은 사용자들이 아직도 오래된 브라우저를 사용하고 있기 때문에, 각 웹사이트에서는 사용자들의 브라우저 버전에 맞추어 두 가지 버전의 웹페이지를 만들어야 한다는데 있다.(1) 다이내믹 HTML의 개념과 특성들넷스케이프와 마이크로소프트 두 회사 모두 다음의 내용을 지원한다.웹페이지와 구성요소들의 객체 지향적인 모습콘텐츠에 CSS와 레이어를 사용전부 또는 대부분의 페이지 요소를 제어할 수 있는 프로그래밍다이내믹 글꼴페이지 요소들의 객체 지향적인 모습디비전 또는 섹션, 표제부, 문단, 이미지, 목록 등 각 페이지 요소가 하나의 "객체"로 간주된다 (마이크로소프트는 이것을 "Dynamic HTML Object Model"이라고 부르고, 넷스케이프에서는 "HTML Object Model" 이라고, 그리고 W3C에서는 "Document Object Model"이라고 부른다). 예를 들면, 페이지 내의 각 표제부는 텍스트의 스타일과 색상의 속성이 주어지고, 그 페이지 내에 삽입된 스크립트 등에서 이름으로 지칭할 수 있도록 이름을 붙일 수 있다. 그 페이지에 있는 이 표제부(또는 다른 어떤 요소라도)는 마우스가 지나가거나, 눌러지거나 또는 일정 시간이 경과하는 등 미리 설정된 사건의 결과로 변경될 수 있다. 또는 마우스로 이미지를 "끌어다놓기" 하면, 이미지가 라고 부른다. 이것은 웹의 HTTP 프로토콜의 일부이다.만약 웹사이트를 만들 때 어떠한 제어를 위해 CGI 프로그램을 사용하기 원하면, HTML 파일 내에 있는 URL 내에 그 프로그램의 이름을 기술하면 된다. 만약 폼을 만들려고 할 때, 이 URL은 FORMS 태그의 일부로서 기술될 수 있는데, 예를 들어 다음과 같이 쓸 수 있을 것이다.이 태그의 결과로서 mybiz.com에 있는 서버는 입력된 데이터를 저장하기 위해 제어권을 "formprog.pl"이라는 CGI 프로그램에 넘기고, 확인 메시지를 되돌려준다 (여기서 .pl은 Perl로 작성된 프로그램이라는 것을 가리키지만, CGI는 다른 언어로도 작성될 수 있다).CGI는 사용자로부터 응용프로그램으로 전달되고, 다시 사용자에게 전달될 데이터에 대해 일관된 방법을 제공한다. 이것은 응용프로그램을 작성하는 사람 입장에서는, 서버에 어떤 운영체계를 쓰든 상관없이 그 프로그램이 운영될 것이라는 확신을 가질 수 있다는 것을 의미한다.CGI는 사용자의 요청이 웹서버로부터 응용프로그램으로 전달되고, 다시 되돌아올 정보를 위한 단순하고 기본적인 방법이다. 인터페이스가 일관되기 때문에, 프로그래머는 CGI 응용프로그램을 여러 가지 다른 언어로 작성할 수 있다. CGI 프로그램 작성에 가장 보편적으로 사용되는 언어로는 C, C++, Java, Perl 등이 있다.CGI 프로그램의 대안으로서 마이크로소프트의 ASP가 있는데, 이것은 웹 페이지 내에 끼워 넣어진 일종의 스크립트로서 그 페이지가 보내지기 전에 서버에서 실행된다.6. JSPJSP(JavaServer Pages)JSP는 자바를 이용한 동적 웹 페이지 작성 기술입니다. 웹은 사용자가 입력한 URL을 해석하여 웨 서버에 데이터를 요청하는 웹 브라우저와 웹 브라우저의 요청에 따라 적절한 데이터로 응답하는 웹 서버로 구성됩니다. 현재 웹 브라우저는 마이크로 소프트사의 인터넷 익스플로러 또는 넷스케이프사의 내비게이터를 주로 이용하고 있으며, 웹 서버는 리눅스 및 유닉스 운영체 또한 이메일을 보낸다거나, 뉴스그룹과의 연계, 또 다른 웹싸이트로의 연결을 만들어 내고 데이터를 주고받는 것 등등이 PHP를 통해 손쉽게 구현될 수 있습니다.혹시 웹싸이트에 방명록이 있습니까? 싸이트 방문자 통계를 내기 위해 다른 써드 파티 써비tm를 사용하고 있습니까? 방문객이 어떤 웹페이지를 보다 더 많이 찾는지 등등을 알아보고 싶습니까? 또는 어떤 페이지를 보고 나서 웹싸이트를 떠나는지를 알고 싶습니까? PHP를 이용하면 이런 모든 것들이 장난같이 쉽게 해결될 수 있습니다. PHP를 이용하면 데이터를 프로세싱 하는 것에서부터 그래픽을 만들어내는 것까지 일순간에 해결해 낼 수 있습니다.웹 개발 쪽에 익숙한 분이라면 CGI라는 용어를 잘 알고 계실 겁니다. CGI는 HTML 을 만들어 낼 수 있는 프로그램을 작성 한다거나 웹페이지로부터 입력된 데이터를 다이나믹하게 처리하는 것에 사용되고 있습니다. CGI가 등장하기 전에는 모든 웹페이지는 늘 정적인 HTML 형태로 존재했습니다. 일일이 손으로 업데이트 해야만 하는 지루한 과정을 거치는 PHP는 맞춤화된 임베디드 CGI 언어입니다. 특히 PHP는 서버-사이드 기술(server-side technology)이기 때문에, 웹 페이지를 보는 쪽에서 특별한 프로그램이나 플러그-인 없이도 PHP를 이용한 웹페이지를 아무 탈 없이 볼 수 있는 것입니다.PHP는 모든 메이져 웹 브라우져와 잘 호환됩니다. 일반적으로 PHP는 CGI 언어중 하나로 여겨지고는 있지만, 실은 그 이상입니다. 훨씬 강력합니다.다른 데이터베이스나 기타 소스로부터 추출한 데이터를 기반으로 동적인 웹 페이지를 만들고 데이터들을 주고받는 작업을 인터넷을 통해 매끄럽게 해낼 수 있게 됩니다. 특히 CGI와 데이터베이스가 어떻게 어우러지는지에 대한 깊숙한 지식 없이도 이런 것들을 해낼 수 있다는 점에서 PHP의 우수성이 돋보이는 것입니다.PHP는 하이퍼텍스트 프리프로세서(Preprocessor)라는 말은 사용자가 어떤 웹페이지를 '요청' 하면 웹서버는 그 상된다.
차 례1. 객체지향의 개념(1) 객체지향의 기원(2) 객체지향 등장의 배경(3) 객체지향의 요소(4) 객체지향의 원리(5) 객체패러다임의 전망2. 객체지향 프로그램이란?3. 객체지향 프로그램의 특징4. 객체지향 프로그램의 주요특성5. 자바에서의 객체지향(1)자바에서의 다중상속(2)자바에서의 오버로딩(3)자바에서의 접근 제어(4)객체의 생성과 소멸※ 결 론(나의 생각)1. 객체지향의 개념(1) 객체지향의 기원객체(object)의 개념이 처음 등장하는 것은 60년대 중반에 소개된 Simula라고 하는 시뮬레이션 언어를 통해서이다. 그 이전에도 객체라는 용어는 인공지능 등 몇몇 분야에서 가끔 나타나기도 하였지만 "캡슐화(encapsulation)", "다형성(polymorphism)" 등 객체지향의 개념이 비로서 소개되었다.객체지향이란 용어가 중요하게 인식되기 시작한 것은 70년대 초반 XEROX사의 PARC(Palo Alto Research Center)에서 "Dynabook" 시스템을 개발하면서 소프트웨어로 Smalltalk을 만들었고, 여기에는 현재의 객체지향 개념의 상당수가 포함되어 있다.80년대 중반에 들어서는 객체지향 프로그래밍이 상당히 활발히 확산되었고 C++, Objective C, Eiffel, Ada95 등 수 많은 객체지향 언어들이 연이어 탄생하게 된다.객체지향 프로그래밍이 일반화되어가면서 설계와 분석, 방법론, Tool 등 여러 소프트웨어 개발 영역으로 객체지향을 확산하려는 시도가 90년대 초부터 일어났으며, 이에 따른 기술의 표준화도 함께 이루어져 갔다.최근에는 인터넷의 급격한 신장으로 Java 등 분산 컴퓨터 환경에 맞는 객체지향 언어와 CORBA, DCOM 등 분산 객체 및 샌프란시스코(San Fransisco) 같은 기업 프레임워크의 보급뿐만 아니라 메타 방법론이라 할 수 있는 UML(Unified Modeling Language)로의 표준화 작업까지 착실히 진행되고 있는 중이다.(2) 객체지향 등장의 배경객체지향의 패러다임(paradiam)를 중심 모델링 도구로 삼는다.정보공학은 구조적 기법의 대부분의 내용을 수용하고 있지만, 데이터 지향이라는 데 큰 차이점이 있다. 먼저 엔티티(entity)의 식별을 통하여 데이터의 관계와 구조를 명확히 한 다음 이러한 데이터 구조를 지원하는 프로세스를 설계한다. 이것은 컴퓨터 시스템의 고유한 데이터 구조를 안정적으로 만들면 업무 프로세스의 변화에도 프로그램 수정을 줄일 수 있다는 장점이 있다.프로세스 지향이나 데이터 지향 모두 프로세스와 데이터를 분리하는 철학을 가지고 있어, 분석 단계에서 발견한 것들을 설계 단계에서 기능으로 구현되도록 늦추어 놓는다. 따라서 분석 단계의 명세서에서 "무엇(what)"을 하는 것인가를 잘 정리해 놓고도 설계 단계에서 "어떻게(how)"하는 것인 가로 변형시키는 데 어려움을 겪는다.또한 데이터와 프로세스의 분리는 인간이 사고하는 방식과는 차이가 있다. 즉, 인간은 사물과 그 사물의 행위를 묶어서 생각하지 따로 떼어 개별적으로 생각하지 않는다. 따라서 데이터와 프로세스가 분리된 기술적인 산출물은 비전문가가 보아서 쉽게 이해하기 힘들며, 때문에 개발자와 사용자간에 의사소통에도 어려움이 발생한다.객체지향 기법에서는 요구명세서에 존재하는 사실을 그대로 객체로 찾아 모델링을 한다. 이것은 곧바로 설계와 구현으로 이어진다. 데이터와 프로세스가 분리되지 않으므로 이들 사이의 연결고리도 필요 없고, 객체 내부에 어떤 데이터가 있고 어떤 프로세스로 어떻게 가공하는지 알 필요도 없다. 단지 무엇이 필요하면 다른 객체에 메시지만 전달하면 된다.이러한 사실은 개발도중에 개발방법의 전이가 이루어지지 않고 부드럽게 이어지며, 모델이 단순화해져 자연스럽게 여러 사람이 개발 작업에 참여할 수 있다는 장점이 있다.(3) 객체지향의 요소객체지향의 기본 사상은 복잡한 메커니즘의 현실 세계를 인간이 이해하는 방식으로 시스템에 적용시켜보자는 것이다. 이를 위해 객체지향 기술에는 객체(object)와 객체들의 범주를 나타내는 클래스(class), 그리고 객체간념이다.예를 들어 myCustomer라는 객체에게 메시지를 보내는 Java 문장에서,myCustomer.addToOrder(itemNumber, price, quantity);수신자는 myCustomer, 메소드는 addToOrder, 인자는 itemNumber, price, quantity의 3개가된다③ 클래스모든 객체는 반드시 클래스를 통해서만 정의될 수 있다. 클래스는 객체의 타입을 정의하는 템플릿(template)으로서, 여러 객체의 공통적인 속성(attribute)과 메소드(method)를 가지고 있는 클래스가 먼저 정의되면, 이 클래스를 통해서 다시 객체가 정의되는 것이다.이를 테면 회사라는 조직에는 많은 사원들이 있고, 이들 중에는 이과장도 있고 김대리도 있다고 하자.이들을 시스템으로 표현하려면 많은 공통적인 요소, 즉 속성들이 있는데, 성명, 사번, 부서, 급호 등이 그것이다. 급여계산이나 업무처리는 메소드가 될 것이다. 이러한 속성과 메소드를 가지는 사원은 클래스가 되고 이를 통해 이과장, 김대리 등의 객체가 만들어진다.이렇게 한 클래스에 속하는 각각의 객체를 그 클래스의 인스턴스(instance)라고 하고, 객체들의 유형이 되는 클래스를 객체의 타입(object type)이라고 한다.(4) 객체지향의 원리객체, 메시지, 클래스가 객체지향의 핵심요소이고 이러한 요소를 이용하여 객체지향의 원리를 이루어내는 요소가 있다면 추상화, 캡슐화, 상속성을 들 수 있다.① 추상화현실세계의 사실을 그대로 객체로 표현하기 보다는 문제의 중요한 측면을 주목하여 상세내역을 없애나가는 과정을 추상화(abstraction)라 한다. 객체지향에서는 클래스를 통해서 추상화를 지원하고 있으며, 이것은 다른 전통적 프로그래밍보다 강력한 추상화의 방법이다.추상화의 가장 기본적인 형태는 "프로세스 추상화(process abstraction)"이다. 프로그램에서 자주 나오는 상세한 부분을 함수로 묶어 호출하게 함으로써 이해하기 쉽고 간단한 모양으로 만들어 준다.다음의 Java 구te" 등으로 정의해준다. 이렇게 되면 "public"으로 정의된 함수 또는 데이터는 외부에서 사용이 가능하며, "private"으로 선언된 경우는 외부에서 제어할 수 없고 내부에서만 사용된다.이것은 클래스 외부에는 제한된 접근 권한을 제공하며 원하지 않는 외부의 접근에 대해 내부를 보호하는 작용을 한다. 이렇게 함으로써 이들 부분이 프로그램의 다른 부분들에 영향을 미치지 않고 변경될 수 있다.③ 상속성추상화는 복잡한 프로그램을 간단하게 해주고 분석의 초점을 명확히 할 수 있다. 캡슐화는 객체의 내부구조와 실체를 분리함으로써 내부의 변경이 소스 프로그램에 미치는 영향을 최소화한다. 따라서 유지보수도 용이해진다.상속성(inheritance)는 객체기술의 가장 핵심이 되는 개념으로 프로그램을 쉽게 확장할 수 있도록 해주는 강력한 수단이 된다. 앞의 두 개념은 객체지향이 아닌 개발 방법에서도 흉내를 낼 수 있으나 이것은 객체지향 언어와 개발 방법만의 특성이다.예를 들어, 어떤 회사에 근무하는 사원이 정규직 사원, 계약직 사원으로 구분된다고 하자. 이때 사원이라는 정보는 사원의 이름과 주소, 사원번호, 성별 등의 공통된 속성을 가지고 있다. 정규직 사원은 호봉과 연봉을, 계약직 사원은 계약기간과 시간급 같은 고유의 속성들을 가지게 된다. 물론 정규직 사원과 계약직 사원은 모두 사원이라는 클래스의 속성을 그대로 물려받는다. 여기에 추가하여 고유의 속성을 정의하게 되는 것이다. 사원은 클래스 계층에서보면 수퍼클래스(super class)가 되고 정규직과 계약직은 서브클래스(sub class)가 된다. 이렇게 수퍼클래스와 서브클래스간의 관계가 객체지향의 상속성의 개념이다.상속의 효과는 클래스를 체계화할 수 있으며, 기존의 클래스로부터 확장이 용이하다는 것이다. 함수와 변수를 서브클래스에서는 따로 정의하지 않고 상위의 클래스의 내용에다 추가적인 특성을 덧붙이기만 하면 되므로 매우 효율적이다. 또한 공통의 특성을 서브클래스마다 반복적으로 기술하지 않고 한번만 기술하기 때문에 객체지향에 관련된 모든 것을 통틀어 말한다.이러한 객체지향 프로그래밍에 대한 개념은 오래 전부터 존재해 왔던 개념으로 1960년대 Simula라는 언어에서 처음 소개되었다. 그 이후 Smaltalk, C++등과 같은 언어의 성공을 등에 업고 기존의 프로시저를 기반으로 하는 절차적 프로그램밍을 대체하기 시작하면서 폭발적인 인기를 얻어 지금과 같은 절정기를 맞이하였다.기존의 프로시저 기반의 구조적 프로그래밍(C나 Pascal과 같은 명령형 패러다임)에서는 프로그램 내에서 일어나는 모든 변화와 동작, 사건 등을 프로그래머가 직접 기술하는 형태로 프로그램을 기술했지만 객체지향 프로그래밍에서는 똑똑한 객체에게 자신이 원하는 일을 해달라는 메시지를 전달하는 형태로 프로그램을 기술한다. 자동차를 예로 들면 처음 자동차를 움직이기 위해서 시동을 걸고, 클러치를 밟고 1단 기어를 넣은 후에 클러치를 서서히 떼면서 가속 페달을 밟아야 한다. 하지만 객체지향 프로그래밍은 똑똑한 '자동차'라는 객체에게 단지 움직이라는 하나의 메시지만을 줌으로써 문제를 해결한다. 정지하는 동작도 마찬가지이다. 클러치에서 발을 떼고 브레이크를 밟는 동작을 일일이 기술할 필요 없이 그냥 정지하라는 메시지만 보내면 된다. 이러한 개념을 프로그래밍에 대입해 보면 결국 절차적 프로그래밍은 프로시저가 주체가 되고 처리하고자 하는 자료는 객체가 되어 프로시저의 호출, 자료의 전달, 프로시저의 실행 등으로 문제를 해결한다. 반면에, 객체지향 프로그래밍에서는 처리하고자 하는 객체가 주체가 되어 서로간의 메시지 전달을 통해 문제를 해결한다는 개념이 있음을 이해할 수 있을 것이다.※Lego Block으로 여러 물체를 만드는 것과 같은 개념필요한 Block을 구입하여 또 다른 물체를 만드는 것과 같이 필요한 객체를 만들거나, 구입하여 하나의 새로운 프로그램을 제작객체지향 프로그램이란 작은 객체를 모아 하나의 일을 수행하는 또 다른 큰 프로그램을 만드는 작업3.객체지향 프로그램의 특징객체지향 프로그램의 주요 특징은 추상화