작성 : 2024. 4. 19.

 

포지셔닝에 대해

• position속성 — 다른 박스 내부에 있는 박스의 배치를 정밀하게 제어할 수 있습니다. 일반 흐름에서는 정적(static) 포지셔닝이 기본값이지만, 브라우저 뷰포트에 고정하는 등 다른 값을 사용하여 요소를 다르게 배치할 수 있습니다.

출저) 

 

CSS 레이아웃 입문서 - Web 개발 학습하기 | MDN

이 문서에서는 이전 모듈에서 이미 다뤘던 CSS 레이아웃 기능, 예를 들어 다양한 display 속성값의 차이 등을 복습하고, 이번 과정에서 다룰 몇 가지 CSS 개념을 소개합니다.

developer.mozilla.org

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>

        /* position 속성 : 요소가 움직이기 위한 기준점
        1. static : 인라인, 블럭 
        - 정적 포지셔닝, 기본값으로 부여된 속성
        2. relative : 다른 요소를 기준점
        - 상대 포지셔님으로 현재 자신의 위치, 상대적으로 이동, 부모요소 중 하나를 기준점으로 삼는다.
        3. absolute : 브라우저가 기본점, 한 위치를 고정
        - 절대 포지셔님
        4. fixed : 브라우저 뷰포트를 기준
        - 고정 포지셔닝

        top, left, right. bottom 속성은 요소를 이동 */

        *{
            margin: 0; 
            padding: 0;
        }

        p{
            width: 300px;
            border: 1px solid #ccc;
            padding: 10px;
        }

        #pos1{
            position: absolute;
            left: 50px;
            top: 50px;
        }

        #pos2{
            position: absolute;
            right: 100px;
            top: 50px;
        }

        #pos3{
            position: absolute;
            left: 100px;
            bottom: 100px;
        }

    </style>
</head>
<body>
    <p id="pos1">Ex et adipisicing voluptate aliqua cupidatat nulla. Laboris est sint sit aliqua enim. Aute Lorem eu sint aute sunt proident. Do culpa consectetur elit duis laboris reprehenderit incididunt nulla. Irure exercitation tempor aliqua laboris cupidatat anim in non officia aliquip excepteur fugiat labore.</p>
    <p id="pos2">Ex et adipisicing voluptate aliqua cupidatat nulla. Laboris est sint sit aliqua enim. Aute Lorem eu sint aute sunt proident. Do culpa consectetur elit duis laboris reprehenderit incididunt nulla. Irure exercitation tempor aliqua laboris cupidatat anim in non officia aliquip excepteur fugiat labore.</p>
    <p id="pos3">Ex et adipisicing voluptate aliqua cupidatat nulla. Laboris est sint sit aliqua enim. Aute Lorem eu sint aute sunt proident. Do culpa consectetur elit duis laboris reprehenderit incididunt nulla. Irure exercitation tempor aliqua laboris cupidatat anim in non officia aliquip excepteur fugiat labore.</p>
</body>
</html>

 

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        p{
            width: 500px;
            height: 200px;
            background-color: rgb(245, 245, 196);
            border: 1px solid #ccc;
            line-height: 2;
        }

        #static{
            position: static;
        }

        #relative-1{
            position: relative;
        }

        #relative-2{
            position: relative;
            left: 100px;
            top:-50px;
        }

        #fixed{
            width: 100px;
            height: 100px;
            background-color: cornflowerblue;
            position: fixed;
            right: 30px;
            top: 30px;
        }


    </style>
</head>
<body>
    <p id="static">Ex et adipisicing voluptate aliqua cupidatat nulla. Laboris est sint sit aliqua enim. Aute Lorem eu sint aute sunt proident. Do culpa consectetur elit duis laboris reprehenderit incididunt nulla. Irure exercitation tempor aliqua laboris cupidatat anim in non officia aliquip excepteur fugiat labore.</p>
    <p id="relative-1">Ex et adipisicing voluptate aliqua cupidatat nulla. Laboris est sint sit aliqua enim. Aute Lorem eu sint aute sunt proident. Do culpa consectetur elit duis laboris reprehenderit incididunt nulla. Irure exercitation tempor aliqua laboris cupidatat anim in non officia aliquip excepteur fugiat labore.</p>
    <p id="relative-2">Ex et adipisicing voluptate aliqua cupidatat nulla. Laboris est sint sit aliqua enim. Aute Lorem eu sint aute sunt proident. Do culpa consectetur elit duis laboris reprehenderit incididunt nulla. Irure exercitation tempor aliqua laboris cupidatat anim in non officia aliquip excepteur fugiat labore.</p>
    <p id="fixed"></p>
</body>
</html>

화면을 움직여도 변화가 전혀 없는 파란박스 → 고정 포지셔닝

 

 

포지셔닝을 알아보기 위한 예제

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link  rel="stylesheet" href="css/position-2.css">
</head>
<body>
    <div id="contents">
        <h1>CSS3</h1>
    </div>
</body>
</html>
*{
    box-sizing: border-box;
    margin: 0;
    padding: 0;
}

#contents{
    background-image: url("../images/bg.jpg");
    background-size: cover;
    width: 800px;
    height: 500px;
    margin: 0 auto;
    position: relative; /*부모요소가 자식의 기준점이 되려면 부모는 반드시 포지션 relative해야 함.*/
    top: 20px;
}

h1{
    color: white;
    font-size: 120px;
    position: absolute; /*자식은 부모를 기준으로 이동하기 위해서 포지션 absolute 해야한다.*/
    /*relative를 해도 된다!*/
    text-shadow: 3px 3px 0 #000;
    right: 100px;
    bottom: 100px;
}

 

 

 

  • 포지셔닝 연습문제
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link  rel="stylesheet" href="css/positionTest01.css">
</head>
<body>
    <div id="contents1">
        <div id="content1"></div>
        <div id="content2"></div>
        <div id="content3"></div>
        <div id="content4"></div>
        <div id="content5"></div>
    </div>
</body>
</html>
*{
    box-sizing: border-box;
    margin: 0;
    padding: 0;
}

#contents1{
    background-color: dimgrey;
    background-size: cover;
    width: 600px;
    height: 600px;
    margin: 0 auto;
    position: relative; /*부모요소가 자식의 기준점이 되려면 부모는 반드시 포지션 relative해야 함.*/
    top: 20px;
}     

#content1{
    background-color:aliceblue;
    width: 100px;
    height: 100px;
    position: absolute;
    right: 50px;
    bottom: 50px;
}

#content2{
    background-color:aliceblue;
    width: 100px;
    height: 100px;
    position: absolute;
    right: 50px;
    top: 50px;
}

#content3{
    background-color:aliceblue;
    width: 100px;
    height: 100px;
    position: absolute;
    left: 50px;
    top: 50px;
}

#content4{
    background-color:aliceblue;
    width: 100px;
    height: 100px;
    position: absolute;
    left: 50px;
    bottom: 50px;
}

#content5{
    background-color:aliceblue;
    width: 100px;
    height: 100px;
    position: absolute;
    left: 250px;
    bottom: 260px;
}

원하는 모양으로 출력이 되었다! (완.)

 

 

동적 효과

      /* transform 속성값 */

         밀기 
         
         #movex:hover{
            transform: translateX(50px);
         }

         #movey:hover{
            transform: translateY(50px);
         }

         #movexy:hover{
            transform: translate(50px, 50px);
         }
         
         
         크기변화
         
          #movex:hover{
            transform: scaleX(2);
         }

         #movey:hover{
            transform: scaleY(2);
         }

         #movexy:hover{
            transform: scale(0.7);
         }
         
         
         돌리기
         
         #movex:hover{
            transform: rotate(40deg);
         }

         #movey:hover{
            transform: rotate(-40deg);
         }

 

 

예제코드 1) 원하는 시간에 맞춰 크기 변화 시키기

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            .box {
                margin: 20px auto;
                width: 100px;
                height: 100px;
                background-color: #07f;
                border: 1px solid #222;
                transition-property: width, height;
                transition-duration: 3s, 1s;
            }

            .box:hover {
                width: 200px;
                height: 120px;
            }
        </style>
    </head>
    <body>
        <div class="box"></div>
    </body>
</html>

 

 

예제코드 2) 돌리고 색깔 바꾸고

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box {
            margin: 50px auto;
            width: 100px;
            height: 100px;
            background-color: #07f;
            border: 1px solid #222;
            transition: 2s;
        }

        .box:hover {
            width: 200px;
            height: 200px;
            background-color: thistle;
            transform: rotate(270deg)
        }
        
    </style>
</head>
<body>
    <div class="box"></div>
</body>

 

 

예제코드 3) 마우스를 올리면 배경색과 글자색이 바뀜

그 안에서 선택적으로 태그를 가지고 오는 방법 알아보기 (last-child 를 쓰는 법)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>움직임 표현하기</title>
    <style>
        *{
            box-sizing: border-box;
            color: white;
        }

        .top-menu{
            width: 606px;
            height: 35px;
            margin: 50px auto;
            padding: 0;
            list-style: none;
            background-color: dimgrey;
        }

        .top-menu li{
            float: left;
            border-right: 1px solid rgba(255, 255, 255, 0.539);
        }

        .top-menu li a:link{
            color: springgreen;
            text-decoration: none;
            text-align: center;
            display: block;
            width: 100px;
            height: 35px;
            line-height: 35px;
        }

        .top-menu li a:visited{
            color: rgb(128, 195, 162);
        }
           
        .top-menu li:not(:last-child) a:hover{
            background-color: rgb(247, 149, 131);
            color: white;
        }

        .top-menu li:last-child a:hover{
            background-color: tomato;
            color: white;
        }


    </style>
</head>
<body>
    <ul class="top-menu">
        <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>
        <li><a href="#">메뉴6</a></li>
    </ul>
</body>
</html>

 

 

배운것을 종합해 만들어 보자

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>CSS3 애니메이션</title>
  <link rel="stylesheet" href="css/product.css">
</head>
<body>
   <div id="container">
    <h1>신상품 목록</h1>
      <ul class="prod-list">
      <li>
        <img src="images/prod1.jpg">
        <div class="caption">
          <h2>상품 1</h2>
          <p>상품 1 설명 텍스트</p>
          <p>가격 : 12,345원</p>
        </div>
      </li>
      <li>
        <img src="images/prod2.jpg">
        <div class="caption">
          <h2>상품 2</h2>
          <p>상품 2 설명 텍스트</p>
          <p>가격 : 12,345원</p>
        </div>
      </li>
      <li>
        <img src="images/prod3.jpg">
        <div class="caption">
          <h2>상품 3</h2>
          <p>상품 3 설명 텍스트</p>
          <p>가격 : 12,345원</p>
        </div>
      </li>
    </ul>
   </div>
</body>
</html>
#container{
    width: 1000px; /* 전체 크기 조정 */
    margin: 20px auto; /* 배경 여백 얼마나 띄울지 */
}

h1{
    text-align: center; /* 가운데 정렬 */
}

.prod-list{
    list-style: none; /* li 태그에서 자동으로 생기는 동그라미가 없어짐 */
    padding: 0;
}

.prod-list li{ /* 이미지와 내용 부분 */
    float: left; /* 가로 정렬 */
    padding: 0;
    margin: 10px; /* 10px 여백 지정 */
    overflow: hidden; /* 이미지 가로 세로 길이보다 넘치는 부분을 감추기 위해 작성 */
    position: relative; /* 부모요소가 자식의 기준점이 되려면 부모는 반드시 포지션 relative해야 함. */
} 

.prod-list img{
    margin: 0;
    padding: 0;
    float: left; /* 자식이 float 할 때 높이가 무너지는 일이 발생, 때문에 부모도 float을 줌 */
    z-index: 5; /* 나중에 이미지가 많아졌을 때 겹치는 것을 방지, 제일 큰 인덱스 번호가 앞으로 나오게 됨 */
}

.prod-list .caption{ /* 내용 */
    position: absolute; /* 자식은 부모를 기준으로 이동하기 위해서 포지션 absolute 해야한다. */
    top: 200px;
    width: 300px;
    height: 200px;
    padding-top: 20px;
    background: rgba(0, 0, 0, 0.6);  
    opacity: 0; /* 투명도 */
    transition: all 0.6s ease-in; /* ease-in 만들어질 때 속도와 사라질 떄 속도 같게 */ 
    z-index: 10;
}

.prod-list li:hover .caption{
    opacity: 1; /* 마우스를 올렸을 때의 투명도 */
    transform: translateY(-200px);
}

.prod-list .caption h2, .prod-list .caption p{
    color: white;
    text-align: center;
}

 

실행화면)

 

✔️ 자식이 float 할 때 높이가 무너지는 일이 발생함, 해결 방법 3가지

1. 오버플로우

2. 하이트 속성(높이값조절)

3. 부모도 float

4. 아니면 부모도 overflow: hidden

 

 

+ 추가적으로 내가 공부한 것들

cursor 속성

 

개요

cursor 속성을 이용하면 해당 태그 위에 위치하는 마우스 커서의 모양을 바꿀 수 있습니다.

  • auto: 자동
  • default: 기본값 (화살표)
  • pointer: 손가락 모양 (클릭 가능한 버튼)
  • wait: 로딩

 

출저)

 

CSS cursor 속성 - ofcourse

개요 cursor 속성을 이용하면 해당 태그 위에 위치하는 마우스 커서의 모양을 바꿀 수 있습니다. auto: 자동 default: 기본값 (화살표) pointer: 손가락 모양 (클릭 가능한 버튼) wait: 로딩 등 다양한 종류

ofcourse.kr

 

 

transition

마우스를 올렸을 경우 부드러운 효과를 주고 싶을 경우에는 transition 속성을 이해 하면 됩니다.

	ul>li>a{
		transition: 0.4s ease;
		-moz-transition: 0.4s ease;			/* 파이어폭스*/
		-o-transition: 0.4s ease;			/* 오페라 */
		-ms-transition: 0.4s ease;			/* 익스플로어 */
		-webkit-transition: 0.4s ease;}		/*모든 브라우저 */

 

작성 : 2024. 4. 18.

 

선택자들

 

  • 하위선택자
 div p,h1 {
            color: blue;
        }

       div h1 {
            color: blueviolet;
        }

       div p {
            color: rgb(200, 78, 169);
        }

 

  • 자식선택자
	div > p,h1 {
                color: rgb(53, 152, 79);
            }

 

  • 인접선택자
            /* 첫번째 동생찾기 */
            h1 + p { 
                color: chartreuse;
            }

            /* 동생들 찾기 */
            h1 ~ p {
                color: cornflowerblue;
            }

 

  • 속성선택자
      		a[href] {
                color: rgb(241, 72, 72);
            }

            a[target="_blank"] {
                color: rgb(229, 142, 202);
            }

            [class ~= "button"] {
                color: rgb(103, 150, 207);
            }
            
            /* '속성의 이름이 eng로 시작하는' 이라는 의미 */
            a[title ^= "eng"] {
                color: cadetblue;
            }

            /* '속성의 이름이 ese로 끝나는' 이라는 의미 */
            a[title $= "ese"] {
                color: red;
            }

            /* '속성의 이름에 e가 들어가는' 이라는 의미 */
            a[title *= "e"] {
                color: darksalmon;
            }

 

  • 가상선택자
			/* 가상클래스와 가상요소 */
            /* 이것을 사용하지 않으면 해결하기 쉽지않은 것들이 있어 잘 알아둬야 함. */
            a:link{
                text-decoration: none;
            }
            /* 가상선택자 hover */
            a:hover{
                text-decoration: underline;
            }

            a:active{
                color: aqua;
            }

            a:visited{
                color: darkgray;
            }

            p:hover{
                color: rgb(61, 165, 130);
            }

            ul li input:checked + label{
                color: gold;
            }

 

  • 구조선택자에 대해서
            /* 구조선택자 */
            /* 특정위치에 있는 요소(태그)를 찾는 방법 */
            /* 특정위치에 자식요소 선택자를 찾는 방법 */
            .contents :nth-child(3) {
                color: cadetblue;
            }

            .contents p:nth-of-type(3) {
                color: rgb(26, 215, 26);
            }

            ul li{
                list-style-type: none;
                float: left;
            }

            /* 예를 들어 짝수만 선택해서 디자인해야한다 했을 때 구조를 이용해 선택할 수 있는 방법 */
            ul li:nth-child(2n) {
                background-color: blue;
            }

            ul li:nth-child(2n+1) {
                background-color: rgb(160, 160, 248);
            }

 

 

  • 구조선택자

코드 :

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>가상 요소</title>
        <style>
            .container {
                width: 960px;
                margin: 0 auto;
            }
            ul li {
                margin: 15px;
            }

            li.new2::after {
                content: "NEW!!";
                font-size: x-small;
                padding: 2px 4px;
                margin: 0 10px;
                border-radius: 2px;
                background: #f00;
                color: #fff;
            }

            /* li.new에 이런 내용이 있으면 after를 적용해라 */
            li.new::before {
                content: "NEW!!";
                font-size: x-small;
                padding: 2px 4px;
                margin: 0 10px;
                border-radius: 2px;
                background: #f00;
                color: #fff;
            }

        </style>
    </head>

    <body>
        <div class="container">
            <h1>제품 목록</h1>
            <ul>
                <li class="new">제품 A</li>
                <li class="new2">제품 B</li>
                <li class="new2">제품 C</li>
                <li class="new">제품 D</li>
            </ul>
        </div>
    </body>
</html>

 

 

폰트 속성에 대하여

CSS는 단위를 붙여주지 않으면 실행이 안됨!

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>font 속성</title>
        <link rel="preconnect" href="https://fonts.googleapis.com">
        <link
            rel="preconnect"
            href="https://fonts.gstatic.com"
            crossorigin="crossorigin">
        <link
            href="https://fonts.googleapis.com/css2?family=Kirang+Haerang&display=swap"
            rel="stylesheet">
        <style>

            body {
                /* 절대크기 : px, pt */
                /* 상대크기 : %, em */
                font-size: 24px;
            }

            h1 {
                /* 색 지정 방식 4가지
                1. 직접 색을 넣어주기 
                2. 16진수 표기법
                3. rgb()함수 사용법
                4. rgma() rgv에 투명도 추가   */
                font-family: Arial, Helvetica, sans-serif;
                /* color: rgb(186, 99, 206); */
                /* color:#86E57F */
                color:rgb(94, 163, 107,0.4); 
                /* 레드, 그린, 블루, 투명도 */
            }

            p {
                font-weight: bold;
                font-style: italic;

            }

            .kirang-haerang-regular {
                font-family: "Kirang Haerang", system-ui;
                font-weight: 400;
                font-style: normal;
            }

            h2 {
                font-family: "Kirang Haerang", system-ui;
                font-weight: 400;
                font-style: normal;
            }
        </style>
    </head>
    <body>
        <h1>폰트를 넣고, 다루는 법</h1>
        <p>이걸 웹폰트라고 합니다</p>
        <h2>어디에서나 동일한 글씨체로 볼 수 있어요</h2>
        <h2 class="kirang-haerang-regular">클래스명을 글꼴명으로 바꾸기</h2>
    </body>
</html>

 

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .link1 {
            text-decoration: none;
        }
        .link2 {
            text-decoration:overline;
        }
        .link3 {
            text-decoration:line-through;
        }
        .link4 {
            text-decoration:underline;
        }

    </style>
</head>
<body>
    <a href="http://WWW.naver.com" class="link1">밑줄선을 없애준다</a><br>
    <a href="http://WWW.naver.com" class="link2">글씨위에 선을 긋는다</a><br>
    <a href="http://WWW.naver.com" class="link3">글씨에 선을 관통한다</a><br>
    <a href="http://WWW.naver.com" class="link4">밑줄선을 긋는다</a><br>
</body>
</html>

 

 

  • 목록의 모양 바꾸기
        ul {
            /* 목록의 모양을 없애는 태그 */
            list-style-type:none;
        }

        ol {
            /* 목록의 모양을 지정하는 태그 */
            list-style-type:lower-roman;
        }

 

 

  • 테이블을 꾸미는 방법
table,td {
            border: 1px solid blue;/* border: 굵기, 선종류, 선의 색깔; */
            width: 250px;
            height: 80px;
            border-collapse: collapse;
            caption-side: bottom;
        }

 

디자인 연습에 들어가기 앞서,

디자인 할 때 큰 클을 먼저 잡아두고, 디자인에 들어가야 함.

내용 → 코드분석 → 크기 → 정렬 등 배치가 끝나는 것이 첫 번째!

 

 

  • 디자인 연습문제

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>맛좋은사과팔아요</title>
    <style>
        #container{
            width: 650px;
            margin: 0 auto;
            padding: 5px;
        }

        #check{
            width: 640px;
            border: 1px solid #ccc;
        }

        h1{
            color: white;
            background-color: rgba(0, 0, 0, 0.678);
            font-size: 1em;  /* 1em == 100% */
            margin: 0;
            padding: 10px;
        }

        h2{
            color: rgb(244, 51, 51);
            font-size: 1.5em;
            text-align: center;
        }

        p{
            text-align: center;
            font-size: 1.2em;
            line-height: 2em;
            font-weight: bold;
        }

        .accent{
            color: rgb(84, 84, 239);
        }

        .smalltext{
            font-size: 0.7em;
            color: white;
            background-color: darkgray;
            padding: 7px;
        }

    </style>
</head>
<body>
    <div id="container">
        <img src="images/top.jpg" alt="가정용 꿀사과 - 흠집이 있고 약간은 못생겼지만 맛과 영양은 그대로입니다. 질좋은 사과를 저렴하게 즐겨보세요">      
        <div id="check">
           <h1>확인하세요</h1>
           <h2>주문 및 배송</h2>
           <p><span class="accent">오후 2시 이전</span> 주문건은 당일 발송합니다<br>
           2시 이후 주문건은 다음날 발송합니다(주말 제외)</p>
           <hr>
           <h2>교환 및 환불</h2>
           <p>불만족시 <span class="accent">100% 환불</span>해 드립니다<br>
           고객센터로 전화주세요</p>
           <hr>
           <h2>고객센터 </h2>
           <p>0000-0000<br>
           <span class="smalltext">상담시간 : 오전 9시 ~ 오후 6시 (토/일, 공휴일 휴무)</span></p>
        </div>
     </div>
</body>
</html>

 

 

  • 박스모델에 대하여

                                                                                                                                                  높이는 height

width 와 height → 기본 콘텐츠값

 

박스에 대해 알아보기 위해 여러 박스를 만들었다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* div { */
            /* border: 2px dashed #000; */
            /* border-color:aquamarine */
            /* border-top: 2px; */
            /* border-style:solid; */ */
        /* } */

        /* .box1{
            box-sizing: border-box;
            width: 400px;
            height: 100px;
            border-top: 2px solid #b32a2a;
        }

        .box2{
            width: 50%;
            height: 100px;
            border-top: 2px solid #b32a2a;
        } */

        /* .round {
            border-radius: 200px 200px 200px 0;
        } */

        div {
            width: 250px;
            height: 150px;
        }

        .box1{
            background-color: rgb(151, 240, 163);
            margin: 20px 100px;
            padding: 20px;
        }

        .box2{
            background-color: rgb(249, 234, 246);
            margin: 50px;
            padding: 50px;
        }

        .box3{
            box-sizing: border-box;
            background-color: rgb(193, 235, 247);
            margin: 30px;
            padding: 20px 60px;
        }

    </style>
</head>
<body>
    <div class="box1">box1</div>
    <div class="box2">box1</div>
    <div class="box3">box1</div>

    <!-- <image src="images/cat.jpg"></image>
    <br>
    <image src="images/cat.jpg" class="round"></image> -->
    <!-- <div class="box1"></div>
    <div class="box2"></div> -->
</body>
</html>

 

 

 

 

display에 대해 알아봅니다

 

 

  • display 속성과 float

아래 화면은 display 속성에서 인라인과 블록의 차이를 알기 위해 구현해본 것

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* displsy속성
        1. 요소를 화면에 숨기거나 나타냅니다
        2. 요소의 성질을 변경
        - inline
        - inline-block
        - block
         */

        /* 요소(배체속성)
        1. 인라인 요소 : 내용의 길이가 요소의 기본 크기
        - span, img, input ... 
        - width, height, margin(좌우는 가능), padding(좌우는 가능) 등 속성 사용 불가
        2. 블럭 요소 : 무조건 한 행을 크기로 사용한다 
        - p, h1, div ... */

        /* 대표적인 블럭태그 */
        p {
            width: 200px;
            height: 200px;
            background-color: rgb(219, 246, 196);
            display: block;  /* none */
        }

        /* 대표적인 인라인태그 */
        span {
            display: inline-block;  /* 블록으로 처리하면 다 바뀔 수 있음 */
            width: 200px;
            height: 200px;
            margin: 50px 50px;
            background-color: antiquewhite;
        }

    </style>
</head>
<body>
    <p>내용1</p>
    <span>내용2</span>
    <span>내용3</span>
    <p>내용1</p>
</body>
</html>

 

 

  • float 속성

아래는 float 속성을 알기 위한 예제

       /* float 속성이란 
        - 배치하는 속성
        1. 요소를 왼쪽 또는 오른쪽으로 배치
        - left, right 
        2. 인라인하게 만든다
        */

        /* float 속성이 정의한 방향으로 딸려 올라간다. */
        /* 원래 위치를 유지하려고 하면 딸려올라가는 대상에 clear 속성을 사용하자 */
        img{
            float: right;
        }

        p{
            clear: both;
        }
        
        ul li {
            list-style: none;
            float: left;
            border: 1px solid #000;
            padding: 10px;
            margin: 3px;
        }

 

홈페이지 구성을 하다 끝남,,

지금 하는 방법은 옛날 방법이라 추가적으로 공부할 필요가 있을 듯,,

포지셔닝에 대해 알아보기

'2024_UIUX 국비 TIL' 카테고리의 다른 글

UIUX _국비과정 0422  (0) 2024.05.30
UIUX _국비과정 0419  (0) 2024.05.30
UIUX _국비과정 0417 [HTML + CSS]  (0) 2024.05.29
UIUX _국비과정 0416  (1) 2024.05.29
UIUX _국비과정 0415  (0) 2024.05.29

작성 : 2024. 4. 17. 1

지금은 HTML을 배우고 있지만 자바스크립트에 대해 미리 조금씩 알아 놓으면 좋을 것 같다.

전에 과외할때 조금 배웠지만 지금은 완전히 까먹었기 때문에 다시 하는 걸로,,

 

✔️자바스크립트란?

-웹페이지에 생동감을 불어넣기 위해 만들어진 프로그래밍 언어

  • 자바스크립트는 브라우저에서만 쓸 목적으로 고안된 언어이지만, 지금은 다양한 환경에서 쓰이고 있습니다.
  • 오늘날 자바스크립트는 브라우저 환경에서 가장 널리 사용되는 언어로 자리매김하였습니다. HTML/CSS와 완전한 통합이 가능합니다.
  • 자바스크립트로 '트랜스파일’할 수 있는 언어는 많습니다. 각 언어마다 고유한 기능을 제공하죠. 자바스크립트에 숙달한 뒤에 이 언어들을 살펴볼 것을 추천드립니다.

 

✔️자바스크립트의 강점

  • HTML/CSS와 완전히 통합할 수 있음
  • 간단한 일은 간단하게 처리할 수 있게 해줌
  • 모든 주요 브라우저에서 지원하고, 기본 언어로 사용됨

 

출저) 

 

자바스크립트란?

 

ko.javascript.info

 

 

  • 어제 배웠던 form 태그에서 추가로 더 배운 것들
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <!-- 0416~0417 -->
        <!-- 폼태그의 역할 : 사용자로 부터 입력받는다 1.직접 문자를 입력받는 방식 (문자) 2.선택을 통해 입력받는 방식 -->

        <form action="http://www.naver.com">
            <fieldset>
                <legend>히든 폼</legend>
                <input type="hidden" name="name" value="홍길동">
                <!-- 화면에서는 폼이 보이지 않음 -->
            </fieldset>
            <fieldset>
                <!-- 경계를 만들어주는 <fieldset> -->
                <legend>직접 입력하는 폼</legend>
                <!-- 제목을 달 수도 있다 -->
            </fieldset>
            <fieldset>
                <p>
                    <label>(필수) 아이디 :</label>
                    <input
                        type="text"
                        name="id"
                        size="40"
                        value="king"
                        autofocus="autofocus"
                        required="required"
                        readonly="readonly"/>
                    <!-- value 는 기본값 속성, 하지만 입력받는 값이나 데이터 속성에 따라 바뀔 수 있음 -->
                    <!-- autofocus 자동 커서 켜기 -->
                    <!-- required 입력되지 않으면 메세지 띄우기 -->
                    <!-- readonly 는 비활성화, 수정 불가능 -->
                </p>
                <p>
                    <label>비밀번호 :</label>
                    <input type="password" name="pwd" maxlength="12"/>
                    <!-- 패스워드 타입은 인풋칸에 입력하면 암호처리가 됨 숫자가 보여지지 않음 -->
                    <!-- maxlength 비밀번호 길이 제한 -> 레귤러 속성을 더 많이 씀 -->
                </p>
                <p>
                    <label>이메일 :</label>
                    <input type="email" name="email"/>
                    <!-- 이메일 타입은 인풋에 값을 받을 떄 골뱅이가 꼭 들어가야 함. -->
                </p>
                <p>
                    <label>연락처 :</label>
                    <input type="tel" name="tel"/>
                    <!-- 연락처를 받는 타입, 연락처의 숫자 서식을 구분 -->
                </p>
                <p>
                    <label>가입인사 :</label>
                    <textarea name="content" rows="7" cols="39" placeholder="가입인사를 적으세요"></textarea>
                    <!-- textarea 는 여러 줄을 입력받을 수 있다 ex_게시판글 -->
                    <!-- placeholder는 데이터로 처리되지 않음, 도움말로 사용 -->
                </p>
                <p>
                    <label>파일 첨부 :</label>
                    <input type="file" multiple="multiple">
                    <!-- 파일을 입력받을 수 있다 -->
                    <!-- multiple을 넣으면 여러 개의 파일을 입력 받을 수 있다 -->
                </p>
            </fieldset>
            <fieldset>
                <legend>선택형 입력형</legend>
                <!-- 입력형은 입력받은 값이 value 값으로 들어가지만 선택형은 그렇지 않기 떄문에 반드시 value 값을 지정해서 표기해야 함! -->
                <!-- value 값이 실질적인 데이터가 됨 -->
                <p>
                    <label>성 별 :</label>
                    <input type="radio" name="gender" value="male">남자
                    <input type="radio" name="gender" value="fmale">여자
                    <!-- radio 는 선택지 중 하나를 선택할 수 있도록 해준다 name을 같게 해서 선택지를 묶어야 한다! -->
                </p>
                <p>
                    <label>선물포장 :</label>
                    <input type="radio" name="gift" value="yes">선물포장
                    <input type="radio" name="gift" value="no" checked="checked">선택 안함
                    <!-- checked 선택 기본값 지정 -->
                </p>
                <p>
                    <label>취미 :</label>
                    <input type="checkbox" name="hoppy" value="sport">운동
                    <input type="checkbox" name="hoppy" value="travel">여행
                    <input type="checkbox" name="hoppy" value="reading" checked="checked">독서
                    <!-- 체크박스는 복수 선택 가능! name이 같을 필요는 없지만 같이 묶어둬야 나중에 데이터 처리가 쉬워진다-->
                </p>
                <p>
                    <label>직업 :</label>
                    <select>
                        <option value="">-- 직업선택 --</option>
                        <option value="jop1">
                            자영업
                        </option>
                        <option value="jop2">
                            공무원
                        </option>
                        <option value="jop3" selected="selected">
                            회사원
                        </option>
                        <!-- selected 는 자바스크립트에서 현재 체크되어진 값을 확인하는 용도 -->
                        <option value="jop4">
                            연예인
                        </option>
                        <option value="jop5">
                            기타
                        </option>
                    </select>
                </p>

                <!-- 날짜를 선택 -->
                <p>
                    <label>날짜 1 :
                    </label>
                    <input type="date">
                    <!-- 년, 월, 일 정보가 보여지고 선택할 수 있게 해줌 -->
                </p>
                <p>
                    <label>날짜 2 :
                    </label>
                    <input type="month">
                </p>
                <p>
                    <label>날짜 3 :</label>
                    <input type="week">
                </p>
                <p>
                    <label>날짜 4 :</label>
                    <input type="time">
                </p>
            </fieldset>
            <input type="submit" value="회원가입">
            <!-- 폼에 입력된 값들을 <form action="__.jsp"> 에 연결된 서버에 입력해준다 (링크기능) 지금은 연결할 서버가 없어서
            네이버로 연결되게 해두었다-->
            <input type="reset" value="취소">
            <!-- 서버에 입력한 값을 리셋해준다 -->

            <button type="submit">회원가입</button>
            <button type="reset">취소</button>
            <!-- button 으로 submit, reset 가능 -->

            <!-- 모든 것을 그냥 입력하는 게 아니라 자바스크립트로 넘어가서 유효성 검증을 해야한다 -->

            <button>소리가 나용</button>
            <input type="button" value="영상 실행">
            <!-- 내가 의미하는 것을 구현하고 싶을 떄 쓰는 태그들 -->
        </form>
    </body>
</html>

 

  • 배운 것만으로 만들어보기

웹표준의 정석 _ 예제문제

css 없이 화면구현을 해보았다. 

 

코드 :

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>연습문제02</title>
    </head>
    <body>
        <form>
            <fieldset>
                <dd>
                    <h1>
                        프론트엔드 개발자 지원서
                    </h1>
                    <p>
                        HTML, CSS, Javascript에 대한 기술적 이해와 경험이 있으신 분을 찾습니다.</p>
                    <hr/>
                    <dl>
                        <dt>
                        <h3>개인정보</h3>
                    </dt>
                        <dd>
                            <label>이름</label>
                            <input type="text" name="name" placeholder="공백없이 입력하세요">
                            <p></p>
                            <label>연락처</label>
                            <input type="tel" name="tel">
                        </dd>
                    </dl>
                    <dl>
                    <h3>지원분야</h3>
                    <dd>
                        <input type="radio" name="field" value="job1">
                        웹 퍼블리싱
                        <p></p>
                        <input type="radio" name="field" value="job2">
                        웹 애플리케이션 개발
                        <p></p>
                        <input type="radio" name="field" value="job3">
                        개발 환경 개선
                    </dd>
                    <p></p>
                    <h3>지원동기</h3>
                    <textarea
                        name="motive"
                        rows="7%"
                        cols="70%"
                        placeholder="본사 지원 동기를 간략히 써 주세요"></textarea>
                    <br>
                    <input type="submit" value="접수하기">
                    <input type="reset" value="다시 쓰기">
                    <p></p>
                </dd>
            </fieldset>
        </form>
    </body>
</html>

 

가장 중요한 건 name 속성과 value 속성 + id 속성 이다.

 

✔️CSS 배우기

단독으로 작성되지만 HTML과 연동되어 사용하는 언어.

✔️HTML에 CSS를 적용하는 방법 3가지

  • 인라인 작성방식
  • 내부에 작성방식
  • 외부에 작성방식

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
     <!-- href에 절대경로, 상대경로를 적어주면 된다
    이것이 3. 외부에 작성 방식 -->
    <link rel="stylesheet" href="./myStyle.css"/>
    
    <!-- 2.내부에 작성 방식 : <style> 시트 만들기 -->
    <style>
        p {
            color: cornflowerblue;
        }
    </style>
    
</head>
<body>

    <!-- css적용방법
    1.인라인 작성 방식
    2.내부에 작성 방식 : <style> 시트 만들기
    3.외부에 작성 방식 : 별도의 파일 작성 (___.css)-->

    <!-- 1. 인라인 작성방식 -->
    <!-- <p style="color: darkolivegreen;">코리아 아카데미 it</p> -->

    <!-- <p>맛있는 거 먹고 쿨쿨</p> -->
    <h1>맛있는 거 먹고 쿨쿨</h1>

</body>
</html>

 

외부에 작성하는 방식으로 했을 땐 아래와 같은 시트가 파일로 하나 만들어져야한다.

h1 {
    color: rgb(148, 210, 117);
}

파일명은 ___.css ← 이런식으로 뒤에 .css를 붙여야한다.

 

css 에서 선택자를 불러오는 방식들

다 주석처리해두고 하나씩 실행해본 코드들이기 때문에 똑같이 복붙해서 쓰면 안된다.

<style>
        선택자 {
            속성 : 값;
            속성 : 값;
            속성 : 값;
        }

        /* 조합을 어떻게 하느냐에 따라 구성이 다양해진다 */

        /* 전채선택자 : 모든 요소를 다 선택할 수 있다 */
        * {
            color: indianred;
        }

        /* 태그 선택자 */
        /* 선택된 태그에는 모두 동일한 효과가 입혀진다 */
        p {
            color: rgb(89, 166, 125);
        }

        /* 클래스 선택자 */
        .accent {
            color:blueviolet
        }

        /* 아이디 선택자 */
        #accent2 {
            color: darkorange;
        }

        .fonts {
            font-size: 30px;
        }

        #fonts2 {
            font-size: 30px;
        }

        /* 그룹선택자 */
        p,h1 {
            color: rgb(19, 191, 191);
        }

    </style>
    </head>
<body>
    <p>내용1</p>
    <h1>내용2</h1>
    <p class="accent fonts">내용3</p>
    <!-- class 속성은 css에서 활용도가 높다 -->
    <p id="accent2">내용4</p>
    <!-- id 속성은 하나는 적용이 되지만 두 개 이상은 적용이 되지 않는다 -->
    <!-- id 속성은 css에서 잘 사용하지 않는다
    id 속성은 스크립트에서 정보 요소를 읽어올 때 사용된다 -->
</body>

 

뭔가 여기저기서 가져다 붙여서 아까 만들었던 연습문제를 꾸며보았다.

접수하기와 다시 쓰기 버튼을 누르면 색도 변한다.

붙여쓰려해도 뭐가 뭔지를 알아야하는구나 + 붙여쓰면 편하다 라는 오늘의 깨달음..

작성 : 2024. 4. 16. 

 

오늘은 Html + css + 자바스크립트에 들어간다.

 

웹 구성 접근할 때 3대 요소

1. 웹 접근성

2. 웹 표준

3. 웹 호환성

 

 

HTML 기본문법

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>네이버</title>  <!--파비콘과 함께 페이지 상단의 제목-->
</head>
<body>
     <!--로 감싸면 주석 처리가 됩니다.-->
     <!-- commend + / 하면 주석처리 -->
    <h1>제목1</h1>
    <h2>제목2</h2>
    <h3>제목3</h3>
    <h4>제목4</h4>
    <h5>제목5</h5>
    <h6>제목6</h6>

    <p> 문단 1 </p> 
    <p> 문단 2 </p>
    <!-- p 태그는 한줄로 나오는 것이 속성 -->

    문단1 <br> 
    문단2 <br /> 
    문단3 <br /> 
    문단4 <br /> 
    <!-- br 태그는 이런 식으로 사용할 수 있습니다. 줄을 바꿔주고 p 태그처럼 행간격이 생기지는 않습니다 -->

    <!--태그를 사용하면 줄이 자동으로 바뀌는 경우 (h 태그들 ) 가 있고 아닌 경우가 있습니다-->
    <!--css 는 디자인 뿐 아니라 코드를 뽑아 올때도 쓰입니다-->

    <strong> 글자 굵게 </strong>
    <b> 글자 굵게 </b>
    <!-- 글자를 굵게 하는 역할은 같다 -->
    <br>
    <em> 글 강조 </em>
    <i> 글 강조 </i>
    <!-- 날리는 글씨 표현 -->

<!-- 목록태그들에 대해 알아봅니다 -->
        <ul>
            <li>JAVA</li>
            <li>HTML</li>
            <li>CSS</li>
            <!-- li 태그가 늘어날 수록 목록이 늘어난다 -->
        </ul>
        <!-- 기호로 목록 구분 -->

        <ol type = 'A' reversed> 
            <li>서울</li>
            <li>김천</li>
            <li>부산</li>
        </ol>

        <ol> 
            <li>제주도</li>
            <li>부안</li>
            <li>강릉</li>
        </ol>
        <!-- 번호, 알파벳으로 목록 구분 -->

        <dl>
            <dt> - Hello</dt>
            <dd>안녕하세요</dd>
        </dl>
        <!-- 한 구성을 이루고 있습니다. -->
        <!-- 뜻을 풀이할 때 사용 -->

        <!-- 라이브 서버열 때 commend + fn + l + o -->

    </body>
</html>

 

  • 테이블 만들기
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <table border='1' width='350' height='350'>
            <!-- 웹 구성 접근할 때 3대 요소 1. 웹접근성 2. 웹표준 3. 웹호환성 -->
            <thead>
                <tr>
                    <th>이름</th>
                    <th>나이</th>
                    <th>주소</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>4</td>
                    <td>5</td>
                    <td>6</td>
                </tr>
            </tbody>
            <tfoot>
                <tr>
                    <td>7</td>
                    <td>8</td>
                    <td>9</td>
                </tr>
                </tfoot>
                </table>


                <!-- table의 병합 -->
                html 크기단위 : px(생략시 절대크기), % (브라우저 화면 대비)
                <table border="1" width = "50%" height = "50%"> 
                    <caption>월별 매출현황</caption>
                    <tr>
                        <td>01</td>
                        <td colspan="2">02</td>
                        <!-- colspan 가로 셀 합치기 -->
                        <td rowspan="3">04</td>
                    </tr> 
                    <tr>
                        <td>05</td>
                        <td colspan="2" rowspan="2">06</td>
                    </tr> 
                    <tr>
                        <td>09</td>
                    </tr> 
                </table>
            </tfoot>
        </table>
    </body>
</html>

 

  • 테이블 만들기 연습
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <table border='1' width='80%' height='50%'>
            <thead>
                <tr>
                    <th rowspan="5">학력사항</th>
                    <th>졸업일</th>
                    <th colspan="2">학교명</th>
                    <th >전공</th>
                    <th>졸업여부</th>
                    <th>소재지</th>
                    <th>성적</th>
                </tr>
                <tr>
                    <th>
                        년 월</th>
                    <th align="right" colspan="2">고등학교</th>
                    <th></th>
                    <th></th>
                    <th></th>
                    <th>
                        /
                    </th>
                </tr>
                <tr>
                    <th>
                        년 월</th>
                    <th align="right" colspan="2">대 학</th>
                    <th></th>
                    <th></th>
                    <th></th>
                    <th>
                        /
                    </th>
                </tr>
                <tr>
                    <th>
                        년 월</th>
                    <th align="right" colspan="2">대학교</th>
                    <th></th>
                    <th></th>
                    <th></th>
                    <th>
                        /
                    </th>
                </tr>
                <tr>
                    <th>
                        년 월</th>
                    <th align="right" colspan="2">대학원</th>
                    <th></th>
                    <th></th>
                    <th></th>
                    <th>
                        /
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <th rowspan="4">경력사항</th>
                    <th colspan="2" width="20%">근무기간</th>
                    <th width="20%">회사명</th>
                    <th>직위</th>
                    <th>담당업무</th>
                    <th colspan="2">퇴사사유</th>
                </tr>
                <tr>
                    <th colspan="2">
                        -
                    </th>
                    <th></th>
                    <th></th>
                    <th></th>
                    <th colspan="2"></th>
                </tr>
                <tr>
                    <th colspan="2">
                        -
                    </th>
                    <th></th>
                    <th></th>
                    <th></th>
                    <th colspan="2"></th>
                </tr>
                <tr>
                    <th colspan="2">
                        -
                    </th>
                    <th></th>
                    <th></th>
                    <th></th>
                    <th colspan="2"></th>
                </tr>
            </tbody>
            <tfoot>
                <tr>
                    <th rowspan="2">병역사항</th>
                    <th>군필여부</th>
                    <th colspan="4">군필 ( ), 미필 ( ), 면제 ( ), 기타 ( )</th>
                    <th>군 별</th>
                    <th></th>
                </tr>
                <tr>
                    <th>복무기간</th>
                    <th colspan="4" align="right">( 년 월)</th>
                    <th>계 급</th>
                    <th></th>
                </tr>
            </tfoot>
        </table>
    </body>
</html>

 

  • 이미지 넣는 방법
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <!-- 이미지 넣어보기 -->
        <!-- 상대경로와 절대경로 방식을 사용 -->
        <img
            src="file:///Users/yunakang/Desktop/code/codeonlap/animal.jpg"
            /
            alt="동물의 숲 고리대금업자">
        <!-- alt = "동물의 숲 고리대금업자" <- 이미지가 깨질 때나 시각장애인을 위해 음성지원을 제공할때 -->
        <!-- 위는 절대경로 -->
        <br>
        <img src="img/animal.jpg" width="50" height="30"/>
        <!-- 위는 상대경로 -->
        <br>
        <img src="./animal.jpg"/>
        <!-- 나와 동일한 위치를 표현 , ./ 를 붙여도 되고 생략도 가능하다-->
        <br>
        <img src="../animal.jpg"/>
        <!-- 상위 위치를 표현할 때 이렇게 씀 -->

        <!-- html 이미지 절대경로 상대경로 좀 잘 알아놓기 -->
    </body>
</html>

 

  • 태그 넣는 방법
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>a태그에 대하여</title>
</head>
<body>
    <!-- <a href="이동할 페이지의 경로(html) or url or 특정파일">회원가입</a> -->
    <a href="http://www.naver.com">네이버</a>
    <br>
    <!-- <a href="절대 경로 아니면 상대경로가 들어간다">로그인</a> -->
    <a href="./index-pixelArt_다시하기.html">픽셀아트의 세계로</a>
    <br>
    <a href="//127.0.0.1:5500/index-pixelArt_%EB%8B%A4%EC%8B%9C%ED%95%98%EA%B8%B0.html" target="_blank">초대합니다</a>
    <!-- target="_blank" 를 쓰면 새로운 페이지가 나옴 -->
    <br>
    <a href="img/animal.jpg">동물의 숲</a>
    <br>
    <a href="http://www.naver.com"><img src="./animal.jpg"/></a>
</body>
</html>

 

  • 미디어 넣는 방법
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <!-- <object></object> 는 미디어를 넣을 때 쓴다 -->
        <object width="900" height="800" data="media/product.pdf"></object>
        <!-- <embed> 태그는 음원이나 동영상을 넣을 때 사용한다 -->
        <br>
        <embed src="media/spring.mp3">
        <br>
        <!-- <audio src=""></audio> 태그는 음원을 넣을 때 사용 -->
        <audio src="media/spring.mp3" controls="controls"></audio>
        <!-- video는 영상을 넣을 때 사용 -->
        <br>
        <video src="media/KakaoTalk_Video_2024-04-16-16-29-08.mp4" controls width= "500"></video>
        <iframe width="801" height="451" src="https://www.youtube.com/embed/hGrIgIfCxP0" title="도서관에서 공부할 때 최대 집중력이 필요하다 | 3 hour lofi hip hop mix / lofi music for studying , work" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

    </body>
</html>

<iframe> 의 경우 유튜브에서 원하는 영상에 마우스 오른쪽 키를 누르면 소스코드 복사 항목이 뜬다!

그 소스코드를 복붙하면 저렇게 HTML화면에서 원하는 영상을 유튜브에서 가지고 올 수 있음!

 

  • form 태그의 사용
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <!-- 폼태그의 역할 : 사용자로 부터 입력받는다 1.직접 문자를 입력받는 방식 (문자) 2.선택을 통해 입력받는 방식 -->

        <form>
            <p>
                <label>아이디 :
                </label>
                <input type="text" name="id"/>
            </p>
            <p>
                <label>비밀번호 :
                </label>
                <input type="password" name="pwd"/>
            </p>
        </form>

    </body>
</html>
  • 이미지 태그의 경로설정, 원하는 모양으로 테이블 만들기를 연습하고 좀 더 알아볼 것!
  • 5월 19일 산업기사 시험, 산업기사 자격요건 졸업증명서 첨부하기

 

  • 배운 것만으로 만들어보기

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>연습문제01</title>
    </head>
    <body>
        <!-- 페이지를 구성하는 가장 큰 제목은 h1 태그를 씀.  -->
        <!-- 페이지를 구성하기 위헤 보통 h3까지 사용 -->
        <h1>수습 국원 모집</h1>
        <h2>방송에 관심있는 새내기 여러분 환영합니다</h2>
        <p>교내 방송국에서 신입생을 대상으로 수습 국원을 모집합니다. 학부나 전공에 상관없습니다. 
            <br>
            평소 방송에 관심있었던 여러 학우들의 지원바랍니다.</p>

        <ul>
            <li>
                <strong>모집 기간 :
                </strong>
                3월 2일 ~ 3월 11일</li>
            <li>
                <strong>모집 분야 :
                </strong>
                아나운서, PD, 엔지니어</li>
            <li>
                <strong>지원 방법 :
                </strong>
                양식 작성 후 이메일 접수</li>
            <i>
                지원서 양식은 교내 방송국 홈페이지 공지 게시판에 있습니다.</i>
        </ul>
        <h3>혜택</h3>
        <ol type="a">
            <li>수습기자 활동 준 소정의 활동비 지급</li>
            <li>정기자로 진급하면 장학금 지급</li>
        </ol>

        <img src="./animal.jpg" width="500"/>

    </html>

작성 : 2024. 4. 15. 

 

문자열을 다루는 법

package etc0411;

public class StringTest0415 {
//0415
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		
		// 문자열을 더하는 방법
		String str = "hello";  // str은 주소값을 받음
		str += "world";  // 기존의 "hello"에 더해지는 게 아니라 아예 새로운 곳에 메모리를 할당함 
		// 메모리 효율성이 떨어짐, 하지만 보통 이렇게 쓰곤 함..
		
		String str2 = new String("hello"); // 정석의 방법
		
		String str1 = "hello";
		String str2 = "world";
		
		
		// 문자열이 같은지 같지 않은지 비교
		if (str1.equals(str2)) {   
			System.out.println("같다");
		} else {
			System.out.println("다르다");
		}
		
		// --------------------------------------------------------------------------
		
		// 배열을 선언
		char[] cArr = {'h', 'e', 'l', 'l','o'};
		String str = new String(cArr); // "hello"
		
		System.out.println(str);
		
		// 문자열을 문자로 쪼개기
		String str2 = "hello";  // 문자열은 인덱스 번호로 부여됨
		
		System.out.println(str2.charAt(0)); 
		
		// 문자열 배열 안에 있는 값 꺼내기
		for (int i = 0; i < str2.length(); i++) {
			System.out.println(str2.charAt(i));  
		}
		
		String str3 = "world";
		// 문자의 인덱스 번호 알아보기 (위치값)
		System.out.println(str3.indexOf('r'));
		// 전체 구성에서 시작 인덱스의 값을 받을 수도 있음
		System.out.println(str3.indexOf("ld"));
		
		// 전체 문자에서 .split(",") 기준으로 쪼개기 -> (",") 안에 들어가는 것을 기준으로 값이 쪼개짐
		String str4 = "cat, dog, bear";
		String[] arr = str4.split(",");
		
		// 전체 문자열의 일부분을 사용하고 싶을 때
		String str5 = "java.lang.Object";
		System.out.println(str5.substring(5, 9));   // 시작 인덱스, 마지막 인덱스 + 1 
		
		// valueOf 는 모든 타입을 문자열로 바꿔줌
		int x = 100;
		String is = String.valueOf(x);  // boolean, int , long, float ...
		System.out.println(is);  // 문자열로 바꿔줌
		
		String is2 = x + "";  // String is = String.valueOf(x); 와 같은 뜻
		// 간단하게 위와 같이 많이 씀
		System.out.println(is2);  // 100 이 나옴, 결과는 같음.
		
		// 문자열을 그냥 가지고 와 사용할 수도 있음
		if ("hello".equals("hello")) {
			System.out.println("같다");
		}
		
		
	}

}
// 예제) 문자열 쪼개기 (나누기)
		String fullName = "hello.java";
		int idx = fullName.indexOf('.');
		
		String filelName = fullName.substring(0, idx); // 시작값과 끝값을 가지고 오기
		String ext = fullName.substring(idx + 1);

		System.out.println(filelName);
		System.out.println(ext);

 

  • StringBuffer / StringBuilder 의 차이와 장단점 알아두기
String은 짧은 문자열을 더할 경우 사용합니다.StringBuffer는 스레드에 안전한 프로그램이 필요할 때나, 개발 중인 시스템의 부분이 스레드에 안전한지 모를 경우 사용하면 좋습니다.StringBuilder는 스레드에 안전한지 여부가 전혀 관계 없는 프로그램을 개발할 때 사용하면 좋습니다. 단순히 성능만 놓고 본다면 연산이 많은 경우, StringBuilder > StringBuffer >>> String 입니다.

 

출저)

 

[자바] String, StringBuilder, StringBuffer의 차이

* String, StringBuffer, StringBuilder 차이점과 장단점. Java를 사용하면 종종 접하게 되는 문자열 클래스들입니다. (기술면접시 만나게 되는 문제 중 하나.) String, StringBuffer, StringBuilder.. 모두 문자열을 저

12bme.tistory.com

 

아래 StringBuffer를 쓰는 방법 코드

// 효율성을 높이기 위해 만들어진 클래스
		// StringBuffer / StringBuilder
		// 동기화         / 동기화 안됨
		// 둘 다 생성하는 과정을 거쳐 사용해야 함.
		
//		StringBuffer sd = new StringBuffer("abc");  // 메모리를 새로 할당하지 않음
//		System.out.println(sd);  
//		
//		sd.append("001");
//		System.out.println(sd);
//		
//		System.out.println(sd.length());  // 길이 알기
//		sd.delete(1, 3);  // 지우기
//		System.out.println(sd);
//		System.out.println(sd.length());
		
		
		// 동일 타입, 문자열 값 같음
		StringBuffer sd1 = new StringBuffer("abc");
		StringBuffer sd2 = new StringBuffer("abc");
		
		// StringBuffer 는 equals 가 오버라이딩이 안되어 있어 같다고 나오지 않음
		if (sd1.equals(sd2)) {
			System.out.println("같다");
		} else {
			System.out.println("다르다");
		}
		
		
		// String 은 equals 가 오버라이딩되어 있어 같다고 나옴.
		String str1 = sd1.toString();
		String str2 = sd2.toString();
		
		if (str1.equals(str2)) {
			System.out.println("같다");
		} else {
			System.out.println("다르다");
		}
		
		
	}

}

 

 

  • 오토박싱
package etc0411;

public class WrapperTest {
//0415 
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// Wrapper 클래스
		// 기본형과 참조형 간 형변환을 위한 클래스 
		// 형변환 - 기본형끼리 형변환 가능, 참조형끼리 형변환 가능(상속), 
		// 기본형과 참조형은 형변환이 불가능 , 단 예외로 Wrapper 클래스인 경우에는 가능!
		// 이 경우 형변환이라고 안하고 오토박싱 이라고 함. (박싱, 언박싱)
		// 기본형을 참조형으로 형변환 한다.
		// 기본형이 8개이니, Wrapper 클래스는 총 8개
		// Boolean, Byte, Short,, Character, Integer, Long, Float, Double 값의 범위만 다르고 쓰는 방법은 같음.
		
		int i = 10;
		Integer it = new Integer(20);
		// int i2 = it.intValue();  // 20 이라는 값을 가지고 와 줌.
		int i2 = it;  // 위와 같은 의미 
		
		System.out.println(i2);
		
		Integer it2 = i;  // 원래는 이렇게 써야 하지만 (Integer)i; 자동으로 변환됨 -> 박싱이라고 함.
		
		int x = 100;
		Integer it3 = 200; 
		System.out.println(x + it3);  // 언박싱이 발생함.
		
		int y = new Integer(30); // 오토박싱
		System.out.println(y);
		
		String s = "1000"; // 숫자가 아니면 오류남
		int z = Integer.parseInt(s); // 문자열을 숫자로 바꿔줌
		
		System.out.println(z);
		
		
		// 오브젝트 타입의 언박싱 사용 방법을 알아둘 필요가 있음
		int i = 10; 
		
		Object obj;  // 오브젝트도 오토박싱이 될까? -> 됨
		obj = i;  // new Integer(i); 실제 들어가는 값
		
		int result = (Integer)obj;  // 오브젝트는 캐스팅없이 언박싱 불가
		System.out.println(result);

	}

}

 

자바 수업은 오전까지 하면 끝이 납니다. 오후에는 시험 봅니다.

웹 수업하기 전 자바2 를 할 예정입니다. 뒷부분이 굉장히 중요합니다.

 

내일부터는 Html, css, 자바스크립트 시작.

css, 자바스크립트 시작 → 잘 알아두면 좋아요 프론트 할거면

 

  • 날짜를 다루는 클래스
package etc0411;

import java.util.Calendar;
import java.util.Date;

public class DateTest0415 {

	public static void main(String[] args) {
		// 날짜를 다루는 클래스
		// Date, Calendar 두 가지 클래스가 있음
		// 서로 호환이 가능
		
		
		// Date 사용법
		Date today = new Date(); // import java.util.Date; 추가.
		System.out.println(today); // 내 컴퓨터에 표시된 날짜가 나옴
		
		System.out.println(today.getYear() + 1900);  // 1900년을 기준으로 흘러간 연도를 표시해줌
		System.out.println(today.getMonth() + 1);  // 0 ~ 11 월까지 되어있기 때문에 + 1
		
		
		
		// Calendar 사용법
		Calendar cal = Calendar.getInstance();
		System.out.println(cal);  // 나오는 상수값이 모두 사용할 수 있는 값들
		
		System.out.println(cal.get(Calendar.YEAR));
		System.out.println(cal.get(Calendar.MONTH) + 1);  // 0 ~ 11 월까지 되어있기 때문에 + 1
		System.out.println(cal.get(Calendar.WEEK_OF_YEAR));
		System.out.println(cal.get(Calendar.DATE));
		System.out.println(cal.get(Calendar.DAY_OF_WEEK));  // 1. 일요일 2. 월요일 ... 7. 토요일
		
		System.out.println(cal.get(Calendar.HOUR));
		System.out.println(cal.get(Calendar.HOUR_OF_DAY));  // 24시간 표기법
		System.out.println(cal.get(Calendar.MINUTE));
		System.out.println(cal.get(Calendar.SECOND));		
		System.out.println(cal.getActualMaximum(Calendar.DATE)); // 달의 마지막 날짜를 알 수 있게 해줌
		
		
		// 날짜 계산
		Calendar cal = Calendar.getInstance();
		
		// 내가 원하는 날짜로 세팅 가능
		cal.set(2005, 7, 31);  // 3을 넣었다는 것은 4월을 의미함.
		System.out.println(toString(cal));
		
		cal.add(Calendar.DATE, 1);
		System.out.println(toString(cal));
		
		cal.add(Calendar.MONTH, -6);
		System.out.println(toString(cal));
		
		cal.roll(Calendar.DATE, 31); // 날짜만 더함
		System.out.println(toString(cal));
		
		cal.add(Calendar.DATE, 31); // 전체적인 영향을 줌
		System.out.println(toString(cal));
		
	} // main end
	
	public static String toString(Calendar cal) {
		return cal.get(Calendar.YEAR) + "년 " + (cal.get(Calendar.MONTH) + 1) + "월 " + (cal.get(Calendar.DATE)) + "일";
	}

}

 

이어진 코드

// 날짜 계산하는 프로그램 
		// time1 과 time2 의 차를 구하기
		
		final int[] TIME_UNIT = {3600, 60, 1};
		final String[] TIME_UNIT_NAME = {"시간 ", "분 ", "초"};
		
		Calendar time1 = Calendar.getInstance();
		Calendar time2 = Calendar.getInstance();
		
		time1.set(Calendar.HOUR_OF_DAY, 10);
		time1.set(Calendar.MINUTE, 20);
		time1.set(Calendar.SECOND, 30);
		
		time2.set(Calendar.HOUR_OF_DAY, 20);
		time2.set(Calendar.MINUTE, 30);
		time2.set(Calendar.SECOND, 10);
		
		long difference = Math.abs(time2.getTimeInMillis() - time1.getTimeInMillis()) / 1000;
		System.out.println("time1과 time2의 차이는 " + difference + "초 입니다."); // time1과 time2의 차이는 36580초 입니다.
		
		// 두 시간의 차이를 담는 곳
		String tmp = "";
		
		for (int i = 0; i < TIME_UNIT.length; i++) {
			tmp += difference / TIME_UNIT[i] +  TIME_UNIT_NAME[i];
			difference %= TIME_UNIT[i];
		}
		
		System.out.println("시분초의 차이 : " + tmp);
		
		
	} // main end
	
	public static String toString(Calendar cal) {
		return cal.get(Calendar.YEAR) + "년 " + (cal.get(Calendar.MONTH) + 1) + "월 " + (cal.get(Calendar.DATE)) + "일";
	}

}

 

 

국비 단위평가를 처음으로 보았다~

난 그냥 결과만 나왔다;; .. 기능 구현은 하나도 못한듯

그에 대한 셀프 고문으로 학원에 거의 10시까지 남아서 이러고 있다..

나 계속 여기 다닐 수 있을까..?

 

 

암튼 문제)

다음은 키보드로부터 계좌 정보를 입력받아서, 계좌를 관리하는 프로그램입니다. 실행 결과를 보고, 알맞게 BankApplication 클래스의 메소드를 작성해보세요.

→ 알고보니 ‘이것이 자바다’ 예제 문제를 그대로 낸 것이었다.

 

내가 푼 반쪽짜리 답 :

public class BankApplication {
	private static Account[] accountArray = new Account[100];
	private static Scanner scanner = new Scanner(System.in);

	public static void main(String[] args) {
		boolean run = true;
		while (run) {
			System.out.println("------------------------------------------");
			System.out.println("1.계좌생성 | 2.계좌목록 | 3.예금 | 4.출금 | 5.종료");
			System.out.println("------------------------------------------");
			System.out.print("선택> ");

			int selectNo = scanner.nextInt();

			if (selectNo == 1) {
				createAccount();
			} else if (selectNo == 2) {
				accountList();
			} else if (selectNo == 3) {
				deposit();
			} else if (selectNo == 4) {
				withdraw();
			} else if (selectNo == 5) {
				break;
			}
		}
		System.out.println("프로그램 종료");
	}

	// 계좌생성하기
	private static void createAccount() {

		Scanner scanner = new Scanner(System.in); // nextLine()을 쓸 때는 반드시 이게 들어가야 한다!

		System.out.println("------------------------------------------");
		System.out.println("계좌생성");
		System.out.println("------------------------------------------");
		System.out.print("계좌번호 : ");
		String ano = scanner.nextLine();

		System.out.print("계좌주 : ");
		String owner = scanner.nextLine();

		System.out.print("초기입금액 : ");
		int balance = scanner.nextInt();

		for (int i = 0; i < accountArray.length; i++) {
			if (accountArray[i] == null) {
				accountArray[i] = new Account(ano, owner, balance);
				System.out.println("결과 : 계좌가 생성되었습니다.");
				break;
			}
		}
	}

	// 계좌목록보기
	private static void accountList() {
		System.out.println("------------------------------------------");
		System.out.println("계좌목록");
		System.out.println("------------------------------------------");

		for (int i = 0; i < accountArray.length; i++) {
			if (accountArray[i] != null) {
				accountArray[i].show();
			}
		}
	}

	// 예금하기
	private static void deposit() {

		Scanner scanner = new Scanner(System.in);

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

		System.out.print("계좌번호 : ");
		String ano = scanner.nextLine();
		System.out.print("예금액 : ");
		int newbalance = scanner.nextInt();

		if (findAccount(ano) == null) {
			System.out.println("결과 : 계좌가 없습니다.");
		} else {
			findAccount(ano).setBalance(findAccount(ano).getBalance() + newbalance);
			System.out.println("결과 : 입금이 성공되었습니다.");
		}
	}

	// 출금하기
	private static void withdraw() {

		Scanner scanner = new Scanner(System.in);

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

		System.out.print("계좌번호 : ");
		String ano = scanner.nextLine();
		System.out.print("출금액 : ");
		int newbalance2 = scanner.nextInt();

		if (findAccount(ano) == null) {
			System.out.println("결과 : 계좌가 없습니다.");
		} else {
			if (newbalance2 > findAccount(ano).getBalance()) {
				System.out.println("잔액보다 큰 액수를 입력하셨습니다.");
			} else {
				findAccount(ano).setBalance(findAccount(ano).getBalance() - newbalance2);
				System.out.println("결과 : 출금이 성공되었습니다.");
			}
		}
	}

	private static Account findAccount(String ano) {
		for (int i = 0; i < accountArray.length; i++) {
			if (accountArray[i] == null) {
				break;
			}
			if (accountArray[i].getAno().equals(ano)) {
				return accountArray[i];
			}
		}
		return null;

	}

}
package koreaItTest0415;

public class Account {

	private String ano;
	private String owner;
	private int balance;

	public Account(String ano, String owner, int balance) {
		super();
		this.ano = ano;
		this.owner = owner;
		this.balance = balance;
	}

	// Setter와 Getter 메소드 완성

	public String getAno() {
		return ano;
	}

	public void setAno(String ano) { // 계좌번호
		this.ano = ano;
	}

	public String getOwner() {
		return owner;
	}

	public void setOwner(String owner) { // 이름
		this.owner = owner;
	}

	public int getBalance() {
		return balance;
	}

	public void setBalance(int balance) { // 초기입금액
		this.balance = balance;
	}

	// 목록
	void show() {
		System.out.println(ano + " " + owner + " " + balance);
	}
}

findAccount 메서드를 전혀 활용하지 못했고 문제에서 요구했던 nextLine 을 쓰지 못했다.

시험 끝나고 여쭤보니 강사님이 버퍼에 대해 설명을 많이 해주셨다고 했는데 난 기억이 하나도 안났다..

진짜 출력만 겨우 됐는데 그 마저도 뭔가 중간중간 문제가 생겨서 속이 썩어들어갔다.

 

답답한 마음에 남아서 이것저것 고쳐보고 찾아보면서 결국 다시 풀었는데 다 하고 나니까 이렇게 직관적으로 생각하면 더 쉽게 풀렸을 텐데 뭘 그렇게 꼬아서 생각하고 감을 못잡았나 싶었다.. 사실 감을 되게 늦게 잡기도 했고 다시 봐도 나 혼자 구글에 뭐 물어보고 그냥 코드만 짜보라고 하면 못할 것 같다.. 어느 정도 가지고 있다 안풀리면 그냥 무식하게 계속 코드를 따라 써보기라도 해야겠다. 그리고 보고 또 보고 계속 보며 분석을 하면 괜찮게 쓰여진 남의 코드들이 익숙해서 조금이라도 닮게 되지 않을까?ㅜ

문제가 다행히 책에 나온 거기도 하고 많이 풀리는 예제라 어렵지 않게 찾아서 도움을 받을 수 있었다. 이제 이해를 좀 잘해서 제발 스스로 이렇게 풀어보자..

 

오답노트 :

package koreaItTest0415;

import java.util.Scanner;

public class BankApplication {
	private static Account[] accountArray = new Account[100];
	private static Scanner scanner = new Scanner(System.in);

	public static void main(String[] args) {
		boolean run = true;
		while (run) {
			System.out.println("------------------------------------------");
			System.out.println("1.계좌생성 | 2.계좌목록 | 3.예금 | 4.출금 | 5.종료");
			System.out.println("------------------------------------------");
			System.out.print("선택> ");

			int selectNo = scanner.nextInt();

			if (selectNo == 1) {
				createAccount();
			} else if (selectNo == 2) {
				accountList();
			} else if (selectNo == 3) {
				deposit();
			} else if (selectNo == 4) {
				withdraw();
			} else if (selectNo == 5) {
				break;
			}
		}
		System.out.println("프로그램 종료");
	}

	// 계좌생성하기
	private static void createAccount() {

		Scanner scanner = new Scanner(System.in); // nextLine()을 쓸 때는 반드시 이게 들어가야 한다!

		System.out.println("------------------------------------------");
		System.out.println("계좌생성");
		System.out.println("------------------------------------------");
		System.out.print("계좌번호 : ");
		String ano = scanner.nextLine();

		System.out.print("계좌주 : ");
		String owner = scanner.nextLine();

		System.out.print("초기입금액 : ");
		int balance = scanner.nextInt();

		for (int i = 0; i < accountArray.length; i++) {
			if (accountArray[i] == null) {
				accountArray[i] = new Account(ano, owner, balance);
				System.out.println("결과 : 계좌가 생성되었습니다.");
				break;
			}
		}
	}

	// 계좌목록보기
	private static void accountList() {
		System.out.println("------------------------------------------");
		System.out.println("계좌목록");
		System.out.println("------------------------------------------");

		for (int i = 0; i < accountArray.length; i++) {
			if (accountArray[i] != null) {
				accountArray[i].show();
			}
		}
	}

	// 예금하기
	private static void deposit() {

		Scanner scanner = new Scanner(System.in);

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

		System.out.print("계좌번호 : ");
		String ano = scanner.nextLine();
		System.out.print("예금액 : ");
		int newbalance = scanner.nextInt();

		if (findAccount(ano) == null) {
			System.out.println("결과 : 계좌가 없습니다.");
		} else {
			findAccount(ano).setBalance(findAccount(ano).getBalance() + newbalance);
			System.out.println("결과 : 입금이 성공되었습니다.");
		}
	}

	// 출금하기
	private static void withdraw() {

		Scanner scanner = new Scanner(System.in);

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

		System.out.print("계좌번호 : ");
		String ano = scanner.nextLine();
		System.out.print("출금액 : ");
		int newbalance2 = scanner.nextInt();

		if (findAccount(ano) == null) {
			System.out.println("결과 : 계좌가 없습니다.");
		} else {
			if (newbalance2 > findAccount(ano).getBalance()) {
				System.out.println("잔액보다 큰 액수를 입력하셨습니다.");
			} else {
				findAccount(ano).setBalance(findAccount(ano).getBalance() - newbalance2);
				System.out.println("결과 : 출금이 성공되었습니다.");
			}
		}
	}

	private static Account findAccount(String ano) {
		for (int i = 0; i < accountArray.length; i++) {
			if (accountArray[i] == null) {
				break;
			}
			if (accountArray[i].getAno().equals(ano)) {
				return accountArray[i];
			}
		}
		return null;

	}

}
package koreaItTest0415;

public class Account {

	private String ano;
	private String owner;
	private int balance;

	public Account(String ano, String owner, int balance) {
		super();
		this.ano = ano;
		this.owner = owner;
		this.balance = balance;
	}

	// Setter와 Getter 메소드 완성

	public String getAno() {
		return ano;
	}

	public void setAno(String ano) { // 계좌번호
		this.ano = ano;
	}

	public String getOwner() {
		return owner;
	}

	public void setOwner(String owner) { // 이름
		this.owner = owner;
	}

	public int getBalance() {
		return balance;
	}

	public void setBalance(int balance) { // 초기입금액
		this.balance = balance;
	}

	// 목록
	void show() {
		System.out.println(ano + " " + owner + " " + balance);
	}
}

Account 는 그나마 같구나;; 하긴 마법사도 사용 못하면 문제가 심각한거지ㅋ..

작성 : 2024. 4. 12. 

 

배열을 잘 못쓰는 것 같아서 수업 전에 예제를 찾아 간단하게 풀어봤다.

배열관련 예제 

package practice;

public class ArraysPractice {

	public static void main(String[] args) {
		// 배열관련예제 01.

		// 길이가 10인 배열을 선언하고
		// 1부터 10까지의 값을 반복문을 이용하여 순서대로 배열 인덱스에 넣은 후 그 값을 출력하세요.

		int[] arr = new int[10];

		for (int i = 0; i < arr.length; i++) {
			arr[i] = i + 1;
			System.out.print(arr[i] + " ");
		}

		System.out.println();

		// 배열관련예제 02.

		// 길이가 10인 배열을 선언하고 1부터 10까지의 값을 반복문을 이용하여
		// 역순으로 배열 인덱스에 넣은 후 그 값을 출력하세요.

		int[] arr2 = new int[10];
		int num = arr.length;

		for (int i = 0; i < arr.length; i++) {
			arr2[i] = num;
			num--;
		}

		// 하나씩 차례대로 배열값에 수들을 넣어주는 코드
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr2[i] + " ");
		}
	}

}

 

학생성적 관리 시스템을 만들어보자

학생성적관리시스템

package etc0411;

public class ScoreData {
	// 한 학생의 이름과 성적을 변수로 저장
	
	String name;
	int java;
	int kor;
	int eng;
	int math;

	public ScoreData(String name, int java, int kor, int eng, int math) {
		super();
		this.name = name;
		this.java = java;
		this.kor = kor;
		this.eng = eng;
		this.math = math;
	}
	
	void show() {
		System.out.println("이름 : " + name );
		System.out.println("자바 점수 : " + java + ", 국어 점수 : " + kor + ", 영어 점수 : " + eng + " , 수학 점수 : " + math);
	}
	

}

 

package etc0411;
// 성적산출프로그램

import java.util.Scanner;

public class ScoreTest {
	
	final int columns = 10;
    final int rows = 6;


	// 멤버 변수 만들기

	// ScoreData 타입의 배열
	static ScoreData[] scoreData = new ScoreData[10];
	// 성적을 입력받아야 함.
	static Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {

		int menu;

		while (true) {
			// 단위테스트를 하고 넘어가야함.
			showMenu();
			System.out.println("메뉴 선택 : ");
			menu = sc.nextInt();

			// 입력받은 번호 비교
			if (menu == 1) {
				showAllScore();
			} else if (menu == 2) {
				registerScore();
			} else if (menu == 3) {
				searchScoreByName();
			} else if (menu == 4) {
				deletScoreByNum();
			} else if (menu == 0) {
				System.out.println("프로그램 종료");
				break;
			}
		}

	}

	static void showMenu() {
		// 전체 선택할 메뉴
		System.out.println("--------------------------");
		System.out.println("1. 전체 성적 조회");
		System.out.println("2. 성적 등록");
		System.out.println("3. 성적 검색");
		System.out.println("4. 성적 삭제");
		System.out.println("0. 종료");
		System.out.println("--------------------------");
	}

	static void showAllScore() {
		System.out.println("전체 성적 조회");
//		if (scoreData.length == 0) {
//			System.out.println("저장된 성적데이터가 없습니다.");
//			return;
//		}

-----------------------------------------------------------------------------
-> 강사님이 처음에 이렇게(주석 건 코드) 알려줬는데 해보니 
"저장된 성적데이터가 없습니다." 메세지가 나오지 않음. 그래서 아래 코드로 내가 바꿔보았다.

		for (int i = 0; i < scoreData.length; i++) {
			if (scoreData[i] == null) {
				System.out.println("저장된 성적데이터가 없습니다.");
				return;
			} else if (scoreData[i] != null) {
				System.out.print((i + 1) + "번 - ");
				scoreData[i].show(); 
			}
		}
	}
	
-> 이렇게 하면 성적 데이터가 없을 때 "저장된 성적데이터가 없습니다." 메세지는 나오지만 
성적 데이터가 있을 때도 나옴..

결국 강사님께 이 문제를 말씀드리고 함께 코드를 수정함.
-----------------------------------------------------------------------------
	
	static void showAllScore() {
		System.out.println("전체 성적 조회");

		boolean flag = false;
		for (int i = 0; i < scoreData.length; i++) {
			if (scoreData[i] != null) {
				flag = true;
				System.out.print((i + 1) + "번 - ");
				scoreData[i].show(); // null 체크를 반드시 해야 오류가 생기지 않음.
			}
		}

		if (!flag) {
			System.out.println("저장된 성적데이터가 없습니다.");
		}

	}
	
	-> 수정된 코드. 잘 돌아감! 
 

	static void registerScore() {
		System.out.println("성적 등록");
		System.out.println("이름 : ");
		String name = sc.next();

		System.out.println("자바 : ");
		int java = sc.nextInt();
		System.out.println("국어 : ");
		int kor = sc.nextInt();
		System.out.println("영어 : ");
		int eng = sc.nextInt();
		System.out.println("수학 : ");
		int math = sc.nextInt();

		// new ScoreData(name, java, kor, eng, math);
		for (int i = 0; i < 10; i++) {
			if (scoreData[i] == null) {
				scoreData[i] = new ScoreData(name, java, kor, eng, math);
				System.out.println("등록 완료");
				break;
			}
		}
	}

	// 학생 이름을 통해 성적을 찾아보겠다
	static void searchScoreByName() {
		System.out.println("성적 검색");
		System.out.print("검색할 이름을 입력하세요 : ");
		String name = sc.next(); // next 는 공백을 포함한 문자를 못받음. nextline 은 공백을 받을 수 있음
		// 찾으면 찾았다고, 못찾으면 못찾았다고 판단
		boolean found = false;
		for (int i = 0; i < 10; i++) {
			// 배열 안의 값이 널이 아니면서 이름이 같을 때
			if (scoreData[i] != null && (scoreData[i].name).equals(name)) { // equals(name) 이름이 같은지 판단
				System.out.println(name + "을(를) 찾았습니다.");
				scoreData[i].show();
				found = true;
				break; // 찾았다면 반복문 끝내기
			}
		}
		// 열번 도는 동안 검색하는 학생의 이름을 찾지 못했을 때
		if (!found) {
			System.out.println("이름 검색에 실패했습니다.");
		}
	}

	static void deletScoreByNum() {
		System.out.println("성적 삭제");
		System.out.println("삭제할 성적데이터의 번호를 입력하세요 : ");
		int select = sc.nextInt();

		// 배열에서 삭제를 한다는 것은 null 로 만들어버리는 것
		if (scoreData[select - 1] == null) {
			System.out.println("일치하는 성적 데아터가 없습니다.");
			return;
		} else {
			scoreData[select - 1] = null;
			System.out.println("성적 데이터가 삭제 되었습니다.");
		}
	}

}

 

  • 미니 프로젝트 미션 - 예약 시스템을 만들어 보세요.
  1. 변수를 어떻게 사용할지 공통 부분에 대한 약속
  2. 메뉴 정하기 → 예약조회, 예약, 수정, 삭제,
  3. 주제는 아무거나 가능 (기차, 비행기 … 등등)

영화관 예매

빙고판으로 1관, 2관, 3관 예약자 이름, 연락처, 영화 이름, 좌석, 인원수

프린터 영화 목록 뽑고 시간, 좌석선택, 시간선택

영화 목록,시간 보여주기- a

영화 예매 (좌석선택, 영화이름, 인원수)- b

예약자 이름으로 예약 확인- 유나 me

예약자 이름으로 예약 취소- c

예약자 이름으로 수정 (삭제후 재등록)- a

 

 

 

영화관 예매 시스템

🙉 조원들과 만든 코드의 현재 진행상황

// 예약확인에서 좌석번호가 나타나지 않는 이슈

// 예약취소 후 취소된 예약내역을 확인 할 수 없음

// 예약확인에서 예약되지 않은 사람의 이름을 입력하면 “예약 내역이 없습니다”등의 메세지가 없음 → 현재 아무런 일이 일어나지 않고 다시 돌아가는 구조

// “예약 내역 수정을 위해 영화를 다시 선택해주세요” 와 같이 사용자가 지금 자신이 무엇을 하고 있는지 다시 알려줄 수 있는 메세지 출력

// 예약 수정을 하면 예약이 취소됨과 동시에 재예약이 진행되기 때문에 예약이 취소되었습니다와 예약이 완료되었습니다 메세지가 같이 출력되는데 “예약이 수정되었습니다”라고 메세지를 보여주고 수정된 예약 정보를 같이 띄워주면 좋을 것 같음

package Reservation0412;

import java.util.Scanner;

public class MovieReservation {

	   static String name;
	   static int movieentrance;
	   static int movieTime;
	   public static int seatNumber;

	   // 멤버 변수 만들기

	   // ReservationData 타입의 배열
	   static ReservationData[] reservationData = new ReservationData[1];
	   // 예약자 이름, 연락처, 영화 이름, 좌석 등을 입력받아야 함.
	   static Scanner sc = new Scanner(System.in);

	   public static void main(String[] args) {
	      reservationData[0] = null;
	      int menu;

	      while (true) {
	         showMenu();
	         System.out.print("메뉴 선택 : ");
	         menu = sc.nextInt();

	         // 입력받은 번호 비교
	         if (menu == 1) {
	            showAllMovie(); // 영화 목록,시간 보여주기 - a
	         } else if (menu == 2) {
	            reservationMovie(); // 영화 예매 (좌석선택, 영화이름, 인원수) - b
	         } else if (menu == 3) {
	            searchReservationByName(); // 예약자 이름으로 예약 확인 - 유나 me
	         } else if (menu == 4) {
	            deletReservationByName(); // 예약자 이름으로 예약 취소 - c
	         } else if (menu == 5) {
	            ReservationReChoice(); // 예약자 이름으로 수정 (삭제후 재등록) - a
	         } else if (menu == 0) {
	            System.out.println(" 프로그램 종료 ");
	            break;
	         }
	      }

	   }

	   static void showMenu() {
	      // 전체 선택할 메뉴
	      System.out.println("—————————————");
	      System.out.println("1. 현재 상영하는 영화 확인하기");
	      System.out.println("2. 영화 예매하기");
	      System.out.println("3. 예약 확인");
	      System.out.println("4. 예약 취소");
	      System.out.println("5. 예약 수정");
	      System.out.println("0. 종료");
	      System.out.println("—————————————");
	   }

	   static void showAllMovie() {
		   System.out.println();
	      System.out.println("1관 파묘: 11:20  17:20   ");
	      System.out.println("2관 범죄도시: 11:20  17:20  ");
	   }

	   static void reservationMovie() {
	      if (reservationData[0] == null) {
	         System.out.print("이름을 입력해주세요: ");
	         name = sc.next();
	         System.out.print("영화를 선택해주세요. 1.파묘 2.범죄도시 >>");
	         movieentrance = sc.nextInt();
	         System.out.print("시간을 선택해주세요. 1. 11:20 2. 17:20 >>");
	         movieTime = sc.nextInt();

	         파묘1 f1 = new 파묘1();
	         파묘2 f2 = new 파묘2();
	         범죄도시1 b1 = new 범죄도시1();
	         범죄도시2 b2 = new 범죄도시2();

	         if (movieentrance == 1 && movieTime == 1) {
	            f1.movie1();
	         } else if (movieentrance == 1 && movieTime == 2) {
	            f2.movie1();
	         } else if (movieentrance == 2 && movieTime == 1) {
	            b1.movie1();
	         } else if (movieentrance == 2 && movieTime == 2) {
	            b2.movie1();
	         }

	         reservationData[0] = new ReservationData(name, movieentrance, movieTime, seatNumber);
	      } else 
	         System.out.println("예매가 이미 진행되었습니다.");
	   }

	   static void searchReservationByName() {

	      System.out.print("이름을 입력해주세요 :");
	      String name2 = sc.next();
	      if (name2.equals(name)) {
	         reservationData[0].show();
	      }

	   }

	   static void deletReservationByName() {
	      System.out.print("이름 :");
	      String name2 = sc.next();
	      if (name2.equals(name)) {
	    	  reservationData[0] = null;
	    	  System.out.println("예매가 취소되었습니다.");
	      }

	   }

	   static void ReservationReChoice() {
	      System.out.print("이름을 입력해주세요");
	      String name2 = sc.next();
	      if (name2.equals(name)) {
	         reservationData[0] = null;
	         System.out.print("영화를 선택해주세요 1.파묘 2.범죄도시:");
	         movieentrance = sc.nextInt();
	         System.out.print("시간을 선택해주세요 1.11:20 2.17:20:");
	         movieTime = sc.nextInt();
	         파묘1 f1 = new 파묘1();
	         파묘2 f2 = new 파묘2();
	         범죄도시1 b1 = new 범죄도시1();
	         범죄도시2 b2 = new 범죄도시2();

	         if (movieentrance == 1 && movieTime == 1) {
	            f1.movie1();
	         } else if (movieentrance == 1 && movieTime == 2) {
	            f2.movie1();
	         } else if (movieentrance == 2 && movieTime == 1) {
	            b1.movie1();
	         } else if (movieentrance == 2 && movieTime == 2) {
	            b2.movie1();
	         }
	         System.out.println("예약이 취소되었습니다.");
	      } else
	         System.out.println("예약정보없음");

	   }
	}
package Reservation0412;

public class ReservationData {
   String name;

   int movieentrance;
   int movieTime;
   int seatNumber;

   public ReservationData(String name, int movieentrance, int movieTime, int seatNumber) {
      super();
      this.movieentrance = movieentrance;
      this.movieTime = movieTime;
      this.name = name;
      this.seatNumber = seatNumber;
   }

   void show() {
      String movieName;
      String time;
      if (movieentrance == 1) {
         movieName = "파묘";
      } else {
         movieName = "범죄도시";
      }
      if (movieTime == 1) {
         time = "11:20";
      } else {
         time = "17:20";
      }
      System.out.println("이름 : " + name);
      System.out.println("영화 : " + movieName + ", " + "시간 : " + time + ", " + "좌석번호 : " + seatNumber);
   }
}

각 영화를 상영하는 영화관의 좌석에서 예매자의 값을 받기 때문에 상영시간, 영화 별로 클래스를 만들어 놓음.

 

package Reservation0412;

import java.util.Scanner;

public class 범죄도시1 {
	
	   void movie1() {
		      int[][] arr = new int[6][6];
		      for (int i = 0; i < 6; i++) {
		         for (int j = 0; j < 6; j++) {
		            arr[i][j] = j + 1;

		         }
		      }
		      String[] arr2 = { "a열", "b열", "c열", "d열", "e열", "f열" };
		      Scanner in = new Scanner(System.in);

		      for (int i = 0; i < 6; i++) {
		         System.out.print(arr2[i] + " ");
		         for (int j = 0; j < 6; j++) {
		            System.out.print(arr[i][j] + " ");
		         }
		         System.out.println();
		      }
		      System.out.println();

		      int a = 0;
		      System.out.println("열을 선택하세요");
		      String s = in.next();
		      if (s.equals("a")) {
		         a = 0;
		      }
		      if (s.equals("b")) {
		         a = 1;
		      }
		      if (s.equals("c")) {
		         a = 2;
		      }
		      if (s.equals("d")) {
		         a = 3;
		      }
		      if (s.equals("e")) {
		         a = 4;
		      }
		      if (s.equals("f")) {
		         a = 5;
		      }

		      System.out.println("좌석을 선택해주세요");

		      int b = in.nextInt();

		      arr[a][b - 1] = 0;

		      for (int i = 0; i < 6; i++) {
		         System.out.print(arr2[i] + " ");
		         for (int j = 0; j < 6; j++) {
		            System.out.print(arr[i][j] + " ");
		         }
		         System.out.println();

		      }
		      System.out.println("예약이 완료되었습니다.");
		      String seatNumber = s + b;

		   }
		}
package Reservation0412;

import java.util.Scanner;

public class 범죄도시2 {
	
	 void movie1() {
	      int[][] arr = new int[6][6];
	      for (int i = 0; i < 6; i++) {
	         for (int j = 0; j < 6; j++) {
	            arr[i][j] = j + 1;

	         }
	      }
	      String[] arr2 = { "a열", "b열", "c열", "d열", "e열", "f열" };
	      Scanner in = new Scanner(System.in);

	      for (int i = 0; i < 6; i++) {
	         System.out.print(arr2[i] + " ");
	         for (int j = 0; j < 6; j++) {
	            System.out.print(arr[i][j] + " ");
	         }
	         System.out.println();
	      }
	      System.out.println();

	      int a = 0;
	      System.out.println("열을 선택하세요");
	      String s = in.next();
	      if (s.equals("a")) {
	         a = 0;
	      }
	      if (s.equals("b")) {
	         a = 1;
	      }
	      if (s.equals("c")) {
	         a = 2;
	      }
	      if (s.equals("d")) {
	         a = 3;
	      }
	      if (s.equals("e")) {
	         a = 4;
	      }
	      if (s.equals("f")) {
	         a = 5;
	      }

	      System.out.println("좌석을 선택해주세요");

	      int b = in.nextInt();

	      arr[a][b - 1] = 0;

	      for (int i = 0; i < 6; i++) {
	         System.out.print(arr2[i] + " ");
	         for (int j = 0; j < 6; j++) {
	            System.out.print(arr[i][j] + " ");
	         }
	         System.out.println();

	      }
	      System.out.println("예약이 완료되었습니다.");

	      String seatNumber = s + b;

	   }
	}
package Reservation0412;

import java.util.Scanner;

public class 파묘1 {

	   void movie1() {
	      int[][] arr = new int[6][6];
	      for (int i = 0; i < 6; i++) {
	         for (int j = 0; j < 6; j++) {
	            arr[i][j] = j + 1;

	         }
	      }
	      String[] arr2 = { "a열", "b열", "c열", "d열", "e열", "f열" };
	      Scanner in = new Scanner(System.in);

	      for (int i = 0; i < 6; i++) {
	         System.out.print(arr2[i] + " ");
	         for (int j = 0; j < 6; j++) {
	            System.out.print(arr[i][j] + " ");
	         }
	         System.out.println();
	      }
	      System.out.println();

	      int a = 0;
	      System.out.println("열을 선택하세요");
	      String s = in.next();
	      if (s.equals("a")) {
	         a = 0;
	      }
	      if (s.equals("b")) {
	         a = 1;
	      }
	      if (s.equals("c")) {
	         a = 2;
	      }
	      if (s.equals("d")) {
	         a = 3;
	      }
	      if (s.equals("e")) {
	         a = 4;
	      }
	      if (s.equals("f")) {
	         a = 5;
	      }

	      System.out.println("좌석을 선택해주세요");

	      int b = in.nextInt();

	      arr[a][b - 1] = 0;

	      for (int i = 0; i < 6; i++) {
	         System.out.print(arr2[i] + " ");
	         for (int j = 0; j < 6; j++) {
	            System.out.print(arr[i][j] + " ");
	         }
	         System.out.println();

	      }
	      System.out.println("예약이 완료되었습니다.");

	      String seatNumber = s + b;

	   }
	}
package Reservation0412;

import java.util.Scanner;

public class 파묘2 {
	
	void movie1() {
	      int[][] arr = new int[6][6];
	      for (int i = 0; i < 6; i++) {
	         for (int j = 0; j < 6; j++) {
	            arr[i][j] = j + 1;

	         }
	      }
	      String[] arr2 = { "a열", "b열", "c열", "d열", "e열", "f열" };
	      Scanner in = new Scanner(System.in);

	      for (int i = 0; i < 6; i++) {
	         System.out.print(arr2[i] + " ");
	         for (int j = 0; j < 6; j++) {
	            System.out.print(arr[i][j] + " ");
	         }
	         System.out.println();
	      }
	      System.out.println();

	      int a = 0;
	      System.out.println("열을 선택하세요");
	      String s = in.next();
	      if (s.equals("a")) {
	         a = 0;
	      }
	      if (s.equals("b")) {
	         a = 1;
	      }
	      if (s.equals("c")) {
	         a = 2;
	      }
	      if (s.equals("d")) {
	         a = 3;
	      }
	      if (s.equals("e")) {
	         a = 4;
	      }
	      if (s.equals("f")) {
	         a = 5;
	      }

	      System.out.println("좌석을 선택해주세요");

	      int b = in.nextInt();

	      arr[a][b - 1] = 0;

	      for (int i = 0; i < 6; i++) {
	         System.out.print(arr2[i] + " ");
	         for (int j = 0; j < 6; j++) {
	            System.out.print(arr[i][j] + " ");
	         }
	         System.out.println();

	      }
	      System.out.println("예약이 완료되었습니다.");
	      String seatNumber = s + b;

	   }
	}

진행하며 느낀 나의 문제들 → 내가 원래 했던 방향은 ReservationData[] 에 예약자의 정보를 저장하려 했었다. 그래서 내가 맡은 부분의 ‘예약자 이름으로 예약확인’ 부분에서 for문을 사용해 ReservationData[]에 저장된 예약자들의 이름을 돌려 확인할 수 있게 만들었다. 조원들과 미션을 진행하며 각 자 맡은 메서드를 작성할 수 있도록 내가 전체적인 틀을 제공해줬는데 ReservationData[]라는 변수의 사용에 대해 정확하게 이야기를 하지 않고 넘어가 이런 오해가 생긴 것 같다. 변수명이 다른 팀원들이 알아 볼 수 있을 정도로 직관적이라고 생각했는데 다음에는 더 확실하게 이해할 수 있도록 주석을 달아줘야겠다. 큰 실수는 아니라 다행히 내 코드가 돌아가는 것에는 문제가 없었지만 예약자 정보를 담는 공간이 없으니 다른 예약자들이 예약을 할 수가 없다. 오직 한 사람의 영화 예약을 위해 예약 프로그래밍을 짠 것!

여러 사람들이 예약을 할 수 있도록 예약자 내역을 받는 변수를 꼭 만들어야겠다.

느낀 점 → 내 옆자리의 천재분이 내가 제공한 틀을 제외한 거의 모든 것들을 다 만드셨는데.. 일단 감정적으로는 회의감을 가장 많이 느낀 것 같다. 같은 시간을 투자해도 이런 다른 결과를 내는 사람이 있다는 것이 많이 자극이 되었고 걱정되고 초조해지기도 했다. 그래도 배운 것들을 내가 이해하고 아주 조금씩 응용을 할 수 있다는 것은 희망적이다. 단위평가 때는 또 어떨지 자신이 없지만.. 일단 이번 팀원들이 프로그래밍에 대해 열의가 있고 욕심이 있어서인지 점점 하다보면 범위가 넓어졌다. 내가 생각하지 못했던 기능들을 막 구현하려 하기도 하고! 그래서 따라가기가 벅차기도 했지만 꽤 재밌기도 했다. 뭔가 이번 주말에도 새로운 것을 구현하고 좀 알아가야 할 것 같다..

하지만 여전히 이해되지 않는 부분들이 있으므로 일단 코드를 잘 분석해보고, 수정하고 싶은 방향에 맞게 나름 조금씩 건드려 볼 예정이다.

내가 짠 전체적인 틀과 코드 (거의 강사님꺼에서 변수명만 바꾸고 복붙;;)

package Reservation0412;

import java.util.Scanner;

public class ReservationTest {

	// 멤버 변수 만들기

	// ReservationData 타입의 배열
	static ReservationData[] reservationData = new ReservationData[1];
	// 예약자 이름, 연락처, 영화 이름, 좌석, 인원수 등을 입력받아야 함.
	static Scanner sc = new Scanner(System.in);

	public static void main(String[] args) {

		int menu;

		while (true) {
			// 단위테스트를 하고 넘어가야함.
			showMenu();
			System.out.print("메뉴 선택 : ");
			menu = sc.nextInt();

			// 입력받은 번호 비교
			if (menu == 1) {
				showAllMovie(); // 영화 목록,시간 보여주기 - 나실
			} else if (menu == 2) {
				reservationMovie(); // 영화 예매 (좌석선택, 영화이름, 인원수) - 기웅
			} else if (menu == 3) {
				searchReservationByName(); // 예약자 이름으로 예약 확인 - 유나
			} else if (menu == 4) {
				deletReservationByName(); // 예약자 이름으로 예약 취소 - 정우
			} else if (menu == 5) {
				ReservationReChoice(); // 예약자 이름으로 수정 (삭제후 재등록) - 나실
			} else if (menu == 0) {
				System.out.println(" 프로그램 종료 ");
				break;
			}
		}

	}

	static void showMenu() {
		// 전체 선택할 메뉴
		System.out.println("--------------------------");
		System.out.println("1. 현재 상영하는 영화 확인하기");
		System.out.println("2. 영화 예매하기");
		System.out.println("3. 예약 확인");
		System.out.println("4. 예약 취소");
		System.out.println("5. 예약 수정");
		System.out.println("0. 종료");
		System.out.println("--------------------------");
	}

	static void showAllMovie() {
		System.out.println("1관 파묘: 11:20  17:20   ");
		System.out.println("2관 범죄도시: 11:20  17:20  ");
	}

	static void reservationMovie() {
		
	}

	static void searchReservationByName() {
		System.out.println("예약 확인");
		System.out.print("예약자의 성함을 입력하세요 : ");
		String name = sc.next();
	
		// 찾으면 찾았다고, 못찾으면 못찾았다고 판단
		boolean found = false;
		for (int i = 0; i < 10; i++) {
			// 배열 안의 값이 널이 아니면서 이름이 같을 때
			if (reservationData[i] != null && (reservationData[i].name).equals(name)) {
				System.out.println(name + "의 예약 내역을 확인해드리겠습니다. ");
				reservationData[i].show();
				found = true;
				break; // 찾았다면 반복문 끝내기
			}
		}
		// 열번 도는 동안 예약자의 이름을 찾지 못했을 때
		if (!found) {
			System.out.println("예약 정보를 찾을 수 없습니다.");
		}
	}

	static void deletReservationByName() {


	   }

	static void ReservationReChoice() {


	}
}

 

 

  • 예외처리

참조) https://velog.io/@codepark_kr/%EC%9E%90%EB%B0%94-%EC%9D%B4%EB%A1%A0-%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%AC

키워드 : 이퀄스와 헤쉬코드, 오버라이딩

나중에 컬렉션을 배울 때 필요,,

package etc0411;

import java.util.Objects;

@NoArgsConstructor      // 롬북을 이용해 기본생성자를 만들어줌!!
@AllArgsConstructor
@EqualsAndHashCode
public class Person {
	long id;
	String name;

//	public Person(long id, String name) {
		// TODO Auto-generated constructor stub
//	}

	
	// equals 를 오버라이딩하면 hashCode 도 오버라이딩한다.
	// hashCode 값은 고유하다.

//	public void setId(long id, String name) {
//		this.id = id;
//		this.name = name;
//	}
//
//	@Override
//	public boolean equals(Object obj) {
//		
//		Person other = null;  // 선언을 위에서
//		
//		if (obj instanceof Person) {
//		other = (Person)obj;
//		}
//		// 아이디와 이름 비교해서 똑같을 때 같은 객체로 판단하겠다
//		return this.id == other.id && (this.name).equals(other.name); 
//	}
//	
//	@Override
//	public int hashCode() {
//		// hashCode 가 똑같으면 똑같은 개체로 판단한다.
//		return Objects.hash(id, name);
//	}
//	
//	


}
package etc0411;

public class PersonTest {

	public static void main(String[] args) {
		Person p1 = new Person(1111111, "홍길동");
		Person p2 = new Person(1111111, "홍길동");     
		
		// 주소값을 비교하면 다르게 나오지만 값을 직접 비교하도록 오버라이딩하면 값을 비교할 수 있다.
		
		if (p1.equals(p2)) {  // 객체를 비교할 땐 equals 사용
			System.out.println("같습니다.");
		} else {
			System.out.println("다릅니다.");
		}
		
		System.out.println(p1.hashCode());
		System.out.println(p2.hashCode());

	}

}
package etc0411;

import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.ToString;

//0412

@NoArgsConstructor      // 롬북을 이용해 기본생성자를 만들어줌!!
@AllArgsConstructor
@ToString(exclude = "name") // (exclude = "name") <- 빼고 싶은 요소가 있을 때
public class Student {
	String name;
	int age;
	int grade;
	int ban;
	int no;
	
	
//	public Student(String name, int age, int grade, int ban, int no) {
//		super();
//		this.name = name;
//		this.age = age;
//		this.grade = grade;
//		this.ban = ban;
//		this.no = no;
//	}
//	
//	// 기본생성자는 습관적으로 쓴다!
//	// 어떤 역할을 하든 안하든 코딩할때 기본
//	public Student() {
//		
//	}
//
//	@Override
//	public String toString() {
//		return "Student [name=" + name + ", age=" + age + ", grade=" + grade + ", ban=" + ban + ", no=" + no + "]";
//	}
//	

}
package etc0411;
//0412
public class StudentTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Student s = new Student("홍길동", 10, 1, 1, 10);
		System.out.println(s.toString());

	}

}

'2024_UIUX 국비 TIL' 카테고리의 다른 글

UIUX _국비과정 0416  (1) 2024.05.29
UIUX _국비과정 0415  (0) 2024.05.29
UIUX _국비과정 0411  (0) 2024.05.29
UIUX _국비과정 0409  (0) 2024.05.29
UIUX _국비과정 0408  (0) 2024.05.29

작성 : 2024. 4. 11. 

 

  • 다향성과 관련된 추상 클래스
package polymorphism;

public abstract class AbstractClass {
	// abstract 라고 붙여지면 추상 클래스
	
	// 추상 클래스의 특징
	// abstract 키워드를 선언한다.
	// 추상 메서드는 멤버변수, 메서드, 생성자와는 다름 (추상 메서드는 선언부만 있고 구현부는 없다)
	// 객체생성이 불가
	// 상속만 가능하다.
	// 자식클래스 반드시 추상 메서드를 오버라이딩 해야한다.
	
	// 추상 클래스에 아래의 형식이 다 들어갈 수 있음
	int x;
	int y; 
	
	AbstractClass() {
		
	}
	
	// 접근제한자 생략 가능
	void add() {
		System.out.println (2 + 3);
	}
	
	abstract void play(int pos); // 추상 메서드

}

 

 

  • extends AbstractClass 한 자식 클래스
package polymorphism;

public class AbstractChild extends AbstractClass {

	@Override
	void play(int pos) {
		System.out.println("play");
	}

}

 

  • 상속 시, 하위 객체(자식)는 상위 객체(부모)의 특징(메소드, 변수 등)을 물려받게 된다.
  • 이 때, 상위 객체(부모)의 특징(메소드, 변수 등)을 '새롭게 구현'하는가, '그대로 사용'하는가에 따라서 상속의 형태가 갈리게 된다.

 

  • extends
    • 부모에서 선언/정의를 모두하며, 자식은 오버라이딩 할 필요 없이 부모의 메소드/변수를 그대로 사용할 수 있다.
    • "부모의 특징을 연장해서 사용한다."라고 기억하면 될 듯!
  • implements (interface 구현)
    • 부모 객체는 선언만 하며, 정의는 반드시 자식이 오버라이딩해서 사용한다.
    • "부모의 특징을 도구로 사용해 새로운 특징을 만들어 사용한다."라고 기억하면 될 듯!
  • abstract
    • extends와 interface의 혼합이다.
    • extends를 사용하지만, 몇 개는 추상 메소드로 구현되어 있다.

 

참조 ) 

 

[Java] extends, implements의 차이

상속(Inheritance)이란? 상속에 대해서 다루기 전에 우선, OOP(Object-Oriented Programming, 객체지향프로그래밍)가 무엇인지에 대해 알고 있어야한다. OOP는 다음과 같은 특징을 가지고 있다. 상속과 인터페

wooono.tistory.com

 

 

  • 인터페이스

 

형식 :

interface 인터페이스명 {

변수

메서드 3 가지

}

 

4가지의 요소가 들어감 : 변수, 메서드 (추상 메서드, 기본 메서드(구현부 존재), 클래스 메서드(구현부 존재))

추상 메서드 - 오버라이딩 가능

기본 메서드 - 오버라이딩 가능

클래스 메서드 - 오버라이딩이 안된다!

강사님이 어노테이션 어노테이션 하길래 몰라서 찾아봄..

어노테이션은 다른 프로그램에게 유용한 정보를 제공하기 위해 사용되는 것으로 주석과 같은 의미를 가진다.

인터페이스는 안에 아무 내용이 없어도 된다

다향성만 이용하고 싶다면 추상 클래스 사용하지 않고 인터페이스만 사용 가능

package polymorphism;

public interface Interfaceable {
	// 인터페이스를 만들 때 관습적으로 able 를 붙임
	
	// 인터페이스의 특징
	// 변수 : public static final
	// 메서드 : public abstract void add();
	// 객체생성이 불가
	// 상속만 가능
	// 자식 클래스는 반드시 추상 메서드 오버라이딩
	// public static final, public abstract 생략 가능
	// 인터페이스간 상속이 가능하다
	// 자식클래스에게 다중 상속이 가능하다
	
	public static final int MAX = 0; // 초기화하고 사용
	public abstract void add();
	
	default void dafaultMethod() {
		
	}
	
	static int getHour() {
		return 0; 
	}

}
// 인터페이스를 상속받는 클래스
package polymorphism;

public class ChildImpl implements Interfaceable {
	// 인터페이스를 상속받는 클래스는 Impl 라는 이름을 붙임

	@Override
	public void add() {
		// TODO Auto-generated method stub
		
	}
}

 

 

  • 게임 만들기
// 0411 유닛들의 부모 클래스

package polymorphism;

public abstract class Unit {
	
	// 추상 메서드의 목적은 자식이 반드시 오버라이딩
	// 왜 자식들에게 오버라이딩 할까
	// 자식들이 상황에 맞춰 수정해서 사용할 수 있도록 큰 틀을 주는 것
	int x;
	int y;
	
	// 움직이는 기능 
	// 추상 메서드 만들기
	// abstract 쓸 때는 클래스 이름 앞에도 abstract 붙이기
	abstract void move(int x, int y);
	
	// 멈추는 기능
	void stop() {
		
	}
	
	// 공통된 코드들은 부모클래스에 넣기

}
package polymorphism;
// 유닛
public class Tank extends Unit{
	
	
	// tank 만의 기능
	void changeMode() {
		
	}
	
	@Override
	void move(int x, int y) {
		
	}

}
package polymorphism;
// 유닛
public class Marine extends Unit{
	
	// marine 이라는 캐릭터가 게임에서 할 수 있는 것
	void sticPack() {
		
	}
	
	@Override
	void move(int x, int y) {
		
	}

}
package polymorphism;
// 유닛
public class Dropship extends Unit{
	
	// dropship은 공중에서 움직이는 캐릭터
	// x, y 의 범위가 다름
	
	void load() {
		
	}
	
	@Override
	void move(int x, int y) {
		
	}

}
package polymorphism;

public class Fighter extends Unit implements Fightable{

	@Override
	void move(int x, int y) {
		// TODO Auto-generated method stub

	}
}
//0411
package polymorphism;

public interface Fightable extends Moveable, Attacktable {
	// 인터페이스 간에는 다중 상속 가능

}

 

//0411
package polymorphism;

public interface Attacktable {

}

 

인터페이스와 상속의 차이점

자바에서 인터페이스와 상속은 코드 재사용과 다형성을 실현하는 방법이지만, 몇 가지 주요 차이점이 있습니다.

  • 인터페이스는 클래스가 어떤 행동을 해야하는지 지정하는 반면, 상속은 클래스가 어떻게 동작하는지 지정합니다.
  • 인터페이스는 클래스가 여러 개를 동시에 구현할 수 있지만, 클래스는 상속을 통해 하나의 클래스만 확장할 수 있습니다.
  • 인터페이스는 메서드와 상수만 포함할 수 있지만, 추상 클래스(상속의 한 형태)는 메서드, 변수, 그리고 생성자를 포함할 수 있습니다.
  • 인터페이스는 모든 메서드가 기본적으로 public이며, 모든 변수는 public static final입니다. 반면, 클래스는 다양한 접근 제어자를 가질 수 있습니다.

이러한 차이점들은 상황에 따라 인터페이스와 상속 중 어떤 것을 사용할지 결정하는 데 도움을 줄 수 있습니다.

인터페이스의 용도가 굉장히 많음!

 

  • 인터페이스를 이용한 간단한 게임 만들기
// 조상클래스

package Interfaces;

public class Unit {
	int hitPoint;
	final int MAX_HP;
	
	Unit(int hp) {
		MAX_HP = hp;
	}

}
// 부모 - 지상에서 싸우는 애들

package Interfaces;

public class GroundUnit extends Unit {

	GroundUnit(int hp) {
		super(hp);
	}

}
// 지상에서 싸우는 애 Tank

package Interfaces;

public class Tank extends GroundUnit implements Repairable {

	Tank() {
		super(150);
		hitPoint = MAX_HP;
	}

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "Tank";
	}
	

}
// 하늘에서 싸우는 애 Dropship

package Interfaces;

public class Dropship extends AirUnit implements Repairable {

	Dropship() {
		super(125);
		hitPoint = MAX_HP;
	}
	
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "Dropship";
	}

}

 

마린 빼고 SCV, 드랍쉽, 탱크는 치료할 수 있게

1. 일단, 묶기 위해 인터페이스 만들기

package Interfaces;

public interface Repairable {

}

 

 

2. SCV, 드랍쉽, 탱크에 implements Repairable 추가

+마린도 치료 기능 추가하기 위해 madic 만들기

package Interfaces;

public class Madic extends GroundUnit implements Repairable2 {

	Madic() {
		super(30);
		hitPoint = MAX_HP;
	}

	void repair(Repairable2 r) {
		Unit u = (Unit) r;

		while ((u.hitPoint) != u.MAX_HP) {
			u.hitPoint++;
		}
		System.out.println(u + "의 수리가 완료!");

	}

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "Madic";
	}
}

 

 

이제 위 코드들을 테스트할 메인함수 만들기!

package Interfaces;

public class UnitTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Marine mr = new Marine();
		Tank tk = new Tank();
		SCV scv = new SCV();
		Madic md = new Madic();
		
		// ***** 경로 잘 설계..!
		
		scv.repair(tk);
		// scv.repair(mr); // 안된다!
		md.repair(mr);
		// md.repair(tk); // 안된다!
		
	}

}

 

 

 

 

  • 포함관계를 알아보기 위한 코드
package Interfaces;

//0411
public class Tv {
	// 상속이 아닌 모든 관계를 포함관계라고 한다
	// 포함관계를 알아보기 위한 코드

	// LgSpeak lgSpeak;
	// SmSpeak smSpeak;

	Speakable speak;

	public Tv(Speakable speak) {
		this.speak = speak;
	}

//	public Tv(SmSpeak smSpeak) {
//		this.smSpeak = smSpeak;
//	}

	void speakSound() {
		speak.sound();
	}

}
package Interfaces;

public class LgSpeak implements Speakable {
	public void sound() {
		System.out.println("LgSpeak 소리입니다.");
	}

}
package Interfaces;

public class SmSpeak implements Speakable {
	public void sound() {
		System.out.println("SmSpeak 소리입니다.");
	}

}
package Interfaces;

public class AppleSpeak implements Speakable {

	@Override
	public void sound() {
		System.out.println("AppleSpeak 소리입니다.");
	}

}

 

위 엘지스피커, 삼성스피커, 애플스피커와 같은 스피커들 뿐 아니라 새로 들어오게 될 스피커들까지 처리하기 위해 인터페이스를 생성한다.

package Interfaces;

public interface Speakable {
	//public 은 반드시 연계
	
	public abstract void sound();

}

 

그 후 테스트를 위해 메인함수를 만들어 원하는 값을 출력해본다.

package Interfaces;

public class TvTest {

	public static void main(String[] args) {
		
		LgSpeak lgs = new LgSpeak();
		SmSpeak sms = new SmSpeak();
		AppleSpeak apps = new AppleSpeak();
		
		Tv t = new Tv(apps);
		
		t.speakSound();

	}

}

// 코딩을 할 때는 결합도가 낮도록 프로그래밍해야한다. → 인터페이스가 이 일을 해줌 → 이것이 다형성

→ 사용하는 쪽의 코드 수정을 최소화 할 수 있다.

여러 자식 공통적인 요소를 표현하고 싶은 게 상속

포함은 상속 외의 다!

'2024_UIUX 국비 TIL' 카테고리의 다른 글

UIUX _국비과정 0415  (0) 2024.05.29
UIUX _국비과정 0412 [학생성적관리 시스템 및 첫 조별과제]  (0) 2024.05.29
UIUX _국비과정 0409  (0) 2024.05.29
UIUX _국비과정 0408  (0) 2024.05.29
UIUX _국비과정 0405  (0) 2024.05.29

작성 : 2024. 4. 9. 

 

들어가서 해보기

 

구름EDU - 모두를 위한 맞춤형 IT교육

구름EDU는 모두를 위한 맞춤형 IT교육 플랫폼입니다. 개인/학교/기업 및 기관 별 최적화된 IT교육 솔루션을 경험해보세요. 기초부터 실무 프로그래밍 교육, 전국 초중고/대학교 온라인 강의, 기업/

edu.goorm.io

 

지난 시간에는 상속에 대해 배웠습니다.

상속 과정에서 나타나는 특징에 대해 잘 알아야 함.

  • 오버라이딩

-부모로부터 상속받은 메서드를 그대로 사용하는 것이 아니라 내용을 바꿔 사용하는 것

// 상속
public class Tvs { // 부모 클래스
	// 두 개 이상의 자식

	String color; // 색상
	boolean power;  // 전원
	int channel;  // 채널

	public void power() {
		power = !power;
	}

	public void channelUp() {
		channel++;
	}

	public void channelDown() {
		channel--;
	}

}
// 상속
public class TvCaption extends Tvs { // 자식 클래스
// Caption 은 자막처리 
	
	boolean caption;
	
	void displayCaption(String text) {
		if (caption) {
			System.out.println(text);
		}
	}
}
// 상속
public class Tv3D extends Tvs {  // 자식 클래스
// 클래스를 만들 때도 Superclass 에서 상속 가능
	boolean tv3d;

	void display3d() {
		if (tv3d) {
			System.out.println("3D 기능 활성화");
		}
	}
}
public class TvsTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		TvCaption ctv = new TvCaption();
		ctv.displayCaption("코리아 아이티");
		ctv.caption = true; // 캡션을 킨 상태에서 실행 가능!
		ctv.displayCaption("코리아 아이티");
		
		// 부모 Tvs로 부터 상속 받은 부분
		// 모든 클래스는 obiect 클래스를 상속받는다.
		ctv.channel = 10;
		System.out.println(ctv.channel);
		ctv.channelUp();
		System.out.println(ctv.channel);
		
		Tv3D tv3 = new Tv3D();
		tv3.display3d();
		tv3.tv3d = true;
		tv3.display3d();
		
		tv3.channel = 20;
		System.out.println(tv3.channel);
		tv3.channelDown();
		System.out.println(tv3.channel);

	}

}

지난 시간 배운 부분 마무리

 

  • 오버라이딩 개념과 예제 코드
package ex01;

public class Parent {
	//0409 
	// 부모클래스와 자식클래스 변수 이름이 같을 때
	
	int x;
	int y;

}
```java
package ex01;

public class Child extends Parent {
//	int x = 20;
//	
//	void varTest() {
//		System.out.println(x); // 나의 x 
//		System.out.println(this.x); // 나의 x 
//		System.out.println(super.x); // 부모의 x
		
		// this() 나 자신의 생성자 호출
		// super() 부모의 생성자 호출
		// 자식에서 부모의 기본 생성자 생략 가능하지만 오류가 발생하기도.
		// 하나 이상의 생성자 정의 필요
		// 부모의 생성자를 골라서 호출 할 수도 있음.
	
	int z;
	
//	Child() {
//		super();
//	}  // 기본 생성자 생략가능
}
```

 

  • 패키지

이름 지을 때 회사에서는 도메인을 사용 ( 예. com.naver.news )

이름은 무조건 소문자로! (약속)

 

circle 패키지

package circle;

public class Circle {
	
	public int radius; // 반지름
	public final double PI = 3.14;
	
	public Circle (int radius) {
		this.radius = radius;
	}
	
	public double getArea() {
		return radius * radius * PI;
	}
}

 

rectangle 패키지

package ractangle;

public class Ractangle {
	public int w;
	public int h;

	public Ractangle(int w, int h) {
		this.w = w;
		this.h = h;
	}

	public int getArea() {
		return w * h;
	}

}

 

circle 패키지와 ractangle 패키지를 합쳐 동작시켜보자!

 

default 패키지에 작성된 메인함수

//0409

// 다른 패키지 가져오기
import circle.Circle;
import ractangle.Ractangle;

public class FigureAreaTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		// 같은 패키지가 아닐 때 사용 방법
		Circle c = new Circle(5);
		double circleArea = c.getArea();
		
		System.out.println("원의 넓이 : " + circleArea);
		
		Ractangle r = new Ractangle(10, 5);
		int ractangleArea = r.getArea();
		
		System.out.println("사각형의 넓이 : " + ractangleArea);
	}

}

 

  • 접근제어자 (접근제한자)
아무것도 안쓰여 있다면 default   상속받는다면 가능 -> protected
         private < (default < protected) < public
         해당클래스         동일패키지         모든패키지

클래스 : default, public

멤버 변수, 메서드, 생성자 : private, default, protected, public

생성자의 접근제어자는 클래스의 접근제어자와 동일

지역 변수 : 쓸 수 없다

 

private 한 생성자를 정의한 객체를 싱글톤 객체라고 함 : new 연산 불가

package circle2;

import circle.Circle;
// 원주율 구하기
public class CircleChild extends Circle {
	
	// 부모생성자 오버로딩 상태라면 생성자 반드시 추가
	public int angle;
	
	public CircleChild(int radius, int angle) {
		super(radius);
		this.angle = angle;
	}
	
	// 부모 것 그대로 쓰려면 오버라이딩(재정의)
	public double getArea() {
		return 2 * radius * PI * (angle/360.0);
	}
}
원주율 구하기도 추가!

//0409

// 다른 패키지 가져오기
import circle.Circle;
import circle2.CircleChild;
import ractangle.Ractangle;

public class FigureAreaTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		// 같은 패키지가 아닐 때 사용 방법
		Circle c = new Circle(5);
		double circleArea = c.getArea();
		c.setRadius(20);
		
		System.out.println("원의 넓이 : " + circleArea);
		
		Ractangle r = new Ractangle(10, 5);
		int ractangleArea = r.getArea();
		
		System.out.println("사각형의 넓이 : " + ractangleArea);
		
		CircleChild cc = new CircleChild(5, 30);
		double circlechildArea = cc.getArea();
		
		System.out.println("원주율 : " + cc.getArea());
		
	}

}

 

  • 상속구조에서 나타나는 특징 - 오버로딩, 슈퍼(부모), 패키지 분류와 접근제어자, protected(상속)

 

또, 아래의 것들이 있음

  • 다향성

객체 관계에서 나타나는 특징, 어떤 하나의 대상이 여러 방향으로 해석되어지는 것

***** 오버라이딩이 되었을 땐 오버라이딩을 따름.

  • 캡슐화
  • 인터페이스

'2024_UIUX 국비 TIL' 카테고리의 다른 글

UIUX _국비과정 0412 [학생성적관리 시스템 및 첫 조별과제]  (0) 2024.05.29
UIUX _국비과정 0411  (0) 2024.05.29
UIUX _국비과정 0408  (0) 2024.05.29
UIUX _국비과정 0405  (0) 2024.05.29
UIUX _국비과정 0404  (0) 2024.05.29

+ Recent posts