<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>webtrend</title>
    <style>
        ul{
            list-style: none;
            line-height: 200%;
        }
        strong{
            color:#ad3000;
        }
        #container{
            width: 600px;
            margin: 20px auto;
            border: 1px solid #000;
            background-color: #000;
        }
        h2{
            color: white;
            text-shadow: 3px 2px 5px black;
        }

        table,td,th{
            caption-side: bottom;
            border: 1px solid black;
            padding: 10px;
            border-collapse: collapse;
        }
        .heading{
            background-color: #eee;
        }

    </style>
</head>
<body>
    <h1>최신 웹 디자인 트렌드</h1>
    <ul>
        <li><strong>반응형 웹 디자인</strong> - 다양한 화면 크기에 최적화하다.</li>
        <li><strong>플랫 디자인</strong>- 입체에서 평면으로</li>
        <li><strong>풀 스크린 배경</strong>-콘텐츠에 집중</li>
        <li><strong>원 페이지 사이트</strong>-한페이지에 모든 내용을 담다.</li>
        <li><strong>패럴랙스 스크롤링</strong>- 동적인 효과로 강한 인상을!</li>
        <li><strong>웹 폰트</strong>-웹 타이포그래피를 받쳐주는 기술</li>
    </ul>
    <div id="container">
    <h2>웹 개발 기초</h2>
    </div>
    <p></p>
   
    <table>
        <caption>2019 국민 독서 실태</caption>
        <tr>
            <th><span class="heading">구분</span></th>
            <th><span class="heading">성인</span></th>
            <th><span class="heading">독서자</span></th>
        </tr>
        <tr>
            <th><span class="heading">종이책</span></th>
            <td>6.1권</td>
            <td>11.8권</td>
        </tr>
        <tr>
            <th><span class="heading">전자책</span></th>
            <td>1.2권</td>
            <td>7.1권</td>
        </tr>
        <tr>
            <th><span class="heading">오디오북</span></th>
            <td>0.2권</td>
            <td>5.5권</td>
        </tr>
    </table>
</body>
</html>

'HTML+CSS+자바스크립트' 카테고리의 다른 글

자바스크립트  (0) 2023.05.25
CSS고급 선택자  (0) 2023.05.24
CSS,박스 모델  (0) 2023.05.23
p.191, 192 예제  (0) 2023.05.22
CSS의 기본(1)  (0) 2023.05.22
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>상품 소개 페이지</title>
    <link rel="stylesheet" href="../css/mystyle-result.css">
</head>
<body>
    <h1>웹 기술-기본</h1>
    <ul>
        <li>HTML</li>
        <li>CSS</li>
        <li>Javascript 기초</li>
    </ul>
</body>
</html>
h1{
    display: inline-block;
    background-color: #222;
    color: #fff;
    padding: 10px;
}
ul{
    list-style: none;
}
li{
    font-size: 1.2em;
    line-height: 1.5em;
    color: blue;
}

 

'HTML+CSS+자바스크립트' 카테고리의 다른 글

자바스크립트  (0) 2023.05.25
CSS고급 선택자  (0) 2023.05.24
CSS,박스 모델  (0) 2023.05.23
p.233,234,235 예제  (0) 2023.05.22
CSS의 기본(1)  (0) 2023.05.22

스타일(style): HTML문서에서 자주 사용하는 글꼴이나 색상, 정렬, 각 요소의 배치 방법과 같이 문서의 겉모습을 결정짓는 것을 가리킴.

반응형 웹 디자인 : PC, 모바일과 상관없이 웹 브라우저의 크기에 따라 화면 레이아웃을 자동으로 바꿔주는 방법. 하나의 웹문서에서 작동하도록하는 것이 스타일의 역할. 배치가 달라짐.

 

CSS스타일의 형식

[선택자 {속성1: 속성값1; 속성2: 속성값2; }]  //속성1: 속성값1 = 스타일 규칙.

 

p(타입 선택자: 스타일을 어느 태그에 적용할지 알려줌){(괄호 안에 스타일 정보)
text-align(텍스트 정렬 속성): center(값);
color(글자색 속성): blue(값);
}

 

스타일 규칙

;으로 구분하고 {} 안에 나열함.

스타일 주석:  /**/으로 여러줄 주석이 들어감.

 

  • 스타일 시트: 스타일 규칙을 한눈에 확인하고 필요할 때마다 수정하기 쉽도록 한군데 묶어놓은 것
  • 브라우저 기본 스타일: HTML만 줬을 때, 웹 브라우저에 표시할 때는 기본 스타일 사용.
  • 인라인 스타일: 스타일 시트를 사용하지 않고 태그에 직접 표시함. style="속성: 속성값;"을 줌. 
  • 내부 스타일 시트: 문서 전체에 동일하게 적용할 스타일. <head> 태그 안에 정의 <style>,</style>태그 사이에 작성.
  • padding: 내부 여백, 시계방향.
  • 외부 스타일 시트: 다른 페이지에도 동일하게 필요할 때 별도 파일로 저장해 놓고 필요할 때마다 파일에서 가져와 사용. *.css 파일 확장자 사용.
  • [<link rel = "stylesheet"   href= "외부 스타일 시트 파일 경로">]

내부 스타일 시트

<head>
    <meta charset="UTF-8">
   
    <title>레드향 샐러드 레시피</title>
    <style>
        p{
            padding: 10px;
            background-color: #222;
            color: #fff
        }
    </style>
</head>

외부 스타일 시트

<head>
    <meta charset="UTF-8">
    <title>로그인 페이지</title>
    <link rel="stylesheet" href="../css/h1.css">
</head>

CSS기본 선택자//잘 기억 요소를 찾을 때 사용

전체 선택자: 모든 하위 요소에 스타일을 한꺼번에 적용할 때 사용. 웹브라우저의 기본 스타일을 초기화할 때 자주 사용.

margin: 외부 여백. 브라우저에 맞게 margin:0은 여백없이 출력.

태그: 태그자체

요소: 태그를 포함해 <p>태그를 적용한 '텍스트 단락 지정하기' 부분을 p 요소.

타입 선택자: 문서에 특정 태그를 사용한 모든 요소에 스타일이 적용됨.

[태그명{ 스타일 규칙 }]

class 선택자: 요소의 특정 부분에만 스타일 적용. 문서안에서 여러번 반복할 스타일이라면 클래스 선택자로 정의.

span은 오로지 스타일을 적용하기 위한 태그.

[.클래스명{ 스타일 규칙 } ]

 p{
            font-style: italic;/*이탈릭체*/
        }
        .accent{
            border: 1px solid #000; /*테두리*/
            padding: 5px;/*테두리와 내용 사이의 여백*/
        }
        .bg{
            background-color: #ddd;/*배경색*/
        }
<p class="accent bg">재료: 레드향 1개, 아보카도 1개, 토마토 1개, 샐러드 채소 30g</p>
<li><span class="accent">레드향과 아보카도, 토마토</span>도 먹기 좋은 크기로 썰어둡니다.</li>

헷갈린 부분: 내부 스타일 시트와 타입 선택자의 차이-> 내부 스타일 안에 타입 선택자가 존재.

 

id 선택자: 요소의 특정 부분에만 스타일 적용, #다음에 id 이름 지정,문서 안에서 한번만 사용(유일 값) (클래스 선택자와의 차이)

[#아이디명 { 스타일 규칙 }]

auto : 균등하게 줌(가운데 정렬)//전체: 1000px 사진: 500px 좌우: 250px

<head>
    <meta charset="UTF-8">
    <title>레드향</title>
    <style>
        #container{
            width: 500px;/*너비*/
            margin: 10px auto;/*중앙 배치*/
            padding: 10px;/*테두리와 내용 사이 여백*/
            border: 1px solid #000;/*테두리 굵기와 색깔*/
        }
        #fontcolor{
            color: red;
        }
    </style>
</head>
<body>
    <div id="container">
    <h1>레드향</h1>
    <p>껍질에 붉은 빛이 돌아 레드향이라 불린다.</p>
    <p><span id="fontcolor">레드향</span>을 한라봉과 귤을 교배한 것으로 일반 귤보다 2~3배 크고, 과육이 붉고 통통하다.</p>
    <p>비타민 C와 비타민 P가 풍부해 혈액순환, 감기예방 등에 좋은 것으로 알려져 있다.</p>
</div>
</body>

그룹 선택자: 같은 스타일을 사용하는 선택자를 한꺼번에 정의, 쉼표(,)로 구분해 여러 선택자를 나열

[선택자1, 선택자2 { 스타일 규칙 }]


캐스케이딩 스타일 시트: 웹 요소에 둘 이상의 스타일을 적용할 때 우선순위에 따라 적용할 스타일을 결정.

스타일 우선순위: 스타일 규칙의 중요도와 적용 범위에 따라 우선순위가 결정되고, 그 우선순위에 따라 위에서 아래로 스타이을 적용.

 

스타일 상속: 태그의 포함 관계에 따라 부모 요소의 스타일을 자식 요소로, 위에서 아래로 전달합니다. 

//위에서 아래로(인터프리터 방식 중첩 적용되면 아래있는 것이 최종적)

 

원칙1: 스타일 우선 순위

1.얼마나 중요한가.

사용자가 지정한 스타일(), 제작자 스타일(웹 사이트를 만들 때 제작자가 만든 스타일), 웹 브라우저가 기본으로 정해 놓은 스타일(기본 스타일)

2.얼마나 한정지을 수 있는가.

!important(어떤 스타일보다 우선 순위), 인라인 스타일(해당 태그에만 적용되는 스타일. 문서 안에서 한번만 사용됨), id 스타일(특정 부분에만 적용되는 스타일. 문서 안에서 한번만 사용됨), 클래스 스타일(특정 부분에만 적용되는 스타일. 문서 안에서 여러번 사용됨), 타입 스타일

3.소스 순서에 따라

나중에 온 스타일이 먼저 온 스타일을 덮어씀.

 

원칙2: 스타일 상속

자식요소에서 별도로 스타일을 지정하지 않으면 부모 요소의 스타일 속성들이 자식요소로 전달되는 것.

<style>
        p{
            color: black;
        }
        h1{
            color:brown !important;
        }
        p{
            color: blue;
        }
    </style>
    <link rel="stylesheet" href="../css/p.css">
</head>
<body>
    <div id="container">
    <h1 style="color: green;">레드향</h1>
    <p style="color: red">껍질에 붉은 빛이 돌아 레드향이라 불린다.</p>
    <p><span id="fontcolor">레드향</span>을 한라봉과 귤을 교배한 것으로 일반 귤보다 2~3배 크고, 과육이 붉고 통통하다.</p>
    <p>비타민 C와 비타민 P가 풍부해 혈액순환, 감기예방 등에 좋은 것으로 알려져 있다.</p>
</div>
</body>
</html>

클래스와 id는 중첩되어 자주 사용.


font-family: 웹 문서에서 사용할 글꼴,글꼴이 없을 경우를 대비해서 하나 이상 지정.

[font-family:<글꼴 이름>|[<글꼴 이름>,<글꼴 이름>]]

공백 자체를 가지고 있는 글꼴은 큰 따옴표로 묶음 //"맑은 고딕"

속성값을 나열할 때 값이 아니라 유형이라면 < >로 묶습니다. 이때 속성을 유형처럼 사용 가능합니다.

[font-size:<절대 크기>|<상대 크기>|<크기>|<백분율>  ]   //반드시 단위가 필요.px,pt,%,em(1em=16px=12pt)등 -는 사용 불가능, 부모 요소의 클자 크기를 시준으로 상대적인 글자 크기 지정

[font: <font-style><font-variant><font-weight> ]

font-style: 이탤릭체로 글자 표시

[font-style : normal |italic|oblique]

font-weight: 글자 굵기

[font-weight: normal|bold|bolder|lighter|100|200|..|800|900]

h2{
            font-size: 30px;
            font-weight: 300;
        }
        .italic{
            font-style: italic;
            font-family: "맑은 고딕", 돋움, 고딕;
        }

 

웹 폰트: 문서 안에 글꼴 정보도 함께 저장했다가 사용자가 웹 문서에  접속하면 글꼴을 사용자 시스템으로 다운로드 시켜 사용하는 글꼴. 

[@font-face{

font-family: <글꼴 이름>; //파일명

src: <글꼴 파일>[<글꼴파일>,<글꼴파일>,...]; ]

<head>
    <meta charset="UTF-8">
    <title>목록 나열하기</title>
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<style>
    h1{
        font-family: 'Nanum Pen Script', cursive;
    }
</style>
</head>

 

color 속성: 글자 색 지정. 색상값 뒤에 a는 투명도.

속성값: 16진수(#000000:검정, #ffffff: 흰색), rgb, hsl, 색상이름 

[color: <색상>]

rgb, rgba: 0~255, a는 불투명도 0~1

[h1{ color: rgb(0,0,255)}]

[h1{ color: rgba(0,0,255,0.5)}]

hsl, hsla: 채도(0% 회색톤, 100% 원래색), 명도(0% 가장 어두움, 50% 원래색,100% 흰색)

[hsl(0,100%,50%)는 빨간색]

 

 li{
            color: #065322
        }
h2{
            color: rgba(0, 0,255, 0.5)
        }

 

text-align: 텍스트 정렬

[text-align: start | end | left | right | center | justify | match-parcent ]

 

line-height: 줄 간격 조절

[lint-height:2.5; ] 글자 크기의 2.5배

텍스트를 세로로 가운데 정렬: line-height를 height값과 값이 사용.

 

text-decoration: a태그에 주로 사용(하이퍼링크 제거에 사용)

 

text-shadow: 텍스트에 그림자 효과를 추가.

[text-shadow: none | < 가로거리 > < 세로거리 > < 번짐 정도 > < 색상 > ]

가로거리: +오른쪽, -왼쪽

세로거리: + 아래, - 위

번짐정도: 양수값 크게, 음수값 작게(기본값 0)

색상: 현재 글자색이 기본값.

 

text-transform: 텍스트의 대소문자 변환(capitalize: 첫번째 글자, uppercase: 모든 글자 대문자, lowercase: 모든 글자 소문자)

 

letter-spacing: 글자와 글자 사이의 간격 조절

word-spacing: 단어와 단어 사이 간격 조절

 

list-style-type : 불릿의 모양이나 번호 스타일을 지정가능.(none은 제거)

list-style-image: 불릿 대신 이미지를 사용

[list-style-image:<url(이미지 파일 경로)>|none]

list-style-position: 목록 들여쓰기, 내려쓰기.(outside: 기본값, inside: 기본 위치보다 안으로 들여씁니다.)

[list-style-position: inside | outside ; ]

위에 3가지가 합쳐서 list-style

ol태그: 주로 메뉴 만들 때

<head>
    <meta charset="UTF-8">
    <title>회사 소개</title>
    <style>
         ul{list-style:none;}
         li{
            width: 300px;
            padding: 20px 40px;
            margin: 5px;
            border: 1px solid #000;
         }
    </style>
   
</head>

caption-side: 표 제목의 위치를 정해 줌.

[caption-side: top | bottom]

border: 표에 테두리를 그려 줌.

border-spacing: 셀 사이의 여백 조절 0이면 여백이 없어짐

[ border-spacing : 수평거리 수직거리 ]

border-collapse: 표와 셀 테두리를 합쳐준다.(자주 사용 중요)

[border-collapse: collapse|separate(따로 표시가 기본값)]

 

 

'HTML+CSS+자바스크립트' 카테고리의 다른 글

자바스크립트  (0) 2023.05.25
CSS고급 선택자  (0) 2023.05.24
CSS,박스 모델  (0) 2023.05.23
p.233,234,235 예제  (0) 2023.05.22
p.191, 192 예제  (0) 2023.05.22

네트워크 : 데이터 교환을 목적으로 로컬컴퓨터와 원격컴퓨터 간에 데이터의 흐름을 나타내는 구조. ( 여러 대의 컴퓨터를 통신 회선으로 연결한 것)

 

네트워크모델 : 자원이나 데이터의 공유하는 방법에 따라 나눈것.

  • 서버: 다른 컴퓨터에 서비스를 제공하기 위한 컴퓨터 또는 프로그램. 클라이언트의 연결을 수락하고, 요청 내용을 처리한 후 응답 보내는 역할.
    • 처리하는 서비스에 따라 구분
    • HTTP(웹서버) : 웹브라우저에서 들어온 요청을 받아 처리하는 서버. 웹페이지라는 단위(HTML, JSP)의 서비스를 웹클라이언트에게 제공
    • DBMS 서버 : 대량의 데이터를 파일로 저장한 후 데이터에 대한 CRUD(Create, Read, Update, Delete) 서비스를 하는 서버.
    • FTP 서버,  메신저 서버
  • 클라이언트: 요청하여 서비스를 받는 컴퓨터 또는 프로그램. 네트워크 데이터를 필요로하는 모든 애플리케이션이 해당(모바일 앱도 포함된다.)
    • 웹클라이언트 : 자신이 원하는 페이지의 경로(URL)을 사용해서 웹 서비스 요청
    • FTP클라이언트, 메신저

IP주소 (컴퓨터 주소): 네트워크에 존재하는 컴퓨터를 유일하게 식별하는 주소(숫자). 인터넷에 연결된 모든 통신망과 이 통신망에 연결된 컴퓨터에 (송신자와 수신자를 구별하는 고유의 주소) 네트워크 어댑터마다 할당.

도메인 네임 : IP주소를 문자로 표현한것

DNS : 도메인 네임을 IP주소로 자동으로 변환해 주는 서버

포트번호 (포트 번호): 컴퓨터에서 해당 프로세스를 찾을 때 필요한 번호이다.

호스트 이름 : 네트워크상에 존재하는 컴퓨터 이름.

 

InetAddress클래스 생성자가 없다. 정적클래스에서 정보를 가져오는 형식으로 사용.

[InetAddress ita = InetAddress.getByName("URL값");  ]

메서드명 설명
getLostHost() 현재 컴퓨터의 InetAddress객체를 반환한다.
getByName(String hostName) 전달받은 이름(hostName)으로 지정된 컴퓨터의 InetAddress 객체를 반환한다ㅣ.
getAllByName(String hostName) 전달받은 이름(InetAddress)으로 지정된 모든 컴퓨터의 InetAddress객체를 배열로 반환한다.
equals(InetAddress other) 인수로 전달받은 컴퓨터(other)와 IP주소가 같으면 true, 아니면 false를 반환한다.
getAddress() IP주소를 나타내는 4개의 바이트 배열을 반환한다.
getHostAddress() 호스트의 IP주소를 나타내는 문자열을 반환한다.
getHostName() 호스트의 이름을 나타내는 문자열을 반환한다.

URL : 인터넷에서 각종 서비스를 제공하면서 서버 내 파일과 같은 자원의 위치를 나타내고자 하는 표준적인 논리 주소. 인터넷이 어디 있는지를 알려주고자 사용하는 규약

[프로토콜://서버정보: 포트번호/디렉토리명/파일명]

생성자명 설명
URL(String utlString) 전달받은 문자열로부터 URL 객체를 생성한다.
URL(String protocol, String host, String file) 전달받은 프로토콜과 호스트, 파일명으로 부터 URL 객체를 생성한다.
URL(String protocol, String host, int port, String file) 전달받은 프로토콜과 호스트, 포트번호, 파일명으로부터 URL 객체를 생성한다.

URL클래스 메소드

메소드 설명
getProtocol() URL 주소의 프로토콜을 반환한다.
getHost() URL 주소의 호스트 이름을 반환한다.
getPort() URL 주소의 포트 번호를 반환한다.
getPath() URL 주소의 경로 요소를 반환한다.
getQuery() URL 주소의 쿼리 요소를 반환한다.
getFile() URL 주소의 파일 이름을 반환한다.
getRef() URL 주소의 참조 요소를 반환한다.

 

URL 클래스는 URL을 이용하여 연결 및 입력 스트림을 형성할 수 있지만, URLConnection 클래스는 URL을 이용하여 참조된 자원에 대해 읽고 쓰는 작업(입력, 출력 스트림)을 형성할 수 있다.

이때 URL 인스턴스 생성 후 openStream()으로 입력 스트림 형성한다.

[URL url = new URL("http://www.hanbit.co.kr/");

InputStream is = url.openStream();]

다향성을 적용해 적용하면 제이터를 접근 할 때마다 항상 원하는 타입으로 형변환을 하여야 한다. 구현면에서는 효율적이고 편리하지만, 자료형에 매우 불안정한 구조가 된다.


제네릭 프로그래밍

  • 클래스를 정의하면서 사용할 변수의 자료형을 설계할 때(코드 작성시) 결정하는 것이 아니가 컴파일 할 때 자료형을 검사해서 자료형에 유연하면서 안정성까지 고려할 수 있도록 제공하는 기술
  • 제네릭은 어떠한 자료형을 기반으로도 인스턴스의 생성이 가능하도록 자료형에 일반적인 클래스를 정의하는 문법(재사용이 가능)
  • 실행할 때 매개변수로 받아서 데이터 타입을 결정한다.

제네릭 클래스 : 타입을 변수로 표시(타입매개변수 : 객체 생성시에 프로그래머에 의하여 결정)

타입매개변수 : E-Element, K-Key, N-Number, T-Type, V-Value

[클래스명<타입인자>참조변수 = new 클래스명<타입인자>(); ]

 

 

제네릭 타입

[public class 클래스명 <타입매개변수>] 

  • 타입을 파라미터로 가지는 클래스와 인터페이스
  • 선언 시 클래스 또는 인터페이스 이름뒤에 "<>" 부호 붙임
  • "<>" 사이에는 타입 파라미터가 위치한다.
  • 제네릭은 불필요한 타입 변경을 없애준다.
  • 제네릭을 엄격한 타입검사를 통해 안전성을 높여준다.(컴파일 시에 미리 타입을 강하게 체크해서 에러 사전 방지)

타입 파라미터(= 매개변수 타입)

  • 일반적으로 대문자 알파벳 한 문자로 표현
  • 실핸클래스에서 타입 파라미터 자리에 구체적인 타입을 지정해 주어야 한다.

타입매개변수로 전달되는 타입의 종류를 제한하고 싶은 경우가 있다. 특정한 종류의 객체들만을 받게 하고 싶은 경우 사용하는 것이 한정된 타입매개변수이다. 이 기능을 사용하기 위해서는 extends나 super 키워드를 사용한다.

[<타입 매개변수 extends 슈퍼 클래스명> : 슈퍼 클래스를 상속받은 하위 객체들만 가능하다.

<타입 매개변수 extends 인터페이스명> : 인터페이스로부터 구현 클래스 객체들만 가능하다.]

 

제네릭 타입을 매개변수의 타입이나 리턴타입으로 사용할 때 와일드 카드로 명시할 수도 있다.

와일드 카드는 ?로 표현 : 어떤타입 매개변수도 지정할 수 있다는 의미. 현재 객체의 타입 매개변수와 같지 않은 타입의 인자로 받을 수 있다.

[<?> 제한없음

<? extends 슈퍼 클래스> : 슈퍼 클래스이거나 슈퍼클래스로부터 상속받은 하위 객체만 타입으로 지정

<? super 서브 클래스> : 서브 클래스이거나 서브 클래스가 상속하는 상위 객체만 타입으로 지정]

 

제네릭 메서드 : 매개변수 타입과 리턴 타입으로 타입 매개변수를 갖는 메소드, 타입 매개변수를 리턴 타입과 매개변수에 사용

[public <타입매개변수,...> 리턴타입 메서드명(매개변수,...){   }]

호출

  1. 명시적으로 타입 인자를 지정
    • 리턴타입 변수 = <타입 인자> 메서드명(인자값);
  2. 인자값을 보고 타입 인자를 추정
    • 리턴타입 변수 = 메서드명(인자값);

프로그램 : 데이터를 표현하고 데이터를 처리하는 것

자료구조 : 데이터를 효율적으로 사용되도록 구조적으로 저장하고 관리하는 것 , 데이터를 추가, 수정, 삭제, 검색이 효율적으로 함(정형화하거 있는 데이터 저장방식 : 배열, 리스트, 스택, 트리, 큐, 해시 정리)

프로그램 구성 = 코드 + 데이터(데이터 관리 기술 = 자료구조)

 

알고리즘 : 자료구조가 데이터의표현돠 저장에 대한 방법이라면 알고리즘은 표현되거나 저장된 데이터를 대상으로 '문제를 해결하는 방법'이다. 알고리즘과 자료구조는 밀접하게 관련되어 있다.(정렬, 탐색 등으로 정리)

 

컬렉션 : 자료구조와 알고리즘을 인터페이스,클래스로 구현하려 제공하는 자바 API, 컬렉션 괸련 클래스들은 많은 양의 인스턴스를 다양한 형태로 저장하는 기능을 제공한다. 다양하고 효율적으로 인스턴스의 저장이 가능. 기본적으로 객체들의 집합을 의미. 객체 단위의 연산을 제공,

 

배열의 문제점 : 불특정 다수의 객체를 저장하기에는 문제, 객체를 저장하려면 어디가 비어있는지 확인해야함

 

배열과 컬렉션의 차이점

  • 배열은 크기를 지정해랴만 하고 한번 지정된 크리를 변경할 수 없지만 컬렉션은 크기에 제약이 없다.
  • 배열은 중간에 값을 추가 해준다거나 삭제 또는 정렬을 하고자 할 때 개발자가 직접 코드로써 로직을 작성해야 하지만 컬렉션에서는 이미 자료구조적인 알고리즘이 메소드로 정의되어 있기 때문에 메서드 호출만으로 방대한 데이터를 효율적으로, 구조적으로 관리할 수 있다.
  • 배열은 한가지 타입의 여러 개의 데이터를 보관할 수 있다면 컬렉션은 별도의 제네릭 설정을 하지 않을 경우 여러가지 타입의 여러 개의 데이터를 보관할 수 있다.

컬렉션 프레임워크(컬레션 인터페이스, 컬렉션 클래스) : 자료 구조에 사용하는 인터페이스, 인터페이스로 구현된 클래스, 괸련된 알고리즘(java.util 패키지에 존재), 구체적이고 체계화된 API(프로그래밍 접근 방식)을 제공한다는 의미.

프레임워크 : 자료구조에 상관없이 추가하려면 add(), 삭제하려면 remove() 같이 표준화된 접근 받식을 제공하는 것. 사용 방법을 미리 정해 놓은 라이브러리를 말한다.

인터페이스 및 클래스 설명
인터페이스 컬렉션에서 공통으로 제공해야 하는 연산들을 추상적으로 정의하고, 구체적인 구현은 구현 클래스에 위임한다.
구현 클래스 컬렉션을 실제로는 어떤 자료구조를 적용해 구현하느냐에 따라 컬렉션의 종류가 달라진다.
알고리즘 컬렉션마다 유용하게 사용할 수 있는 메서드를 의미한다.
인터페이스 설명
Collection 모든 자료 구조의 부모 인터페이스로서 객체의 모임을 나타낸다
Set 집합(중복된 원소를 가지지 않는)을 나타내는 자료구조
List 순서가 있는 자료 구조로 중복된 원소를 가질 수 있다.
Map 키와 값들이 연관되어 있는 사전과 같은 자료구조
Queue 들어온 순서대로 나가는 FIFO(First - In-First-Out) 자료구조

Collection은 거의 모든 컬렉션 인터페이스의 부모 인터페이스에 해당. 모든 컬렉션 클래스들이 Collection 인터페이스를 구현하고 있기 때문에 Collection에 들어 있는 메소드들은 거의 대부분 컬렉션 클래스(구현 클래스)에서 사용할 수 있다.

기능 메서드 설명
객체추가 boolean add(E e) 주어진 객체 맨 끝에 추가
객체비우기 void clear() 컬렉션의 모든 요소 비우기
여부판단 boolean isEmpty() 컬렉셩의 요소 존재 여부 판단
객체삭제 boolean remove(Object o) 매개변수로 전달받은 객체를 컬렉션에서 삭제
요소 수 반환 int size 컬렉션의 요수 개수

 

리스트 : 순서를 가지는 원소들의 모듬으로 중복된 원소를 가질 수 있다. 위치를 사용하여 원소에 접근한다.

 

ArrayList클래스 : List 인터페이스의 구현 클래스. 선형구조(데이터를 구조화하는 기본 표현 방식) 배열을 이용해 자료를 관리한다. 순차구조방식, 연결 구조 방식이 있다.기본 생성자로 ArrayList 객체를 생성하면 내부에 10개의 객체를 저장할 수 있는 초기 용량(capacity)을 가지게 된다. 저장되는 객체 수가 늘어나면 용량이 자동 증가. 동일한 데이터도 여러번 저장될 수 있으므로 맨 처음에 있는 데이터의 위치가 반환된다.

 

순차구조 : 항목 간의 논리적인 순서와 메모리에 저장되는 물리적 순서가 같은 구조(배열의 원리와 동일)

 

indexOf(): 특정한 데이터가 저장된 위치를 알 수 있다.

lastIndexOf (): 검색을 반대 방향으로 할 때 사용.

배열: 배열명.length

문자열: 문자열참조변수 또는 "문자".length()

리스트 구현 클래스 : 리스트명.size()

 

ArrayList에 있는 원소에 접근하는 하나의 방법은 반복자를 사용하는 것

반복자: 특별한 타입의 객체로 컬렉션의 원소들에 접근하는 것이 목적으로 객체 집합의 항목들에 차례대로 접근하는데 하용하는 객체

Iterator : 컬렉션에 저장된 데이터의 위치정보를 포함한 커서가 있어서 인덱스 등을 사용하지 않고 쉽게 데이터에 접근할 수 있다.

Collection view : 컬렉션에 저장된 모든 데이터를 순차으로 접근하여 사용할 목적으로 사용하는 Iterator

디폴트 패키지 : 현재 디렉터리. package 선언분이 없이 만들어진 클래스의 패키지

서로 다른 패키지 안에 들어 있는 클래스나 인터페이스를 사용하는 방법

  • 클래스에 패키지 이름을 붙여서 참조 
  • 개별 클래스를 import
  • 전체 클래스를 import : 하나의 패키지 안에 포함된 모든 클래스를 포함하려면 *사용 

JAR 압축 파일(.jar): 클래스 파일은 또한 JAR파일 형태로 저장될 수 있다. JAR 파일은 여러 개의 클래스 파일을 압축하여서 가지고 있다.

 

자바의 기본 패키지는 java로 시작, 확장 패키지는 javax로 시작

모듈: 관련있는 여러개의 자바 패키지를 하나로 묶어 놓은 단위. 모듈을 구성하는 패키지에는 여러 개의 자바 클래스파일(*.class),즉 API가 존재

 

java.base: 모든 모듈이 의존하는 기본모듈로, 이 모듈에 포함되어 있는 패키지는 댜부분의 자바 프로그램에서 않이 사용하는 것들

패키지 기능(설명)
java.io 외부 데이터 입출력을 처리하는 기능
java.lang 프로그램 개발 시 기본적으로 필요한 기능
java.net 네트워크를 위한 클래스와 인터페이스
java.security 보안 프레임워크를 위한 클래스와 인터페이스
java.sql 데이터베이스에 저장된 데이터를 접근하기 위한 기능
java.util 날짜, 시간, 컬렉션 처리에 관한 기능
java.text 날짜와 숫자를 원하는 형태의 문자열로 만들어 주는 포맷 클래스 제공
java.nio 데이터 저장을 위한 Buffer및 새로운 입출력 클래스 제공
java.awt 그래픽과 이미지 관련 기능
java.swing UI 구현 기능

 

java.lang패키지 : 자바 프로그램늬 기본적인 클래스를 담은 패키지, 포함된 클래스와 인터페이스는 import 없이 사용

클래스 설명
Object 클래스 모든 클래스의 최상위 클래스
Math 클래스 각종 수학 메서드(최대값, 최소값, 난수)들을 포함하는 클래스
Wrapper 클래스 기본 자료형(기초형)에 대응된 클래스
기본타입의 데이터를 갖는 객체를 만들 때 사용
문자열을 기본 타입으로 변환할 때 사용
String 클래스 문자열을 저장하고 여러가지 정보를 얻을 때 클래스
System 클래스 표준 입출력 클래스
표준 입력 장치 (키보드)로부터 데이터를 입력 받을 때 사용.
표준 출력 장치(모니터)로 출력하기 위해서 사용
Class 클래스 JVM에 로드된 클래스에 대한 정보를 얻기 위한 클래스
Array 클래스 배열을 조작(비교, 복사, 정렬, 찾기)할 때 사용
Calendar 클래스 운영체제의 날짜와 시간을 얻을 때 사용
Date 클래스 날짜와 시간을 얻을 때 사용
Objects 클래스 객체 비교, 널 여부 등을 조사할 때 사용
StringTokenizer 클래스 특정 문자로 구분된 문자열을 나누고자 할 때 사용
Random 클래스 난수를 얻을 때 사용

Object클래스 : 모든 클래스의 최상위 클래스

protected Object clone() 객체 자신의 복사본을 생성하여 반환한다.
public boolean equals(Object obj) obj가 이 객체와 같은지를 나타낸다.
protected void finalize() 가비지 콜렉터에 의하여 호출된다.
public final Class getClass() 객체의 실행 클래스를 반환한다.
public int hashCode() 객체에 대한 해쉬 코드를 반환한다.
public String toString() 객체의 문자열 표현을 반환한다.

String 클래스 : 자바는 기초 자료형으로 문자열을 지원하지 않는다. 자바에서는 문자열을 클래스형으로 다룬다.

  • String 클래스의 생성자를 사용해서 문자열 객체 생성 : String클래스는 문자열 객체를 생성하면서 상수로 인식.한 번 생성되면 문자열을 수정할 수 없다.
  • 문자열 리터럴을 사용해서 문자열 객체 생성

String pool : 큰따옴표로 생성된 String 인스턴스들이 위치하는 논리적으로 구분된 영역. 만약 String pool에서 생성하려는 문자열과 똑같은 문자열을 가진 String 인스턴스가 있다면 새로 생성하지 않고 기존 인스턴스의 주솟값을 반환한다.

큰따옴표로 생성하면 무조건 인스턴스를 생성하는 것이 아니고 힙 메모리에 고유한 영역인 String pool을 찾아간다.

 

String 클래스의 생성자

생성자 설명
String(String str)  문자열을 갖는 String 객체를 생성한다.
String(char[] value) 문자형 배열을 갖는 String객체를 생성한다.
String(byte[] value) 바이트 배열을 갖는 String 객체를 생성한다.

 

String 클래스 : 사용빈도 높은 메소드

리턴 타입 메서드명(매개변수) 설명
char charAt(int index) 지정된 인데스 위치에 있는 문자를 리턴한다.
boolean equals(Object anObj) 전달받은 문자열(anObj)과 String 객체의 문자열이 같은지 비교해 결과를 리턴한다.
byte[] getBytes() 문자열을 바이트배열(byte[])로 리턴한다.
byte[] getBytes(Charset charset) 주어진 문자셋으로 인코딩한 byte[]로 리턴한다.
int indexOf(String str) 문자열내에서 주어진 문자열의 위치를 리턴한다.(존재하지 않으면 -1을 리턴)
int length() 총 문자의 수를 리턴한다.
String replace(char oldChar, char newChar) 문자열내에서 oldChar를 newChar로 변환하여 리턴한다.
String substring(int beginIndex, int endIndex) 시작인덱스로부터 마지막인덱스 전까지 문자열을 리턴한다.
String toLowerCase() 소문자로 변환한 새로운 문자열을 리턴한다.
String toUpperCase() 대문자로 변환한 새로운 문자열을 리턴한다.
String trim() 앞뒤 공백을 제거한 새로운 문자열을 리턴한다.
String valueOf(int i)
valueOf(double d)
기초 자료형의 값을 문자열로 리턴한다.
String concat(String str) 전달받은 문자열(str)을 해당 메서드를 호출한 String 객체의 문자열 뒤에 합쳐 새로운 문자열을 생성해서 반환한다
String contains(String str) 전달받은 문자열(str)이 String 객체의 문자열에 포함되었는지를 검사한다.
String intern() 문자열을 상수 풀에 등록하고 이미 같은 문자열이 존재하면 해당 문자열의 참조값을 반환한다.

 

바이트 배열로 변환(getBytes()) : 시스템의 기본 문자셋으로 인코딩된 바이트 배열 얻기

[byte[] bytes = "문자열".getBytes(); ]

 

문자열 찾기(indexOf())

  • 매개값으로 주어진 문자열이 시작되는 인덱스 리턴
  • 주어진 문자열이 포함되어 있지 않으면 -1 리턴
  • 특정 문자열이 포함되어 있는지 여부 따라 실행코드 달리할 때 사용

문자열 변환(valueOf()) : 기본 타입의 값을 문자열로 변환

문자열 길이(length()): 공백도 문자에 포함

문자열 대치(replace()): 첫 번째 매개값인 문자열 찾음, 두 번째 매개값인 문자열로 대치

String oldStr = "자바 프로그래밍";
String newStr = oldStr.replace("지바"."JAVA");

문자열 결합 연산자 : +

StringBuffer, StringBuilder

  • StringBuffer 객체에 저장된 문자열은 수정할 수 있다.
  • String 객체와 다르게 StringBuffer 객체는 +연산자를 통해 매번 새로운 String 객체를 생성하지 않고, append()메서드를 통해 String 객체 하나만으로도 문자열을 다룰 수 있다.
  • 버퍼(buffer: 데이더를 임시로 저장하는 메모리, 문자열을 처리하기 위해 확보한 넉넉한 메모리 공간)에 문자열 저장,
  • 버퍼 내부에서 추가, 수정, 삭제 작업 가능
  • 버퍼에서 문자열을 수정하므로 String처럼 새로운 문자열을 만들 필요가 없다.
  • 차이 : 생성된 인스턴스를 동시에 여러 곳에서 접근하여 사용할 때
  • StringBuffer클래스는 동시에 접근하는 상황에 대처할 수 있고, StringBuilder는 대처할 수 없다.
  • 다만 일반적으로 StringBuilder가 더 효율적

capacity() : 버퍼의 크기

length() : 문자열의 길이 수

 

StringBuffer만이 제공하는 가장 중요한 메서드

  • StringBuffer append(String s) : 매개변수로 전달받은 값을 추가한다. 문자열 버퍼의 끝에 여러 종류의 데이터를 추가하는 메서드
  • StringBuffer delete(int start, int end) : 매개변수로 전달받은 인덱스 사이의 문자열 삭제한다.
  • StringBuffer insert(int offset, String str) : 특정 위치에 여러 종류의 데이터를 문자열로 바꾸어 삽입하게 된다.

Math 클래스 : 모든 메서드는 정적 메서드이므로, 객체를 생성하지 않고도 바로 사용할 수 있다.

Math 클래스의 클래스필드

  • Math.E : 오일러 수, 자연로그의 밑 값
  • Math.PI : 원주율

Wrapper(기본형을 참조형으로 추상화하는 과정) 클래스 : 기본형과 참조형간의 형변환을 가능하게 해주는 클래스가 래퍼 클래스. 메소드의 인수로 객체 타입만이 요구되면, 기본타입의 데이터를 그대로 사용할 수는 없다. 이때에는 기본 타입의 데이터를 먼저 객체로  변환한 후 작업을 수행해야 한다.

Wrapper 객체 : 기본 타입 값을 내부에 두고 포장하는 객체

 

Wrapper 클래스는 Wrapper라는 이름의 클래스가 존재하는 것이 아니라 java.lang 패키지에 있는 클래스 중 자바의 기본 데이터 타입과 매핑되는 클래스들을 의미

byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

 

자료형에서 값을 다루는 기본형과 주소를 다루는 참조형간위 형변환을 박싱(boxing)과 언박싱(unboxing)

 

박싱(valueOf())

  • 값을 다루는 기본형 데이터를 잠조형 데이터로 변환하는 것을 의미
  • 메모리에서 변환관점으로 보면 스택에 저장된 값을 힙으로 복사하는 과정 묵시적(자동)으로 이루어진다.
  • 자동박싱(auto-boxing) : 포장 클래스 타입에 기본값이 대입될 경우 발생
Integer iValue;
iValue = 10;
//정수를 자동으로 Integer 객체로 포장

언박싱(기본타입명 + Value())

  • 반대로 힙에 저장된 값을 스택에 복사하는 과정이다. 
  • 힙의 데이터를 기본형으로 변환할 때 언박싱이 일어난다.
  • 자동언박싱(auto-unboxing) : 기본 타입에 포장 객체가 대입될 경우 발생
System.out.println(iValue+1);
//iValue는 자동으로 int형으로 변환

#문자열을 기본 타입 값으로 변환 : parse + 기본타입 명 -> 정적 메소드

int num = Integer.parseInt("10")  //문자열을 int형으로 반환
double num = Double.parseDouble("1.2")  //문자열을 double형으로 반환

문자열 분리 방법 : String의 split() 메서드 사용(정규표현식을 구분자로 해서 부분 문자열 분리, 배열에 저장하고 리턴), java.util.StringTokenizer클래스 이용

문자열을 구분자를 사용해 나누어 준다. 나누어진 문자열을 토큰이라고 한다. 구분자를 지정하지 않으면 공백이 구분자가 된다.

StringTokenizer클래스

생성자 설명
StringTokenizer(String str) 주어진 문자열을 위한 StringTokenizer 객체를 생성한다.
StringTokenizer(String str, String delim) 주어진 문자열을 위한 위한 StringTokenizer 객체를 샹성한다. 분리자로 delim을 사용한다.
StringTokenizer(String str, String delim, boolean returnDelims) 주어진 문자열을 위한 StringTokenizer 객체를 생성한다. 분리자로 delim을 사용한다. 구분자도 토큰으로 포함할지 여부를 나타낸다. 기본값은 false, 출력하지 않는다.
메소드명 설명
int countTokens() 문자열에 존재하는 토큰의 개수를 반환한다.
boolean hasMoreTokens() 나누어진 문자열에서 다음으로 가져올 토큰이 있는지 여부를 검사해서 그 결과를 boolean형으로 반환한다.
String nextToken() 나누어진 문자열에서 다음 토큰을 반환한다.
String nextToken(String delim) 다음 토큰을 반환하고 분리자를 delim으로 변경한다.

java.util 패키지

생성자 설명
Random() 새로운 난수 발생 객체를 생성한다.
메소드명 설명
int nextInt(int n) 0 과 n전까지의 int형의 난수를 발생한다.
double nextDouble() double형의 0.0과 1.0사이의 난수를 발생한다.

Arrays 클래스 : 모든 메서드는 정적 메소드, 객체를 생성하지 않고도 바로 사용 가능

메소드명 설명
static void sort(int[] a) 전달받은 배열의 모든 요소를 오름차순으로 정렬한다.(지정된 int형의 배열을 정렬한다.)
static void fill(int[] a, int val) 주어진 val값을 가지고 배열을 채운다
static boolean equals(int[] a, int[] b) 주어진 두 개의 배열이 같으면 true를 반환한다.
static List asList(Object[] a) 주어진 배열을 고정길이의 리스트로 변환한다.
static int[] copyOf(int[] original, int newLength) 전달받은 배열의 전체 또는 특정 길이만큼을 새로운 배열로 복사하여 반환한다.

Date 클래스 : 날짜를 표현하는 클래스, 날짜 정보를 객체간에 주고 받을 때 주로 사용

Calendar 클래스 : 날짜와 시간에 관한 처리를 하는 추상클래스

[Calendar now = Calendar.getInstance(); ]

오류 : 오작동을 하거나 비정상적으로 종료되는 것

  • 문법적 오류 : 문법이 올바르지 않은 상태
  • 실행 오류 
    • 1.오류(에러) : 시스템이 정상적인 기능을 수행할 수 없게 된 상태(수습불가)
    • 2.예외: 실행 중 예기치 않은 문제가 발생한 상태(수습 가능)
  • 논리적 오류 : 개발자가 원하는 결과가 산출되지 않는 상태

예외 : 사용자의 잘못된 조작 또는 부정확한 데이터 처리 또는 개발자의 잘못된 코딩으로 인한 오류. 자바에서 예외도 하나의 객체

예외 처리 : 미리 코드를 작성해서 대처하는 과정

예외 객체: 오류를 설명하는 객체를 생성하게 되는데 그 객체. 오류정보, 오류의 타입과 오류 발생 시의 프로그램의 상태 등의 정보를 포함. 생성하는 것을 예외를 던진다(throw) 처리하는 것 예외를 잡는다(catch)

 

#예외 처리 코드: 예외 발생 시 프로그램 종료 막고. 정상 실행 유지할 수 있도록 처리

[try{

//예외가 발생할 수 있는 코드

} catch(예외종류 참조변수){

//예외를 처리하는 코드

} finally {

//해당 코드는 try 블록이 끝나면 무조건 실행된다.

}]

try와 catch 블록은 별도의 독립된 블록(try블록에서 정의된 변수는 catch블록에서 사용할 수 없다.)

finally문은 try블록에서 사용했던 자원을 해제하기 위해서 사용.

 

#printStackTrace() : 예외 발생 코드 추적한 내용을 모두 콘솔에 출력

 

모든 예외 객체는 Trowable를 상속받는다. Trowable에 선언된 메서드 중 예외 처리에 자주 사용되는 메서드는 다음과 같다.

제어자 및 타입 메서드 설명
String getMessage() 발생한 예외 객체의 메시지를 추출
void printStackTrace() 예외가 발생하기까지 호출된 순서를 거꾸로 출력
String toString() 발생한 예외 객체를 문자열로 추출
분류 예외 설명
RuntimeException ArithmeticException 어떤 수를 0으로 나눌 때 발생한다.
RuntimeException NullPointerException null 객체를 참조할 때 발생한다.
RuntimeException ClassCastException 적절치 못한 클래스로 형변환하는 경우에 발생한다.
RuntimeException NegativeArraySizeException 배열의 크기가 음수값인 경우 발생한다.
RuntimeException ArrayIndexOutOfBoundsException 배열을 참조하는 인덱스가 잘못된 경우 발생한다.
IOException IOException 파일의 끝을 지나쳐서 읽으려고 하는경우나 잘못된 URL을 사용하는 경우에 발생한다.

#NullPointerException : 객체 참조가 없는 상태

String data = null;
System.out.println(data.length());

#ArrayIndexOutOfBoundsException : 배열에서 인덱스 범위 초과하여 사용할 경우 발생

int[] arr = new arr[5];
arr[5]=100;

#ClassCastException : 타입 변환이 되지 않을 경우 발생

Animal animal = new Dog();
Cat cat = (Cat) animal;

 

Exception 계열 예외는 확인된 예외, 미확인 예외로 분류. 확인된 예외에 대한 에외 처리를 구현하지 않으면 컴파일 시 오류가 발생한다. 확인된 예외는 소스파일이 컴파일될 때 컬파일러가 예외 처리를 했는지 검사하기 때문이다.

예외를 처리할 때 상위 클래스를 이용하면 하위 클래스까지 포괄적으로 처리할 수 있다.

 

다중 catch : 예외 별로 예외 처리 코드 다르게 구현

멀티 catch : 하나의 catch 블록에서 여러 개의 예외 처리 가능. 동일하게 처리하고 싶은 예외를 |로 연결.

 

try-with-resourses

  • 예외 발생여부와 상관 없음.
  • 문장의 끝에서 리소스들이 자동으로 닫혀지게 한다. 사용했던 리소스 객체의 close() 메소드 호출해 리소스 닫는다.

[try(리소스자료형1 참조변수 = new 리소스자료형1();

       리소스자료형2 참조변수 = new 리소스자료형2()){

...

}catch(예외타입 변수){

...

}]

 

메소드 내부에서 처리하지 않고 메소드를 호출할 때 에러를 처리하도록 만드는 기법 : throws(에러 처리츷 미룰 때 사용하는 키워드)를 사용하여, 다른 메서드한테 예외 처리를 맡긴다.

int method(int n) throws IOException{
...
}

#throws : 메서드 선언부 끝에 작성

[리턴타입 메서드명(매개변수) throws 예외클래스1, 예외클래스2{

...

}]

  • 예외처리를 자신이 담당하지 않고 자신을 호출한 쪽으로 던져버리는 방법
  • 메서드 내에서 예외가 발생하면 예외를 자신을 호출한 상위 메서드로 예외를 전달할 수 있다.
  • throws가 선언된 메서드는 메서드를 호출한 곳에서 throws 다음에 선언된 예외들을 처리하도록 위임한다.
  • throws는 메서드를 호출하는 곳의 상황에 맞게 동적인 오류 처리를 하기 위해 사용하는 명령문
  • 메서드에서 처리하지 않은 예외를 호출한 곳으로 떠넘기는 역할

#사용자 정의 예외 클래스 선언 : Exception클래스를 상속 받아야한다.

[class 예외클래스명 extends [Exception | RuntimeException]{

     public 예외클래스명(){ }

     public 예외클래스명(String message){

                super(message);

     }

}]

  • 사용자 정의 예외 객체는 프로그램 내에서 예외 상황과 예외 객체 생성을 처리해주어야한다.
  • 예외 상황은 조건문으로 처리하고 예외 객체 생성은 throw 문으로 할 수 있다.

throw : 예외 객체를 생성해서 강제로 던질 수 있는 예약어, 프로그래머가 의도적으로 예외를 발생시키고자 할 때 사용하는 예약어로 사용자 정의 예외를 만든 후 예외를 사용자가 발생시킬 때 주로 사용

[throw new 예외클래스명();

 throw new 예외클래스명("출력 메시지");]

[public void method() throws 예외클래스명{

      throw new 예외클래스명();

}]

#getMessage() : 예외 발생시킬 때 생성자 매개값으로 사용한 메시지 리턴

[throw new 예외클래스명("출력 메시지");]

}catch(Exception e){
	String message = e.getMessage();
 }

 

추상클래스 개념

추상(abstract) : " 여러 가지 사물이나 개념에서 공통되는 특성이나 속성 따위를 추출하여 파악하는 작용."

 

추상 클래스 : 클래스 선언 시 앞에 abstract,

  • 추상클래스 = 필드 + 일반 메서드 + 추상 메서드
  • 메서드 선언 시 본문을 구현하지 않으면 abstract로 선언(abstract 선언 메서드는 본문X)
  • 추상 메서드를 포함하는 클래스는 선언부에 abstract 명시(추상메서드를 하나라도 포함하면 추상클래스)
  • 실체 클래스(객체를 직접 생성할 수 있는 클래스)들의 공통되는 필드와 메서드 정의한 클래스(부모 클래스 역할 : 단독 객체 X) 
  • 기능이 무엇인지만을 정의하고 어떻게 구현되는지는 정의 하지 않는다.(메소드가 미완성이므로 추상클래스로는 객체(인스턴스)를 생성할 수 없다.)
  • 그래서 하나의 추상클래스에 정의된 기능을 여러 개의 하위클래스에서 서로 다른 형태로 구현하여 사용할 수 있다.(반드시 재정의 해 주어야 한다.)
  • 설계와 구현을 분리한다.(슈퍼 클래스에서는 개념 정의, 각 서브 클래스에서 구체적 행위 구현)
  • 계층적 상속 관계를 갖는 클래스 구조를 만들 때

[접근제어자 abstract class 클래스이름{

        접근제어자 abstract 반환형 추상메서드명();

}]

용도

  • 실체클래스의 공통된 필드와 메소드의 이름 동일할 목적
  • 실체 클래스를 작성할 때 시간 절약(추가적인 필드와 메소드만 선언)
  • 실체 클래스 설계 규격을 만들고자 할 때(필드와 메소드를 추상 클래스에 미리 정의, 추상클래스를 무조건 상속 받아 작성)

추상메소드(몸체가 없어 항상 세미콜론으로 종료)와 오버라이딩 

  • 메소드 이름은 동일하지만, 실행내용이 실체 클래스마다 다른 메소드.
  • 선언되어 있으나 구현되어 있지 않은 메소드 서브클래스에서 오버라이딩하여 구현해야함.
  • 추상클래스에는 메소드의 선언부만 작성(추상메서드)
  • 실체 클래스에서 메서드의 실행 내용 작성(오버라이딩)

추상클래스 종류

  1. 추상 메서드를 하나라도 가진 클래스 클래스 앞에 abstract
  2. 추상 메서드가 하나도 없지만 abstract로 선언된 클래스

다형성 : 동일한 부모 클래스에서 상속된 서브 클래스의 객체들을 하나의 타입으로 취급할 수 있게 해준다. 따라서 서로 다른 타입들을 받아서 하나의 코드로 처리할 수 있다. 상속관계에서는 부모 타입의 변수에 모든 자식 객체를 대입해 이용할 수 있다. 하나의 타입에 여러 객체를 대입할 수 있다는 의미.(다양한 실행 결과를 얻는 것) 다형성은 코드 구조가 향상되고 가독성을 증가시키며, 가능한 프로그램을 작성하는 객체지향의 중요한 개념 중의 하나. 메소드의 매개변수로 사용(유지보수 용이)

 

구현기술 : 상속 또는 인터페이스의 자동 타입 변환, 오버라이딩

 

#업캐스팅 

[슈퍼클래스참조변수 = new 서브클래스생성자(); ]

  • 상위클래스로 형변환
  • 컴파일러에 의해 자동으로 형변환된다.
  • 업캐스팅이 된 이후 상위 클래스형의 참조변수는 상위 클래스로부터 상속받은 멤버만 호출할 수 있다.
  • 업캐스팅이 되더라도 하위 클래스에서 재정의된 메서드는 참조할 수 있고. 상위 클래스로부터 상속받은 메서드는 은닉된다.

#다운캐스팅(강제타입변환) : 부모타입을 자식 타입으로 변환하는 것, 서브 클래스 참조 변수로 슈퍼 클래스 객체를 참조하는 것으로 본다면 컴파일 오류가 발생. //자식 타입을 부모 타입으로 자동 변환 후, 다시 자식 타입으로 변환할 때

[자식클래스참조변수 = (자식클래스)부모클래스타입; ]

  • 하위클래스 = 상위클래스
  • 하위 클래스로 형변환
  • 컴파일러에 의해 자동으로 형변환 X
  • 참조 가능한 영역이 확대되는 의리를 갖는다.

 

package practice;
class A{
	int a = 10;
	
	void b() {
		System.out.println("A");
	}
}

class AA extends A{
	int a = 20;
	@Override
	void b() {
		System.out.println("AA");
		
	}
	
	void c () {
		System.out.println("C");
	}
}

class BB extends A{
	int a = 30;
	
	@Override
	void b() {
		System.out.println("BB");
	}
	
	void d() {
		System.out.println("D");
	}
}

public class ClassTest {
	public static void main(String args[]) {
		A z = new AA(); //AA객체를 생성해서 A 타입의 레퍼런스에 할당한다. 업캐스팅(자식클래스를 부모클래스로)
		System.out.println(z.a); //슈퍼 클래스의 필드 접근
		z.b();//슈퍼 클래스의 메소드 접근. 단 서브클래스에서 메서드 오버라이딩되면 오버라이딩 메서드가 우선접근.
		//z.c(); A에는 c 메소드가 없음.
		
		((AA)z).c();//서브클래스의 메서드 접근
		System.out.println(((AA)z).a);//서브클래스의 필드 접근
		
		AA a1 = (AA)z;
		System.out.println(a1.a);//서브클래스의 필드 접근
		a1.c();
		
		z= new BB(); //업캐스팅. 슈퍼클래스참조변수= new 서브클래스의 생성자()
		System.out.println(z.a);
		z.b();
		((BB)z).d();
		System.out.println(((BB)z).a);
		
		BB b1 = (BB)z; //다운 캐스팅
		b1.d();
		System.out.println(b1.a);
		
	}

}

 

package practice;

class Shape{
	public void draw() {
		System.out.println("Shape");
	}
}

class Line extends Shape{
	@Override
	public void draw() {
		System.out.println("Line");
	}
}

public class MethodOverridingExample {
	public static void paint(Shape p) {
		p.draw();
	}
	
	public static void main(String args[]) {
		Line line = new Line();
		paint(line);//Line.draw
		
		paint(new Shape());
		paint(new Line());
		
	}

}

객체의 타입을 알아내는 방법 : 객체가 특정 클래스로부터 생성된(상속된) 객체인지를 판별하기 위해 사용할 수 있는 연산자가 instanceof. 반환값. true, false

[참조변수 instanceof 클래스명]

 


#인터페이스: 여러 프로그램네서 사용할 멤버(필드, 메서드)를 일관되게 하기 위한 기술 명세, 표준규격을 나타냄 인터페이스 변경시키려면 이 인터페이스를 구현하였던 모든 클래스가 동작하지 않게 된다. 이런 경우를 대비하여서 인터페이스도 상속을 받아서 확장시킬 수 있도록 한다.

[public interface 인터페이스명{

    ( public static final) 자료형 변수명 = 값 ;  //인터페이스에 선언된 필드는 모두 상수이기 때문에 생략가능

      (public abstract) 반환형 메서드명1();   //추상메서드만 정의할 수 있기에 생략가능

      public abstract 반환형 메서드명2();

}

접근제어자 interface 인터페이스명{

     (접근제어자 제어자 ) 자료형 변수명 = 값 ;  //인터페이스에 선언된 필드는 모두 상수이기 때문에 생략가능

      (접근제어자 제어자) 반환형 메서드명1();   //추상메서드만 정의할 수 있기에 생략가능

      public abstract 반환형 메서드명2();

}

]

  • 추상메소드와 상수(객체를 생성할 수 없는 인터페이스에서 필드를 선언한다는 것은 객체 생성과 관계없이 사용할 수 있는 static으로 선언 데이터 저장하지 않음)로 이루어짐. 상수명은 대문자로 작성.선언과 동시에 초기값 지정
  • 메서드를 미리 선언(어떻게 입력 받고 어떤 결과값을 반환할 것이라는 사용법)
  • 구현은 비워 놓은 추상 메서드로 만든다. 메서드의 헤더를 선언.
  • 인터페이스에는 필드(멤버변수) 선언불가

#구현 클래스 선언 : 메서드의 선언부가 정확히 일치 해야한다.

[public class 클래스명 implements 인터페이스명{

         반환형 추상메서드1(){//재정의

         }

         반환형 추상메서드2(){//재정의

         }

}] 

#디폴트 메소드 선언 : 인터페이스를 구현하는 클래스에 자동 상속되는 메소드, default 키워드를 반드시 붙여야한다. 기본적으로 public 접근제한

[public default 리턴타입 메서드명(매개변수,...){...}]

#정적 메서드 선언 : 인스턴스 생성과 상관없이 바로 사용할 수 있다. 인타페이스를 구현하고 있는 모든 객체에서 자주 사용하는 유용한 기능을 제공하는데 있다.

[public static 리턴타입 메서드명(매개변수, ...){...}]

#private 메소드 선언 : 외부접근 제한, default 메서드에서만 사용할 목적으로 본문을 구현

[private 리턴타입 메서드명(매개변수,...){...}]

  일반 클래스 추상 클래스 인터페이스
매서드의 재정의 선택적 강제적 강제적
상속, 구현시 예약어 extends extends implements
필드 선언 가능 여부 가능 가능 불가능
상수 선언 가능 여부 가능 가능 가능
생성자 선언 여부 가능 가능 불가능
추상 메서드 포함 여부 불포함 포함 포함
객체 생성 가능 여부 가능 불가능 불가능
다중 상속 가능 여부 불가능 불가능 가능

내부클래스: 클래스 멤버로 선언된 클래스<클래스 생성 시 바이트 코드 따로 생성>

멤버 클래스 인스턴스 멤버 클래스 class outer{
      class inner{...}                  
}
outer객체를 생성해야만 사용할 수 있는 inner 내부 클래스
멤버 클래스 정적 멤버 클래스 class outer{
  static class inner{...}
}
outer 클래스로 바로 접근할 수 있는 inner 내부 클래스
멤버 클래스 바이트코드 파일의 이름 외부 클래스명$내부클래스.class  
로컬 클래스 class outer{
  void method(){
     class inner{...}
   }
}
method()가 실행할 때만 사용할 수 있는 inner 중첩 클래스
로컬 클래스 바이트코드 파일의 이름 외부 클래스명$1내부클래스.class
  • 클래스가 여러 클래스와 관계를 맺는 경우에는 독립적으로 선언하는 것이 좋으나, 특정(하나의) 클래스와 관계를 맺을 경우에는 관계 클래스를 클래스 내부에 선언하는 것이 좋다.
  • 내부 클래스를 사용하면 두 클래스의 멤버들을 서로 쉽게 접근할 수 있다.
  • 외부에는 불필요한 관계 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있다.(하나의 장소에서만 사용되는 클래스들을 한 곳에 모을 수 있다.)

#인스턴스 멤버 클래스(non-static 내부 클래스) : 내부 클래스의 멤버들은 static이 될수 없다.

[접근제어자 class 외부클래스명{

     [public | private: 외부 클래스 내부에서 접근가능] class 내부클래스명{

      }

}]

#정적 멤버 클래스(static 내부 클래스): 내부 클래스는 외부 클래스의 일반멤버 변수는 참조할 수 없다. 정적멤버 클래스는 주로 default or public 접근 제한을 가짐

[접근제어자 class 외부클래스명{

      [public | private: 외부 클래스 내부에서 접근가능] static class 내부클래스명{

      }

 }]

지역 내부 클래스(로컬클래스): 외부 클래스의 메서드에서 사용하기 위해 메서드 내에 선언하는 내부 클래스

  • 생성자 또는 메소드 내부에 선언된 클래스를 늬미하며 생성자와 메소드가 실행될 동안에만 객체를  생성할 수 있다.
  • 보통 메소드 내부에 선언하여 사용하며, 메소드의 실행이 끝나는 순간 메소드의 모든 멤버가 사라진다.
  • 로컬 클래스 내부에는 필드, 생성자, 메서드 선언이 올 수 있으며 정적 필드와 정적 메서드는 JDK17부터 선언이 가능하다.

내부 인터페이스: 클래스 멤버로 선언된 인터페이스

#무명(익명) 클래스 : 클래스 몸체는 정의되지만 이름이 없는 클래스, 정의부와 생성부가 하나로 묶여 있는 클래스로 선언과 동시에 객체가 생성된다. 한번만 사용하며 재참조가 불가능, 하나의 객체만을 생성하는 일회용 클래스 

[new 상위클래스(일반클래스,추상클래스, 인터페이스 모두가능)명(생성자 매개변수){  }]

#명시적인 구현 클래스 작성 생략하고 바로 구현 객체를 얻는 방법(이름 없는 구현 클래스 선언과 동시에 객체 샹성)

[인터페이스 참조형 = new 인텨페이스(){

인터페이스에 선언된 추상 메서드의 실체 메서드 선언

}]

+ Recent posts