💭/KDT

KDT 8주차 회고(230420~230426)

모팔구 2023. 4. 26. 20:28
728x90
반응형

🎯 목표

💡 나는 최고의 프로그래머당!
💡 자바의 정석,, 쓰기도 귀찮다 11장 노쉬발 킵고잉
💡 빡공👊

 

🖋️ 수업 내용

※ 요약 주의

📆 230420

  • 🎈웹 프로그래밍(프엔)
    • 이클립스를 이용해 톰캣으로 서버 연결하기(글쓰기)
    • html
      • <a>: 하이퍼링크를 설정할 수 있는 태그
        • 속성
          href(필수): 링크를 입력,
          target: 링크를 클릭하면 웹브라우저에서 어느 위치에서 열릴지를 정의 _self(default)는 현재 탭에 링크 열기, _blank는 새 탭에 링크 열기
      • <img>: 문서에 이미지 정의
        • 속성
          src: 이미지 경로 지정
          alt: 이미지를 표시하지 못하게 된 경우 나타날 대체텍스트를 입력
          width나 border같은 스타일도 지정할 수 있지만 이는 css에서 정의하는게 나음
      • <table>: 문서에 테이블을 정의, <tr>: 행을 정의. 행의 개수만큼 정의함. <td>: 테이블에 들어가는 데이터를 정의함. 열의 개수만큼 정의함, <th>: 테이블의 제목행을 정의함. 자동으로 볼드와 가운데정렬이 됨. <caption>: 테이블에 제목을 달 수 있음
        • 속성
          border: 테이블의 선을 표시함 td마다 표시되기 때문에 td간에 빈칸이 생김
          rowspan / colspan: 행/열을 병합함 td 속성으로 사용
    • css
      • 테이블에 스타일을 줄 때에는 보통 td태그에 넣어줌
        가로길이는 td 또는 th에 스타일을 적용하면 되지만 세로길이는 각각 따로 지정해야 한다.
      • 태그#아이디를 이용해 스타일을 정의할 때 해당 태그의 자식과 후손에도 띄어쓰기를 이용해 스타일을 적용할 수 있다
        ex) table#tab1 td 이런식
      • 태그#아이디를 이용해 스타일을 정의할 때 해당 태그의 자식에만 적용할 수 있다.
        ex) table#tab1 > tbody > tr > td 이런식 위 예시와 아래 예시는 같은 의미이다.
      • border-collapse: 경계선을 분리하려면 separate(default), 합치려면 collapse
      • border-spacing: 경계선 사이의 틈을 조절할 수 있음 px단위로 입력
      • caption-side: 캡션의 위치를 바꿀 수 있음
  • ☕️ Advanced Java
    • 멤버를 다루는 클래스 Member를 정의하고 이를 리스트에 넣은 후 Collections.sort(해당리스트)를 호출하면 에러가 발생한다 이유는 Member클래스 내에 내부정렬기준이 정의되어 있지 않기 때문. 따라서 Member클래스에 Comparable인터페이스를 구현한 후 compareTo()메서드를 오버라이딩 하면 된다.
    • compare()메서드는 매개변수가 두개로, 두 매개변수의 비교를 진행해 반환하는데 compareTo()메서드는 매개변수가 하나이다. 즉, 호출한 객체와 인자로 설정한 객체를 비교한다는 의미가 된다. 
    • List vs Set
      • List: 데이터의 순서(index)가 있다. 중복되는 데이터를 저장할 수 있다. List를 구현한 클래스 중 ArrayList를 주로 사용함
      • Set: 데이터의 순서(index)가 없다. 중복되는 데이터를 저장할 수 없다. Set을 구현한 클래스 중 HashSet을 주로 사용함
    • Set도 Vector, ArrayList와 사용할 수 있는 메서드가 거의 비슷하다
      add(), size(), remove(), clear()
    • Set은 인덱스가 따로 없기 때문에 List에서 수정하는 메서드인 set()을 사용하지 않고 기존 데이터를 삭제하고 새로운 데이터를 입력하는 식으로 데이터를 수정한다
    • 그리고 Set은 인덱스가 없기 때문에 List처럼 인덱스를 이용해 데이터를 하나씩 불러올 수 없다. 그래서 데이터를 하나씩 얻기 위해서는 Iterator형 객체로 변환해야 한다.
      • Set형의 데이터를 Iterator형의 객체로 변환하는 메서드: iterator().
        이 메서드로 변환한 후 hasNext()를 이용해 Iterator의 데이터를 가리키는 포인터가 현재 가리키는 위치의 다음번째에 데이터가 있는지 검사한다. 그래서 데이터가 있으면 true, 없으면 false를 반환한다.
        이 문장을 while문의 조건으로 넣으면 데이터가 있는 동안은 반복문을 실행하고 없으면 벗어난다.
        while문 내에 next()를 호출하면 해당 메서드는 Iterator의 데이터를 가리키는 포인터가 현재 가리키고 있는 곳의 다음번째로 포인터를 이동한 후 그곳의 데이터를 꺼내와 반환한다.
Iterator iterator = hashSet.iterator();
while (iterator.hasNext()) {
	System.out.println(iterator.next());
}

 

📆 230421

  • 🎈웹 프로그래밍(프엔)
    • html
      • block요소: 하나의 줄을 전부 차지하는 태그.
      • inline요소: 필요한 만큼의 크기만 차지한다 css에서 크기(width, height)를 지정해도 바뀌지 않는다 img는 예외삼
      • iframe: 내부 프레임을 정의하는 태그. 
        • 속성
          src: 내부 프레임에 표시할 문서를 정의
          name: 해당 내부 프레임의 이름을 정의함
      • a태그의 target 속성에 ifame의 name값을 입력하면 해당 링크가 내부프레임에 열린다(싱기방기)
      • div: 페이지를 섹션으로 분리하는데 사용. div안에 div를 넣고 넣고 너코,, 티기고,, 할수 있다
        div(부모div)안에 div(자식div)를 넣으면 부모 div의 너비가 100%가 아니더라도 자식 입장에서는 부모의 너비가 100%라고 간주한다 
      • 부모div안에 자식 div가 있을 때 자식 div를 나란히 두고 싶다면 display:flex 스타일을 부모 div안에 넣는다
      • span: 문서의 특정 부분만 바꾸고 싶을 때 사용함
      • audio: 오디오 파일을 다루는 태그
        • 속성
          src
          controls: 컨트롤러를 출력
          autoplay: 자동으로 재생하도록 하는 속성
      • 속성 중에 값과 속성명이 같은 경우(ex. autoplay="autoplay") 속성명만 쓰면 된다 
      • form: 사용자 입력을 위한 양식을 생성한다 자손으로 input(입력을 받음), button을 갖는다 
        • 속성
          method: 전송방식을 지정하는 속성 - GET: url에 ~~~?~~~ 이런 형태로 입력한 내용이 노출되는 방식(보안 야감) 데이터가 적을 경우 사용, POST: 전송되는 내용이 노출되지 않는 방식(보안 강암) request라는 헤더에 숨어있다 데이터가 많을 경우 사용
          action: 전송할 서버를 지정 ex) jsp 파일
      • input: 사용자의 입력을 받는 태그 닫는 태그 없음 
        button: 버튼을 출력하는 태그 닫는 태그 있음 태그사이에 버튼에 표시할 내용 입력
        • 속성
          type: 입력값의 타입을 지정한다. text - 문자, password - 비밀번호, submit - 전송버튼 등등 되게많음 submit, reset은 버튼의 내용을 입력하지 않아도 자동으로 제출, 초기화가 지정된다 만약 다른 값을 넣고 싶다면 value 속성을 이용해 지정한다
          placeholder: 입력칸에 표시할 내용을 작성한다
          onclick(type = "button"): 클릭하면 할 행동 정의 또는 펑션 호출 ex) onclick = "펑션명()"
          value: 값 정의
      • button은 태그가 따로 존재해서 단독으로 사용할 수도 있고 input의 type 속성에도 정의할 수 있다. 후자로 버튼을 생성하면 기존에 존재하는 버튼말고 따로 버튼의 기능을 정의할 수 있다.
      • input이나 button 태그에서 onclick = "팡션명()"을 사용하면 해당 펑션을 head 내에 script 태그를 생성하고 그 안에 해당 이름의 펑션을 정의한다 
    • css
      • padding: 안쪽 여백을 정의함 vs. margin: 바깥 여백을 정의함 사용법은 margin과 동일함
      • overflow: 텍스트가 많아 지정된 태그를 벗어났을 때(오버플로우) 처리하는 속성. 값으로 scroll, hidden, auto가 있음 
      • color: 글자 색을 바꾸는 속성. font-color 아님 주의
    • JavaScript
      • 주석처리는 자바와 동일
      • alert("내용"): 해당 내용의 알림을 보냄
      • script에서 html요소로 접근하는 방법
        1. html요소와 id를 이용하는 방법(제일많이씀):
          document.getElementById('아이디값');
          document.querySelector("#아이디명");
        2. 태그 이름을 이용하는 방법:
          document.getElementsByTagName('태그이름'); -> 해당 태그가 여러개일 경우 배열로 저장함,
          document.querySelector("input"); -> input태그 중 제일 첫번째 태그만 지정.
          document.querySelectorAll("input") -> 모든 input태그를 지정
        3. class 이름을 이용하는 방법:
          document.getElementsByClassName('클래스값'); -> 해당 클래스명이 여러개일 경우 배열로 저장함,
          document.querySelector(".클래스명"); -> 해당 클래스 중 첫번째만 지정.
          document.querySelectorAll(".클래스명"); -> 해당하는 모든 클래스를 지정.
        4. name을 이용하는 방법:
          document.getElementsByName('name값');
      • 자바스크립트는 변수나 메서드의 타입을 지정할 필요 없다. 변수를 선언할 때 사용하는 요소가 있긴 하지만 그건 나중에 한답니다
  • ☕️ Advanced Java
    • return;: 처음에 메서드를 호출한 곳으로 돌아감
    • Set에 있는 데이터는 정렬이 없으므로 정렬을 하려면 List로 바꿔야 한다. 그러려면 Set의 데이터를 List에 넣어서 List객체를 생성한다
      List<Integer> list = new ArrayList<>(set참조변수명);
    • equals()는 두 객체의 내용이 같은지를 비교하는 메서드(동등성 비교) 
    • hashCode()는 두 객체가 같은 객체인지 비교하는 메서드(동일성 비교)
    • HashTable, HashMap, HashSet과 같이 Hash로 시작하는 컬렉션 객체들은 객체의 의미 상의 동일성 비교를 위해서 내부에서 hashCode()메서드를 호출하여 비교한다 그러므로 equals()와 hashCode()메서드를 같이 재정의해야 완벽히 똑같은지 아닌지를 판단할 수 있다. 
    • hashCode() 메서드에서 사용하는 해싱 알고리즘은 서로 다른 객체들에 대해 같은 hashCode값을 만들어 낼 수 있다.
    • Map: 키(key)값과 밸류(value)값을 한 쌍으로 관리하는 객체
      • key: 중복을 허용하지 않고 순서가 없다.(Set의 특징)
      • value: 중복을 허용한다
      • put(key, value): 자료를 추가하는 메서드 이미 존재하는 키값에 밸류값을 다르게 추가하면 나중에 추가한 값이 존재한다.
      • get(key): 주어진 키값과 짝이 되는 밸류값을 반환한다 해당 키값이 맵에 조재하지 않으면 null이 반환된다.
      • remove(key): 해당하는 키값을 찾아 삭제한다. 삭제된 자료의 밸류값을 반환한다.
      • containsKey(key) / containsValue(value): 키 / 밸류값이 존재하는지(true) 아닌지(false) 반환
      • Map에 저장된 모든 데이터를 읽어와서 사용하는 방법
        1. Map의 모든 키값을 읽어와 사용하는 방법(권장) - keySet(): Map에 있는 모든 key값들을 Set형으로 반환한다.
        2. 밸류값만 읽어와서 처리하기 - values(): 모든 밸류값을 반환한다.

 

📆 230424

  • 🎈웹 프로그래밍(프엔)
    • javascript(큰따옴표 작은따옴표 구분X)
      • 변수를 선언할 때 (자바의 자료형 자리에) var, let, const를 사용할 수 있다. 생략도 가능
      • console.log(출력할내용): 브라우저에서 소스보기 - 콘솔자리에서 입력한 '출력할내용'의 로그를 출력한다.
      • input태그의 name속성을 꼬옥 정의해야 서버로 넘어간다
      • document.getElementById("아이디값")은 String으로 반환되기 때문에 변수끼리 사칙연산을 해야 한다면 더할 때만 숫자로 바꾸고 곱셈, 뺄셈, 나눗셈을 할 때에는 굳이 안바꿔도 된다
      • result값을 div 태그 내에 출력시키고 싶다면 아래처럼 한다.
        result = priceValue + suValue;
        vdiv = document.querySelector("div");
        vdiv.innerHTML = result;
    • html
      • input type이 hidden인 태그는 사용자에게 안보이기 때문에 value라는 속성을 꼬옥 정의해줘야함
        ex) <input type = "hidden" id = "num" value = "123">
      • input태그의 type이 radio 또는 checkbox일 경우 모두 name이 같아야 한 그룹으로 친다
      • checkbox나 radio에는 value 속성이 정외되어 있어야 jsp에서 선택한 값을 제대로 확인할 수 있다
      • radio와 checkbox의 속성 중 checked는 실행했을 때 초기값을 설정한다
      • radio의 모든 항목에 checked를 설정해두면 마지막 항목만 선택되어 있다.
      • input type이 file일 때 accept 속성에서 특정 파일의 확장자만 설정할 수 있다.
        <input type="file" accept = "image/jpg, image/gif"> -> 이미지 파일 중 jpg, gif 확장자만 업로드할 수 있음
      • form의 속성 중 entype은 해당 데이터가 서버로 제출될 때 인코딩되는 방법을 명시한다. post일 경우에만 사용할 수 있다. entype의 값 중 multipart/form-data는 파일이나 이미지를 전송할 때 주로 사용한다
      • <input type="file" accept = "확장자 지정">과 <form entype="multipart/form-data">를 같이 사용하지만 결국 파일 처리는 자바의 입출력에서 관리한다
      • textarea는 여러 줄의 텍스트를 입력받는 칸이다 한 줄로 입력할 땐 input의 type을 text로, 문단을 입력받을 때에는 textarea로 지정한다
      • textarea의 속성 중 rows는 행의 개수를, cols는 열의 개수를 지정한다
      • input type="image"와 input type="submit"은 같은 속성으로, 둘 다 클릭하면 jsp로 이동한다
      • select태그: 콤보박스(드롭다운리스트), option태그: 콤보박스 내에 항목을 입력함, selected 속성으로 기본값을 설정할 수 있음.
      • 콤보박스에서 여러개를 선택하고 싶다면 select태그에 multiple 속성을 입력한다.
    • jsp
      • jsp파일은 html5과 같은 형태를 갖는다. 
      • body블럭에 <% input태그에서 정의된 name 속성의 값을 입력한다. %>
        ex) html - <input type = "text" id = "id" name = "id">
              jsp의 body <% String id = request.getParamenter("id"); %> 밑줄 친 id가 name값이다
      • html에서 입력한 값을 제출하고 서버페이지에서 확인하길 바란다면 아래처럼 표시한다
        <body>
            <% // 자바를 처리하기 위한 블럭
                String userId = request.getParameter("id");
            %>
            <p> 아이디: <%=userId%> </p>
      • jsp에서 한글이 깨지지 않길 바란다면 <% request.setCharacterEncoding("UTF-8"); post방식일 때에만 정의한다
      • jsp에서 자바블럭(<% %>)을 주석처리하려면 <%-- 주석 --%> 
      • jsp에서 html을 주석처리하려면 <!-- 주석 --> 
      • 체크박스를 jsp에서 처리하려면 배열로 처리해 하나하나 접근하도록 한다
        ex) <%
                  String[] likes = request.getParameterValues("like");
                  for (String like : likes) {
                     str += like + " ";
                  }
              %>
      • textarea에 여러 줄로 입력한 값을 jsp로 전송하면 한줄로 주루룩 나온다. 자바에서 개행은 \r\n로 표시하고 이를 request.getParameter로 받은 뒤에 \n을 <br>로 바꿔야 한다
        String userArea = request.getParameter("area");
        String area = userArea.replaceAll("\n", "<br>");
        <body>
            <%=area%>
        </body>
  • ☕️ Advanced Java
    • 과제 풀이
    • Scanner 객체의 next(), nextInt(), nextDouble() 등 nextLine()이 아닌 메서드들은 띄어쓰기, tab, enter를 구분 문자로 분리해서 분리된 자료만 읽어간다. Scanner객체의 nextLine()메서드는 한 줄 단위로 입력한다 즉, 자료를 입력하고 enter키를 누르면 enter키까지 읽어가서 enter키를 뺀 나머지 데이터를 반환한다. 그래서 nextLine() 메서드를 사용하기 전에 nextLine() 이외의 메서드로 입력한 이력이 있는 경우 nextLine() 메서드를 한 번 호출해서 입력 버퍼를 바꿔주어야 한다. 
    • Properties: Map보다 축소된 기능의 객체라고 할 수 있다. Map객체는 키값과 밸류값에 모든 형태의 객체를 사용할 수 있지만, Properties 객체는 키값과 밸류값에 String만 사용할 수 있다. 주로 프로그램의 환경설정에 필요한 정보를 관리하는 용도로 사용된다. Map객체는 put(), get() 메서드로 데이터를 입출력하지만 Properties객체는 setProperty(), getProperty()메서드를 이용해서 데이터를 입출력한다 

 

📆 230425

  • 🎈웹 프로그래밍(프엔)
    • css
      • 인라인요소는 가로세로 크기가 적용되지 않는다 크기를 지정하려면 블럭요소로 바꿔야하는데 블럭요소는 개행이 된다. 인라인요소의 개행이 안되는 특징과 블럭요소의 가로세로 크기가 적용되는 특징을 합치려면 display속성에 inline-block 값을 지정하면 된다.
      • display: block - 인라인 요소를 블럭요소로 바꿈 요소마다 개행시킴
      • html 파일 내에 style 태그를 이용하면 내부 스타일, 태그에 style속성을 이용해 정의하면 인라인 스타일, 별도의 css 파일을 html 문서에 적용하면 외부 스타일이라고 한다
      • 각 스타일마다 우선순위는 인라인 스타일 > 내부 스타일 > 외부 스타일이다
    • html
      • label에 적용한 display: inline-block 스타일을 span태그에도 적용시킬 수 있다.
      • label의 for 속성: 해당 라벨과 짝인 태그의 id값과 같은 값을 입력한다 그럼 짝꿍됨^0^
        ex) <label for="id">아이디</label> <input type="text" name="id" id="id">
      • fieldset: 입력요소들을 그룹으로 묶어준다 form 내부에서 쓰인다. legend: fieldset으로 묶인 그룹의 테두리의 제목을 달아준다
      • input의 type - date, color, number(min, max, step)
      • input의 onclick: 클릭하면 어떻게할지 정의, onchange: 어떻게 변화를 줄지 정의
      • input의 pattern속성: 정규식처럼 입력값의 형태를 정의
        ex) 전화번호(010-0000-0000)를 표현할 때 - <input type="text"  pattern="[0-9]{3}-[0-9]{4}-[0-9]{4}">
      • input의 기타 속성: readonly(읽기 전용. 값 수정 X), disabled(입력값을 비활성화로 설정. 값이 서버로 전송되지 않음)
      • 파비콘을 설정하려면 <link rel="shortcut icon" type="image/x-icon" href="이미지 경로" />
      • input의 required 속성: 필수요소임을 나타냄
      • input의 title 속성: 해당 칸에 커서를 올려두면 지정한 입력예시(값)가 나타남
      • 외부 스타일을 적용하려면: <link rel="stylesheet" href="css파일 경로">
  • ☕️ Advanced Java
    • 매개변수: 메서드를 정의할때 괄호 내에 정의되는 지역변수 / 인수: 매개변수가 있는 메서드를 호출할 때 직접 매개변수 자리에 대입되는 값
    • 배열을 초기화하는 두가지 방식
      1. int[] numArr = {1, 2, 3, 4, 5};
      2. int[] numArr = new int[] {1, 2, 3, 4, 5};
    • 가변형 인수: 메서드의 인수의 개수가 메서드를 호출할 때마다 다를 때 사용한다. 가변형 인수는 메서드 내에서 배열로 처리된다. 그리고 한가지 자료형만 사용할 수 있다.
    • 가변형 인수를 메서드에 적용하려면 '자료형... 매개변수명'으로 입력하면 된다
      public int sumArg(int... data) {
          int sum = 0;
          for (int i = 0; i < data.length; i++) {
              sum += data[i];
          }
          return sum;
      }
    • 가변형 인수를 이용할 때 주의할 점:
      가변형 인수와 일반적인 인수를 같이 사용할 경우에 가변형 인수를 항상 제일 뒤쪽에 배치해야 한다. 
      한 메서드에 가변형 인수는 하나만 사용할 수 있다.
    • Generics: 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크를 해주는 기능
    • 제네릭이 없었을 때에는 클래스에 필드나 메서드를 Object타입으로 정의한 뒤 특정 타입으로 사용할 때 해당 타입으로 형변환을 해야했다. . . 컴파일러에서 형변환을 하라고 해서 하면 막상 타입이 안맞는 경우가 있는데 이는 실행을 하고서야 알 수 있는 에러이다.
    • 제네릭으로 지정하면 컴파일러에서 에러를 알아차려 빠른 대처를 할 수 있다.
    • 제네릭을 적용한 클래스 만드는 방법
      class 클래스명<제네릭타입글자> { // 변수 선언에 제네릭을 사용한 경우
          private 제네릭타입 변수명;
          ...
          public <제네릭타입글자> 메서드명(매개변수들) { // 반환값이 있는 메서드에서 제네릭을 사용한 경우
              ...
              return 반환값;
          }

          public void 메서드명(<제네릭타입글자> 변수명) { // 메서드의 매개변수에 제네릭을 사용한 경우
              ...
          }
      }
    • 제네릭타입글자는 영어대문자 한글자로 표기한다 ex) T(Type), K(Key), V(Value), E(Element)
    • 상수를 선언하려면 static final로 선언하고 이름을 대문자로 지정한다. 상수는 선언과 초기화를 동시에 해야 한다.

 

📆 230426

  • 🎈웹 프로그래밍(프엔)
    • css
      • font-size: 2.0em -  바디 기준 크기(지정하지 않았을 시 기본 font-size 크기는 16px)에서 두배를 늘려라는 의미
      • font-size: 2.0rem - root를 기준으로 증가한다(해당 태그가 다른 태그의 자손이든 아니든) 
      • div ~ p {}: div의 다음 형제 중 p태그에만 적용
      • div + p {}: div의 다음 형제 중 첫번째 p태그에만 적용
      • 의사 클래스: 특정한 상태 / 요소의 구조에 의한 요소를 선택
        특정 상태 ex) a:link {}, a:visited {}, a:hover {}, a:active {}(순서 중요)
        요소의 구조 ex) p:first-child {}(부모를 기준으로 첫자식이 p태그인)
                                 p:nth-child(n) {}(부모를 기준으로 n번째 자식이 p태그인)
                                 p:last-child() {}(부모를 기준으로 마지막 자식이 p태그인)
      • 링크의 밑줄은 text-decoration 속성에서 변경 가능
      • p태그도 hover, active 의사클래스를 사용할 수 있다
      • 속성 선택자: 지정된 속성 또는 속성값으로 요소를 선택
        ex) id가 pp인 p태그: p[id=pp] { }
      • rgba(0~255, 0~255, 0~255, 0.0~1.0): a는 투명도
      • bagkground-image: url(이미지경로); 배경을 이미지로 처리 이미지의 기본 위치는 top-left
      • background-repeat: no-repeat(반복X), repeat-x(가로로 반복), repeat-y(세로로 반복);
      • background-size: 가로 세로; 배경의 크기를 지정(색만 지정하면 적용안됨)
      • background-position 이미지의 위치를 지정할 수 있음 ex) background-position: top right;
        top                              left center right
        center
        bottom
      • background-attachment: scroll(스크롤 종속), fixed(스크롤 종속X)
      • line-height: 줄간격 설정
      •  
    • html
      • <pre> ~ </pre>
        <div> ~ </div>
        <p> ~ </p>
        이렇게 태그가 존재하면 div기준으로 이전형제는 pre, div 다음 형제는 p
  • ☕️ Advanced Java
    • enum(열거형): 서로 관련있는 상수들의 집합을 나타낸다 클래스처럼 보이게 하는 상수이다. 열거형은 클래스처럼 독립된 java파일에 만들 수 있고 하나의 java파일에  클래스와 같이 만들 수도 있고 클래스 안에 내부 클래스처럼 만들 수 있다.
    • 열거형에서 제공하는 속성 및 메서드
      • name(): 열거형 상수의 이름을 문자열로 반환한다
      • ordinal(): 열거형 상수가 정의된 순서(index값, 0부터 시작)을 반환한다
      • valueOf("열거형 상수명"): 지정된 열거형에서 '열거형 상수명'과 일치하는 열거형 상수를 반환한다
      • static values(): 열거형에 선언된 모든 상수들을 배열로 묶어서 반환한다
      • 열거형이름.상수명: valueOf()와 같은 결과를 반환함
    • 열거형 선언하기
      1. 간단ver
        enum 열거형이름 { 
            상수명1, 상수명2, ...
        }
      2. 복잡ver: 열거형 상수에 특정한 값을 지정해서 만들고 싶을 때 사용
        enum 열거형이름 {
            상수명1( 값 ),
            상수명2( 값 ),
            ...
            상수명n(값);

            // 값들을 저장할 변수들을 선언한다
            private 자료형이름 변수명1;
            private 자료형이름 변수명2;

            ...
            private 자료형이름 변수명n;

            // 열거형의  생성자를 만든다 열거형의 생성자는 '열거형 상수'에 '값들'을 변수에 세팅하는 역할을 수행한다
            // 열거형 생성자는 묵시적으로 private으로 지정된다. 열거형의 생성자의 매개변수는 값들과 개수가 같고 자료형 동일

            private 열거형이름(자료형이름 변수명1, ... 자료형이름 변수명n) {
                위에 선언된 변수들을 매개변수로 초기화한다
            
        }

            // 구성된 값들을 외부에서 불러올 수 있는 getter메서드를 만든다
            
        }
    • 서로 다른 종류의 열거형끼리는 비교가 불가능하다
    • 같은 열거형은 if문으로 비교할 수 있다
      if(myColor == Color.BLUE) {
          System.out.println("같다");
      } else {
          System.out.println("다르다");
      }
    • 열거형은 switch문으로 비교할 수도 있다
      switch(myCount) {
          case ONE: // 열거형이름을 입력할 필요 없이 바로 상수를 입력한다
          System.out.println("ONE입니다.");
          break;

          case TWO: 
          System.out.println("TWO입니다.");
          break;

          case THREE: 
          System.out.println("THREE입니다.");
          break;
      }
    • 쓰레드 자바의정석 p.722~724 복습하기
    • 멀티스레드 프로그램을 작성하는 방법
      1. Thread클래스를 상속받는다: Thread를 상속받는 클래스를 작성하고 이 클래스의 인스턴스를 생성한 후 생성된 인스턴스에 start()메서드를 호출해서 실행한다
        상속받으면 run()메서드를 오버라이딩할 수 있는데 이 메서드 안에는 스레드가 처리할 내용을 작성하면 된다
        MyThread1 myThread1 = new MyThread1();
        myThread1.start();
      2. Runnable인터페이스를 구현하는 방법: Runnable인터페이스를 구현한 클래스를 작성하고, 이 클래스의 인스턴스를 생성한다. 그리고 Thread클래스의 인스턴스를 생성할 때 Runnable인터페이스를 구현한 클래스의 인스턴스를 인수값으로 넣어서 생성한다. 생성된 Thread클래스의 인스턴스에 start()메서드를 호출해서 실행한다
        implements를 하면 run()메서드를 구현해야 한다 1번과 마찬가지로 스레드가 처리할 내용을 작성한다
        MyThread2 myThread2 = new MyThread2();
        Thread thread = new Thread(myThread2);
        thread.start();
      3. Runnable인터페이스를 익명구현체로 작성한다
        Runnable runnable = new Runnable() {
            public void run() {
                // 실행할 내용을 작성한다
            }
        };
        Thread thread = new Thread(runnable);
        thread.start();
    • Thread.sleep(long): 주어진 시간동안 작업을 잠시 멈춘다. 단위: 1/1000초(밀리초)
    • Thread를 상속받은 클래스든 Runnable인터페이스를 구현한 클래스든 내부에 run()을 구현해놓고 인스턴스에 run()메서드를 호출해도 된다.
      단, run()을 호출하면 싱글스레드 프로그램으로 작동하게 된다. run()메서드의 동작이 끝나야 메인메서드도 종료한다.
      start()메서드를 호출하면 메인메서드는 진작 끝났지만 스레드의 동작은 끝나지 않고 계속 진행하다가 모든 스레드의 동작이 끝나야 프로그램도 끝나다.
    • start()가 호출되면 스레드가 작동될 콜스택을 더 만들고 그 내부에 run()을 실행시킨다 그래서 메인 메서드와 run메서드는 다른 콜스택에서 작동하기 때문에 애진작에 메인 메서드가 종료돼도 run메서드가 계속 작동하는 것이다
    • System.currentTimeMillis(): 1970/01/01 00:00:00부터 현재시간까지 경과한 시간을 밀리초단위로 반환한다
    • join(): 스레드의 인스턴스에 start()를 호출하면 start()는 run()을 실행시킨다. 그럼 run()은 작동 중이고  start()는 끝이 나버리는데 그 스레드가 종료될 때까지 기다린다
      Runnable runnable = new Runnable() {
          public void run() {
              // 대충 작업할 내용
          }
      };
      Thread thread = new Thread(runnable);
      thread.start();
      try {
          thread.join(); // 위 start()의 run()이 끝날 때까지 메인메서드를 잠시 멈춘다 . . 이런느낌
      } catch (InterruptedExcption e) { }
    • 스레드를 여러개 생성하는 경우 run()메서드를 구현시킬 클래스를 스레드의 개수만큼 맞춰야 되는지 아님 덜 만들어도 되는지 잘 판단을 해서 만들 필요가 있다
      1부터 20억까지 합하는 프로그램을 싱글스레드로 작성했을 때 717밀리초가 걸렸고
                                                           멀티스레드로 작성했을 때 221밀리초가 걸렸다

💭 기록

프로젝트가 끝이 났는데도 피로한 여운이 여전히 남아있는건지 정말 너무 너무 졸리고 몽롱하다 항상 학기 중에 중간고사가 끝나면 마음이 붕 떠서는 해야되는 공부도 안했었는데 ,, 어른이 돼도 여전하구나 나참 ;; 그래도 수업이 꽤 타이트하고 빈틈이 없어서 졸틈도,, 딴짓을 할 틈도 없다(하긴 함) 저번 회고들과 다르게 수업이 바뀌고 나서부터는 회고량이 꽤 많다 그래서 뿌듯함 후후

프론트스앵님은 수업이 정말 스무스하다 따라가다보면 갑자기 css를, 자스를, jsp를 하고있다 대단하고 멋지시다 그리고 자바쌤은 수업이 자바의정석과 유사하다고 생각했는데 진짜였다 대체 쌤은 몇회독을 하셨길래 척척하실까 ,, 나도 그래야겠다 하항 화이팅 나자신

 

 

728x90
반응형