<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>hyper_quanx.log</title>
        <link>https://velog.io/</link>
        <description>장래희망개발자</description>
        <lastBuildDate>Thu, 19 Sep 2024 10:12:53 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>hyper_quanx.log</title>
            <url>https://velog.velcdn.com/images/hyper_quanx/profile/555b093f-9b62-4531-bd2b-47fa2c0956ac/image.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. hyper_quanx.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/hyper_quanx" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[2024. 09. 19 - (TIL) JSP 01]]></title>
            <link>https://velog.io/@hyper_quanx/2024.-09.-19-TIL-JSP-01</link>
            <guid>https://velog.io/@hyper_quanx/2024.-09.-19-TIL-JSP-01</guid>
            <pubDate>Thu, 19 Sep 2024 10:12:53 GMT</pubDate>
            <description><![CDATA[<h1>JSP (Java Server Page)</h1>
- 동적인 웹 페이지를 개발하기 위한 웹 프로그래밍 기술
- JAVA 를 사용하여 서버측에서 웹 페이지를 생성하여 웹 브라우저로 전송

<br>
<br>
<br>

<h2>장점</h2>
- 짧은 코드로 동적인 웹 페이지를 작성
- 기본적인 예외는 자동으로 처리
- 많은 확장 라이브러리를 사용할 수 있음 -> 자바는 오픈소스, 오픈되어 있는 라이브러리가 많음
- 스레드 기반으로 실행, 시스템 자원을 절약해줌

<br>
<br>
<br>

<h2>활용 사례</h2>
- 대한민국 전자정부 프레임워크의 기본
- 전부나 공기업 주도의 사업, 대규모 기업용  시스템 구축에 사용 (우리나라만)

<br>
<br>
<br>

<p><img src="https://velog.velcdn.com/images/hyper_quanx/post/27df3752-ed6e-4ab8-a2fe-b999980e62c9/image.png" alt=""></p>
<br>
<br>
<br>

<h3>애플릿 &lt;-&gt; 액티브엑스(Active X)</h3>
- 자바에서 웹을 동적으로 만들기 위한 기술
- 웹에서 자바 어플리케이션을 전송 후 실행
- 속도, 보안, 유연성의 한계로 현재 사용되지 않음

<br>
<br>
<br>

<h3>서블릿</h3>
- 클라이언트 -> 서버에 요청 -> 응답 결과 전송
- 자바(.java) 를 컴파일 -> 클래스(.class) 파일로 변환
- 서블릿 컨테이너로 아파치 톰캣 사용

<p><img src="https://velog.velcdn.com/images/hyper_quanx/post/9d1ff1e7-006a-4704-837f-eff981e51d0b/image.png" alt=""></p>
<br>
<br>
<br>

<h3>JSP의 특징</h3>
- 서블릿이 자바 코드를 HTML로 변환하는 과정에서 많은 코드를 생성하는 단점 보완
- HTML 선 작업 -> 필요 부분에 Java를 사용하는 형태
- JSP 파일 -> 서블릿으로 변환 후 실행
- JSP는 FrontEnd 부분을 담당, 서블릿은 BackEnd 를 담당

<p><img src="https://velog.velcdn.com/images/hyper_quanx/post/3f5e7843-8e8b-4dda-8f9a-0e72f6a7eb56/image.png" alt=""></p>
<p>.html - 정적 페이지
.jsp - 동적 페이지</p>
<br>
<br>
<br>

<h3>선언부 (`<%! ... %>`)</h3>
<ul>
  <li>JSP 페이지 내에서 <strong>메서드나 변수</strong>를 선언할 때 사용됩니다.</li>
  <li>JSP 페이지가 실행될 때 한 번만 처리되며, 클래스 수준에서 선언됩니다.</li>
</ul>

<h3>스크립틀릿 (`<% ... %>`)</h3>
<ul>
  <li>JSP 페이지 내에서 <strong>자바 코드를 실행</strong>할 수 있는 블록입니다.</li>
  <li>이 코드는 JSP 페이지가 클라이언트에게 응답하기 전에 실행됩니다.</li>
</ul>

<h3>표현식 (`<%= ... %>`)</h3>
<ul>
  <li>자바 표현식의 <strong>결과를 직접 출력</strong>할 때 사용됩니다.</li>
  <li>이 표현식의 결과는 자동으로 HTML에 삽입되어 브라우저로 전달됩니다.</li>
</ul>

<br>
<br>
<br>

<p>지시어(Directive)
JSP를 자바(서블릿)으로 변환 시에 필요한 정보를 JSP 엔진에게 알려줌
스크립트 언어, 인코딩 방식 등을 설정
&lt;%@ 지시어 종류 속성1=&quot;값1&quot; ,,, %&gt;</p>
<p>page 지시어
문서의 종류, 타입, 에러 메시지, MINE 타입 등을 설정</p>
<br>
<br>
<br>

<table border="1">
  <tr>
    <th>속성</th>
    <th>설명</th>
    <th>기본값</th>
  </tr>
  <tr>
    <td>info</td>
    <td>페이지에 대한 설명</td>
    <td>없음</td>
  </tr>
  <tr>
    <td>language</td>
    <td>페이지에서 사용할 스크립팅 언어 지정</td>
    <td>java</td>
  </tr>
  <tr>
    <td>contentType</td>
    <td>페이지에서 생성할 MINE 타입 지정</td>
    <td>없음</td>
  </tr>
  <tr>
    <td>pageEncoding</td>
    <td>charset 과 같이 인코딩 지정</td>
    <td>ISO-8859-1</td>
  </tr>
  <tr>
    <td>import</td>
    <td>페이지에서 사용할 패키지, 클래스 지정(외부파일)</td>
    <td>없음</td>
  </tr>
  <tr>
    <td>session</td>
    <td>세션 사용 여부 설정</td>
    <td>true</td>
  </tr>
  <tr>
    <td>buffer</td>
    <td>출력 버퍼의 크기 지정, 사용하지 않으려면 none</td>
    <td>8kb</td>
  </tr>
  <tr>
    <td>autoFlush</td>
    <td>출력 버퍼가 모두 채워지면 자동으로 비울지 여부</td>
    <td>true</td>
  </tr>
  <tr>
    <td>trimDirectiveWhiteSpaces</td>
    <td>지시어 선언으로 인한 공백 제거 여부 지정</td>
    <td>false</td>
  </tr>
  <tr>
    <td>errorPage</td>
    <td>에러 발생 시 에러처리 페이지 지정</td>
    <td>없음</td>
  </tr>
  <tr>
    <td>isErrorPage</td>
    <td>현재 페이지가 에러를 처리할지 여부 설정</td>
    <td>false</td>
  </tr>
</table>

<br>
<br>
<br>


<h3>language, contentType, pageEncoding 속성</h3>
- JSP 페이지 생성 시 기본 생성되는 지시어
- language : 스크립팅 언어 지정
- contentType : 문서의 MINE, 캐릭터 셋 지정
- pageEncoding : 소스 코드 인코딩 방식 -> 서버하고 다르면 오동작
- import 속성
- - java.lang ~~ :  패키지에 속하지 않는 클래스를 JSP 문서에 삽입하기 위해 사용

<br>
<br>
<br>

<h3>buffer, autoFlush</h3>

<ul>
<li>JSP 에서는 응답 결과를 바로 리턴하지 않고, 버퍼에 저장 후 일정량이 되면 출력</li>
<li>요청마다 매번 리턴하는 것보다 효율적</li>
<li>버퍼를 사용함으로써 포워드(forward), 에러 페이지를 처리할 수 있음</li>
</ul>
<br>
<br>
<br>

<h3>include 지시어</h3>

<ul>
<li>&lt;%@ include file=”포함할 파일 경로” %&gt;</li>
<li>웹 사이트에서 반복되는 영역, 페이지를 여러 페이지에서 함께 사용할 때 사용함</li>
<li>JSP 에서 다른 JSP 페이지를 삽입할 때 사용</li>
<li>include된 파일의 내용도 include한 파일의 내용으로 인식</li>
</ul>
<p>개인 블로그를 제작한 이후 다른 언어들의 내용은 그 블로그에 포스팅 하고 있다.
이전에 정리했던 내용들과 포스팅 한 내용들도 좀 더 깔끔하게 정리해야 하는데... 후우</p>
<p>다음 달 까지는 끝낼 수 있길..</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2024.08.29 - Java 05 클래스와 객체 1]]></title>
            <link>https://velog.io/@hyper_quanx/2024.08.29-Java-05-%ED%81%B4%EB%9E%98%EC%8A%A4%EC%99%80-%EA%B0%9D%EC%B2%B4-1</link>
            <guid>https://velog.io/@hyper_quanx/2024.08.29-Java-05-%ED%81%B4%EB%9E%98%EC%8A%A4%EC%99%80-%EA%B0%9D%EC%B2%B4-1</guid>
            <pubDate>Thu, 05 Sep 2024 09:47:03 GMT</pubDate>
            <description><![CDATA[<h1>클래스와 객체</h1>

<br>
<br>
<br>

<h2>객체란?</h2>

<ul>
<li>객체란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중 자신의 속성을 가지고 있으면서 식별 가능한 것을 의미.</li>
<li>자바는 객체 지향 프로그래밍으로 객체 사이에 일어나는 일을 프로그램으로 구현한 것.</li>
<li>객체 지향 프로그래밍에서는 모든 데이터를 객체(object)로 취급하며, 이러한 객체가 바로 프로그래밍의 중심이 됨</li>
</ul>
<br>
<br>

<h2>클래스란?</h2>

<ul>
<li>자바에서 클래스(class)란 객체를 정의하는 틀 또는 설계도와 같은 의미로 사용</li>
<li>객체의 상태를 나타내는 필드(field)와 객체의 행동을 나타내는 메소드(method)로 구성</li>
<li><ul>
<li>필드(field) : 클래스에 포함된 변수(variable)를 의미</li>
</ul>
</li>
<li><ul>
<li>메소드(method) : 어떠한 특정 작업을 수행하기 위한 명령문의 집합</li>
</ul>
</li>
<li><ul>
<li>인스턴스(instance) : 클래스로부터 객체를 선언하는 과정을 클래스의 인스턴스화라고 하고 선언된 해당 클래스 타입의 객체를 인스턴스(instance)라고 함</li>
</ul>
</li>
</ul>
<br>
<br>

<h2>객체지향의 4가지 특성과 5가지 원칙</h2>

<br>

<h3>객체지향의 4가지 특성</h3>

<ol>
  <li>
    추상화    : 객체의 공통적인 속성과 기능을 추출하여 정의하는것을 의미
    <ul>
      <li>단일 책임 원칙은 클래스(객체)는 단 하나의 책임만 가져야 한다는 원칙</li>
    </ul>
  </li>
  <li>
    상속 : 기존의 클래스를 재활용하여 새로운 클래스를 작성하는 자바의 문법 요소
    <ul>
      <li>단일 책임 원칙은 클래스(객체)는 단 하나의 책임만 가져야 한다는 원칙</li>
    </ul>
  </li>
  <li>
    다형성 : 어떤 객체의 속성이나 기능이 상황에 따라 여러 가지 형태를 가질 수 있는 성질을 의미
    <ul>
      <li>단일 책임 원칙은 클래스(객체)는 단 하나의 책임만 가져야 한다는 원칙</li>
    </ul>
  </li>
  <li>
    캡슐화 : 서로 연관있는 속성과 기능들을 하나의 캡슐로 만들어 데이터를 외부로부터 보호하는 것
    <ul>
      <li>단일 책임 원칙은 클래스(객체)는 단 하나의 책임만 가져야 한다는 원칙</li>
    </ul>
  </li>
</ol>

<br>

<h3>객체지향의 5가지 원칙 (S O L I D)</h3>

<ol>
  <li>
    SRP (Single Responsibility Principle) 단일 책임 원칙
    <ul>
      <li>단일 책임 원칙은 클래스(객체)는 단 하나의 책임만 가져야 한다는 원칙</li>
    </ul>
  </li>
  <li>
    OCP (Open-Closed Principle) 개방-폐쇄 원칙
    <ul>
      <li>추상화 사용을 통한 관계 구축을 권장을 의미</li>
    </ul>
  </li>
  <li>
    LSP (Liskov Substitution Principle) 리스코프 치환 원칙
    <ul>
      <li>단일 책임 원칙은 클래스(객체)는 단 하나의 책임만 가져야 한다는 원칙</li>
    </ul>
  </li>
  <li>
    ISP (Interface Segregation Principle) 인터페이스 분리 원칙
    <ul>
      <li>단일 책임 원칙은 클래스(객체)는 단 하나의 책임만 가져야 한다는 원칙</li>
    </ul>
  </li>
  <li>
    DIP (Dependency Inversion Principle) 의존 역전 원칙
    <ul>
      <li>단일 책임 원칙은 클래스(객체)는 단 하나의 책임만 가져야 한다는 원칙</li>
    </ul>
  </li>
</ol>

<p>SOLID는 Java 과정을 좀 더 배우고 다시 공부해 보라는 강사님 말씀에 일단 기본적인 개념들만 적어보았다. 사실 지금은 무슨 소리인지 잘 이해가 가질 않는다..</p>
<br>
<br>
<br>
<br>

<h3>클래스 작성방법</h3>

<pre><code>package 패키지이름

접근 제어자 class 클래스이름 {
    property;
    method;
}
</code></pre><p>ex)</p>
<pre><code>package test;

public class TestClass {
    int a;
    int b;
    String c;
    String d;
}</code></pre><br>


<h2>패키지란?</h2>
<br>

<p>클래스 파일의 묶음.
패키지를 만들면 프로젝트 하위에 디렉터리가 생성됨.
계층 구조를 가질 수 있다.</p>
<p>위 코드에 패키지를 선언했으니 코드는 스킵.</p>
<br>
<h2>메서드란?</h2>
<br>

<p>어떠한 특정 작업을 수행하기 위한 명령문의 집합</p>
<p>자바는 함수보다는 메서드를 표준으로 부른다.</p>
<br>

<pre><code>package test;

public class TestClass {
    int a;
    int b;
    String c;
    String d;
}

public void showTest () {
    System.out.println(&quot;TestClass&quot; + a + b + c + d);
} // 요게 메서드</code></pre><br>
<h3>메서드 정의하는 방법</h3>

<pre><code>(접근제어자)   void/리턴할 자료의 형태   함수명(매개변수) {
    return 자료형의 값
}</code></pre><p>ex)</p>
<pre><code>int testFunction (int num1, int num2) {
    return num1 + num2;
}</code></pre><p>항상 쓰던 함수와 같다. 확실히 어떤 언어든 하나라도 해본다면 다음 언어를 공부할 때 많은 도움이 되는 것 같다.</p>
<h3>반환값이 없는 메서드</h3>

<pre><code>void testFunctionV (String strr) {
    System.out.println(strr);
    return;
}</code></pre><p>void : 비어있다는 의미
함수 안 로직만 실행됨.</p>
<h3>메서드 사용법</h3>

<pre><code>package test;

public class test {

    public static void main(String[] args) {
        int num1 = 1;
        int num2 = 2;

        int sum = add(num1, num2);
        System.out.println(num1 + &quot;+&quot; + num2 + &quot; = &quot; + sum);
    }

    public static int add(int n1, int n2) {
        return n1 + n2;
    }
}</code></pre><p>결과
1 + 2 = 3</p>
<br>
<br>

<h2>클래스와 인스턴스</h2>

<br>

<h3>main() 함수</h3>

<p>main함수는 자바 가상main함수는 자바 가상 머신(Java Virtual Machine : JVM)이 프로그램을 시작하기 위해 호출하는 함수</p>
<h4>main()함수에서 클래스를 사용하는 방법</h4>
<ol>
  <li>클래스 내부에 main() 함수를 만드는 것</li>
  <li>외부에 테스트용 클래스를 만들어 사용하는 것</li>
</ol>

<br>

<h4>1. 클래스 내부에 main() 함수를 만드는 것</h4>

<pre><code>package test;

public class TestClass {
    int a;
    int b;
    String c;
    String d;

    public String getC() {
        return c;
    }

// 내부에 main 함수 생성
    public static void main(String[] args) {
        TestClass testGen = new TestClass();
        testGen.c = &quot;ccc&quot;;

        System.out.println(testGen.c);
        System.out.println(testGen.getC());
    }
}</code></pre><br>
<br>

<h4>2. 외부에 테스트용 클래스를 만들어 사용하는 것</h4>

<pre><code>// 클래스 생성
package test;

public class TestClass {
    int a;
    int b;
    String c;
    String d;

    public String getC() {
        return c;
    }
}


// 외부 클래스에 main 함수 생성
package test;

public class TestClassTest {
    public static void main(String[] args) {
        TestClass testGen = new TestClass();
        testGen.c = &quot;ccc&quot;;

        System.out.println(testGen.c);
        System.out.println(testGen.getC());
    }
}
</code></pre><ul>
  <li>
    패키지가 다르다면 import 문을 사용해서 원하는 클래스를 불러와야 함.
  </li>
</ul>

<br>

<h3>인스턴스와 참조 변수</h3>

<br>

<p>객체란 의사나 행위가 미치는 대상이고 이를 코드로 구현한 것이 클래스다.
그리고 클래스가 메모리 공간에 생성된 상태를 인스턴스라고 함.
또한, 생성된 클래스의 인스턴스를 객체라고도 한다.</p>
<br>

<p><img src="https://velog.velcdn.com/images/hyper_quanx/post/1c9a55bb-9db6-4810-9aa6-20b6c5b8e7f9/image.png" alt=""></p>
<br>

<ul>
  <li>
    객체 : 객체 지향 프로그램의 대상, 생성된 인스턴스
  </li>
  <li>
    클래스 : 객체를 프로그래밍하기 위해 코드로 만든 상태
  </li>
  <li>
    인스턴스 : 클래스가 메모리에 생성된 상태
  </li>
  <li>
    멤버 변수 : 클래스의 속성, 특성
  </li>
  <li>
    메서드 : 멤버 변수를 이용하여 클래스의 기능을 구현
  </li>
  <li>
    참조 변수 : 메모리에 생성된 인스턴스를 가리키는 변수
  </li>
  <li>
    참조 값 : 생성된 인스턴스의 메모리 주소 값
  </li>
</ul>

<fieldset>
<legend>참조 & 출저</legend>

<p><a href="https://www.tcpschool.com/java/java_class_intro">TCPSCHOOL</a>
<a href="https://www.codestates.com/blog/content/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8A%B9%EC%A7%95">CODEBLOG</a>
<a href="https://inpa.tistory.com/entry/OOP-%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%B6%94%EC%83%81%ED%99%94-%EC%84%A4%EA%B3%84%EC%9D%98-%EC%9D%B4%ED%95%B4">InpaDev</a>
<a href="https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5OOP-%ED%81%B4%EB%9E%98%EC%8A%A4-%EB%AC%B8%EB%B2%95-%F0%9F%92%AF-%EC%B4%9D%EC%A0%95%EB%A6%AC">InpaDev</a></p>
</fieldset>

]]></description>
        </item>
        <item>
            <title><![CDATA[2024.08.28 - Java 04 배열]]></title>
            <link>https://velog.io/@hyper_quanx/2024.08.28-Java-04-%EB%B0%B0%EC%97%B4</link>
            <guid>https://velog.io/@hyper_quanx/2024.08.28-Java-04-%EB%B0%B0%EC%97%B4</guid>
            <pubDate>Thu, 29 Aug 2024 11:45:47 GMT</pubDate>
            <description><![CDATA[<h1>배열</h1>
<br>
<br>
<br>
<h2>배열이란?</h2>

<p>여러 값들을 모은 자료형</p>
<h3>배열은 왜 써야 할까?</h3>

<ul>
<li>배열은 동일한 자료형의 변수를 한꺼번에 순차적으로 관리할 수 있다.</li>
</ul>
<br>
<br>

<h3>배열 선언과 초기화</h3>

<pre><code>// 1차원 배열

// 크기 할당과 초기화 없이 배열만 선언
int[] arr; // 이걸 많이 사용함.
// or
int arr[];


// 선언과 동시에 배열 크기 할당
int[] arr = new int[3];

String[] arr = new String[3];

// 기존 배열의 참조 변수에 초기화 할당하기
int[] arr;

arr = new int[5]; //5의 크기를 가지고 초기값 0으로 채워진 배열 생성

// 선언과 동시에 배열의 크기 지정 및 값 초기화
int[] arr = {1, 2, 3};
// or
int[] arr = new int[]  {1, 2, 3};</code></pre><p><em>참고로 기본타입(Primitive type)의 배열인 경우 초기값을 가지고 있는 반면에(int = 0) 참조타입(Reference type)의 배열을 선언했을 경우 배열내 엘리먼트의 초기값이 null이다.</em> </p>
<br>

<pre><code>// 2차원 배열

// 크기 할당과 초기화 없이 배열만 선언
int[][] arr; // 이걸 많이 사용함.
// or
int arr[][];


// 선언과 동시에 배열 크기 할당
int[][] arr = new int[3][4]; // 3x4 크기의 배열 선언 (모든 값은 0으로 초기화)

// 각 행의 길이가 다른 배열도 선언 가능
int[][] arr = new int[3][]; // 열의 크기는 아직 할당하지 않음
arr[0] = new int[2]; // 첫 번째 행은 크기 2
arr[1] = new int[3]; // 두 번째 행은 크기 3
arr[2] = new int[4]; // 세 번째 행은 크기 4

// 선언과 동시에 배열의 크기 지정 및 값 초기화
int[][] arr = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};
// or
int[][] arr = new int[][] {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};
</code></pre><br>

<h3>문자 배열</h3>

<pre><code>package test;

public class Test1StringArrayTest {
    public static void main(String[] args) {
        char[] alphabets = new char[26];
        char ch = &#39;A&#39;;

        for(int i = 0; i &lt; alphabets.length; i++, ch++) {
            alphabets[i] = ch; // 아스키 값으로 각 요소에 저장
        }

        for(int j = 0; j &lt; alphabets.length; j++) {
            System.out.println(alphabets[j]);
        }
    }
}</code></pre><p>출력 결과 : A ~ Z 출력</p>
<br>

<h3>객체 배열</h3>

<p>동일한 기본 자료형 변수 여러 개를 배열로 사용할 수 있듯이 참조 자료형 변수도 여러 개를 배열로 사용할 수 있다.</p>
<pre><code>package test;

public class Test2ObjectArrayTest1 {
    private String bookName;
    private String author;

    public Test2ObjectArrayTest1() {} // 기본 생성자

    public Test2ObjectArrayTest1(String bookName, String author) {
        this.bookName = bookName; // 책 이름을 매개변수로 받는 생성자
        this.author = author; // 저자 이름을 매개변수로 받는 생성자
    }

    public String getBookName() {
        return bookName; // getter
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public String getAuthor() {
        return author; // getter
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public void showBookInfo() {
        System.out.println(bookName + &quot;,&quot; + author);
    } // 책 정보를 출력해 주는 메서드
}
</code></pre><br>
<br>

<pre><code>package test;

public class Test2ObjectArrayTest2 {

    public static void main(String[] args) {
        Test2ObjectArrayTest1[] library = new Test2ObjectArrayTest1[5];

        for(int i = 0; i &lt; library.length; i++) {
            System.out.println(library[i]);
        }
    }

}
</code></pre><p>결과 값 : null null null null null</p>
<p>인스턴스 주소 값을 담을 공간 5개가 생성되었다. null은 공간은 생성되었지만 비어있다는 의미</p>
<h4>
각 배열 요소에 인스턴스를 생성해 넣어보기
</h4>

<pre><code>package test;

public class Test2ObjectArrayTest3 {

    public static void main(String[] args) {
        Test2ObjectArrayTest1[] library = new Test2ObjectArrayTest1[5];
        for(int i = 0; i &lt; library.length; i++) {
            library[i] = new Test2ObjectArrayTest1(&quot;책 제목&quot; + (i + 1), &quot;책 저자&quot; + (i + 1));
        }

        for(int i = 0; i &lt; library.length; i++) {
            library[i].showBookInfo();
        }

        for(int i = 0; i &lt; library.length; i++) {
            System.out.println(library[i]);
        }
    }

} // 클래스 명 짧게 할걸...</code></pre><p>배열의 각 요소에 인스턴스를 직접 저장하고 인스턴스 주소값도 출력해보았다.</p>
<br>

<p>출력 값</p>
<blockquote>
  책 제목1,책 저자1
책 제목2,책 저자2
책 제목3,책 저자3
책 제목4,책 저자4
책 제목5,책 저자5
test.Test2ObjectArrayTest1@38082d64
test.Test2ObjectArrayTest1@dfd3711
test.Test2ObjectArrayTest1@42d3bd8b
test.Test2ObjectArrayTest1@26ba2a48
test.Test2ObjectArrayTest1@5f2050f6
</blockquote>


<p>배열 복사는 주말에 이어서 작성</p>
<fieldset>
<legend>참조 & 출저</legend>

<p><a href="https://ifuwanna.tistory.com/231">ifuwanna-TiStory</a></p>
</fieldset>
]]></description>
        </item>
        <item>
            <title><![CDATA[2024.08.28 - Java 03 조건문과 반복문]]></title>
            <link>https://velog.io/@hyper_quanx/2024.08.28-Java-03-%EC%A1%B0%EA%B1%B4%EB%AC%B8%EA%B3%BC-%EB%B0%98%EB%B3%B5%EB%AC%B8</link>
            <guid>https://velog.io/@hyper_quanx/2024.08.28-Java-03-%EC%A1%B0%EA%B1%B4%EB%AC%B8%EA%B3%BC-%EB%B0%98%EB%B3%B5%EB%AC%B8</guid>
            <pubDate>Thu, 29 Aug 2024 00:46:58 GMT</pubDate>
            <description><![CDATA[<h1>조건문과 반복문</h1>

<br>
<br>
<br>
<h2>조건문</h2>

<p>주어진 조건에 따라 다른 문장을 선택할 수 있도록 프로그래밍하는 것</p>
<h3>if, if-else</h3>

<p>if (조건1) {
    내부 로직;  &lt;=  조건1이 참일 경우 실행
} else if (조건2) {
    내부 로직;  &lt;=  조건2가 참일 경우 실행
}
else {
    내부 로직;  &lt;=  조건 1, 2에 해당하지 않으면 실행
}</p>
<h3>switch-case</h3>

<p>swutch(x) {
    case 1 : x = &#39;a&#39;;
    break;
    case 2 : x = &#39;b&#39;;
    break;
    case 3 : x = &#39;c&#39;;
    break;
    default : x = &#39;x&#39;; &lt;= 아무 조건에 해당하지 않는다면
}</p>
<br>

<h2>반복문</h2>

<h3>for</h3>


<p>for(int i = 0; i &lt; 10; i++) {
    반복 로직;
}</p>
<ul>
<li>i가 0부터 9까지 증가</li>
<li>총 10번 반복 로직을 실행함.</li>
</ul>
<br>


<h3>while</h3>

<p>int cnt = 1;</p>
<p>while(cnt &lt;= 10) {
    반복 로직;
    cnt++;
}</p>
<ul>
<li>cnt가 10과 같거나 클 때까지 반복 로직을 실행함.</li>
<li>조건에 해당되지 않으면 while문에 들어가지 않음.</li>
<li>조건에서 탈출하지 못하면 무한반복</li>
</ul>
<h4>이런 반복문도 있다!</h4>
~~ for(;;){} = while(){} <= 멋있긴 한데 이런거 쓰지 말자 ~~

<br>

<h3>do-while</h3>

<p>do {
    반복 로직;
} while(조건);</p>
<ul>
<li>while은 조건에 들어가지 않으면 실행되지 않지만 do while은 한번은 실행함.</li>
</ul>
<h3>continue</h3>

<p>반복문이나 조건문에서 continue를 만나면 이후 문장을 무시하고 처음으로 돌아가서 반복을 진행한다</p>
<br>

<h3>break</h3>

<p>반복문이나 조건문에서 break를 만나면 더 이상 로직을 진행하지 않고 탈출하게 됨.</p>
<br>








<fieldset>
  <legend>결론</legend>
  많은 언어를 다뤄보지는 않았지만 코딩은 조건문과 반복문에서 시작하고 끝난다는 말이 과언이 아닌 것 같다. 특히 Java의 조건문과 반복문은 원래 배웠던 Js와 대동소이하기 때문에 사용하기 편했다.
</fieldset>]]></description>
        </item>
        <item>
            <title><![CDATA[2024.08.28 - Java 02 변수와 자료형, 연산자]]></title>
            <link>https://velog.io/@hyper_quanx/2024.08.28-Java-02-%EB%B3%80%EC%88%98%EC%99%80-%EC%9E%90%EB%A3%8C%ED%98%95-%EC%97%B0%EC%82%B0%EC%9E%90</link>
            <guid>https://velog.io/@hyper_quanx/2024.08.28-Java-02-%EB%B3%80%EC%88%98%EC%99%80-%EC%9E%90%EB%A3%8C%ED%98%95-%EC%97%B0%EC%82%B0%EC%9E%90</guid>
            <pubDate>Wed, 28 Aug 2024 23:59:01 GMT</pubDate>
            <description><![CDATA[<h1> 변수와 자료형, 연산자 </h1>

<br>

<h2> 자료형의 종류와 크기 </h2>

<p><img src="https://velog.velcdn.com/images/hyper_quanx/post/c76122f6-1832-4fa2-99b4-b8c3e3321b26/image.png" alt=""></p>
<br>

<ul>
<li>기본 자료형 이외에는 모두 참조 자료형</li>
</ul>
<br>
<br>

<h2>정수 자료형</h2>

<ul style="margin-left:40px">
  <li style="font-size:25px">byte</li>
  <li style="font-size:25px">short</li>
  <li style="font-size:25px">int</li>
  <li style="font-size:25px">long</li>
</ul>
<br>
<br>
<h3>1. byte</h3>
<ul>
  <li>1byte = 8bit</li>
  <li>바이트 단위의 정보를 저장하거나 통신할 때 주로 사용</li>
  <li>표현할 수 있는 수의 범위 : -2<sup>7</sup> ~ 2<sup>7</sup>-1 <= ( -128 ~ 127 )</li>
</ul>
<br>
<h3>2. short</h3>
<ul>
  <li>2byte</li>
  <li>표현할 수 있는 수의 범위 : -2<sup>15</sup> ~ 2<sup>15</sup>-1 <= ( -32768 ~ 32767 )</li>
</ul>
<br>
<h3>3. int</h3>
<ul>
  <li>4byte</li>
  <li>표현할 수 있는 수의 범위 : -2<sup>31</sup> ~ 2<sup>31</sup>-1 <= ( -2147483648 ~ 2147483647 )</li>
  <li>가장 많이 사용하는 자료형</li>
  <ul>
      <li>컴퓨터에서 정수로 연산을 할 때 4바이트 단위로 처리하는 것이 가장 효율적임.</li>
  </ul>
</ul>
<br>
<h3>4. long</h3>
<ul>
  <li>8byte</li>
  <li>표현할 수 있는 수의 범위 : -2<sup>63</sup> ~ 2<sup>63</sup>-1 <= ( -18,446,744,073,709,551,616 ~ 18,446,744,073,709,551,615 )</li>
  <li>주의할 점</li>
  <ul>
    <li>자바는 모든 정수값을 int형으로 처리함.</li>
    <li>만약 long을 써도 int의 크기에서 벗어날 경우 에러가 남.</li>
    <li>컴파일러에게 long으로 처리하라고 알려주어야 하기 때문에 long으로 선언하여도 숫자 뒤에 식별자인 L이나 l을 사용</li>
    <li>대부분 가독성을 위해 대문자를 사용</li>
    <li>ex) long num = 123456789000l  <-- 구분 안감. / long num = 123456789000L <-- 바로 구분이 됨.</li>
  </ul>
</ul>

<h4> 다른 타입끼리 연산 시 자동으로 높은 쪽 캐스팅이 됨.</h4>

<br>
<br>
<br>

<h2>실수 자료형</h2>

<ul>
  <li style="font-size:25px">float</li>
  <li style="font-size:25px">double</li>
</ul>
<br>
<br>
<h3>1. float</h3>
<ul>
  <li>4byte</li>
  <li>자바에서 실수는 double형을 기본으로 사용</li>
  <li>long의 식별자와 같이 오류방지를 위해 F 또는 f를 붙여야 함.</li>
  <li>똑같이 대부분 대문자 사용 ex) float num = 3.14F</li>
</ul>

<br>

<h3>2. double</h3>
<ul>
  <li>8byte</li>
  <li>자바에서 실수는 double형을 기본으로 사용</li>
  <li>float에 비해 더 정밀하게 실수를 표현할 수 있음.</li>
</ul>
<br>
<br>
<h4>부동 소수점 방식</h4>
<ul>
  <li>실수 값 0.1은 1.0 X 10<sup>-1</sup>로 표현할 수 있음.</li>
  <li>가수 부분(1.0)과 지수 부분(-1)을 나누어서 실수를 나타내는 방식</li>
</ul>

<br>
<br>
<br>

<h2>문자 자료형</h2>

<li style="font-size:25px">char</li>
<ul>
  <li>2Byte</li>
  <li>문자는 아스키 코드 값으로 '인코딩' 된 후 컴퓨터에 저장됨.</li>
  <li>숫자도 저장 가능하지만 음수를 넣으면 오류가 생김.</li>
</ul>

<br>
<br>
<br>

<h2>논리 자료형</h2>

<li style="font-size:25px">boolean</li>
<ul>
  <li>1Byte</li>
  <li>어떤 논리에 대한 참, 거짓</li>
</ul>

<br>
<br>
<br>

<h2>상수와 리터럴, 형 변환</h2>

<br>

<h4>상수 : 항상 변하지 않는 값</h4>

<p>상수를 사용하기 위해선 final 예약어를 사용해야 함.
ex) final double PI = 3.14;</p>
<p>상수 이름은 대문자를 주로 사용.</p>
<br>

<h4>리터럴 : 프로그램에서 사용하는 모든 숫자, 문자, 논리값을 일컫는 말</h4>
<br>
<h4>형 변환 : 다른 자료형을 하나의 자료형으로 통일한 후 연산을 하는 과정</h4>
컴퓨터는 정수와 실수의 표현되는 방식이 전혀 다르기 때문에 하나로 통일 후 연산을 함.
크게 묵시적 형 변환(자동 형 변환)과 명시적 형 변환(강제 형 변환)으로 구별됨.

<br>
<br>
<h4>묵시적 형 변환의 관계</h4>

<p>Byte -&gt; short, char -&gt; int -&gt; long -&gt; float -&gt; double</p>
<p>화살표 방향으로 자동 형 변환이 됨.</p>
<ol>
  <li>바이트 크기가 작은 자료형에서 큰 자료형으로 대입하는 경우</li>
  <li>덜 정밀한 자료형에서 더 정밀한 자료형으로 대입하는 경우</li>
  <li>연산 중에 자동으로 변환되는 경우</li>
</ol>

<br>

<h4>명시적 형 변환</h4>

<p>묵시적 형 변환과 반대의 경우로 생각할 수 있음.</p>
<ol>
  <li>바이트 크기가 큰 자료형에서 작은 자료형으로 대입하는 경우</li>
  <li>더 정밀한 자료형에서 덜 정밀한 자료형으로 대입하는 경우</li>
  <li>연산 중 형 변환</li>
</ol>

<br>
<br>

<h2> 연산자 </h2>

<br>

<h3>기본 연산자</h3>

<p>연산자는 항의 개수에 따라 단항 연산자, 이항 연산자, 삼항 연산자로 나눌 수 있다.</p>
<ol>
  <li style="font-size:25px">대입 연산자</li>
  <li style="font-size:25px">부호 연산자</li>
  <li style="font-size:25px">산술 연산자</li>
  <li style="font-size:25px">증,감 연산자</li>
  <li style="font-size:25px">관계 연산자</li>
  <li style="font-size:25px">논리 연산자</li>
  <li style="font-size:25px">복합 대입 연산자</li>
  <li style="font-size:25px">조건 연산자</li>
</ol>
<br>
<h3>1. 대입 연산자</h3>
<ul>
  <li>우선순위가 가장 낮은 연산자</li>
  <li>오른쪽 변수 값이나 식의 연산 결과 값을 왼쪽 변수에 대입</li>
  <li>ex) int a = 1;</li>
</ul>
<br>
<h3>2. 부호 연산자</h3>
<ul>
  <li>+, -</li>
  <li>더하기, 빼기에 스는 이항 연산자면서 부호를 나타내는 단항 연산자로도 사용 가능</li>
  <li>ex) int num = -3</li>
</ul>
<br>
<h3>3. 산술 연산자</h3>
<ul>
  <li>사칙연산</li>
  <li>+, -, *, /, %</li>
    <ul>
    <li>+ : 덧셈</li>
    <li>- : 뺄셈</li>
    <li>* : 곱</li>
    <li>/ : 나누어 몫</li>
    <li>% : 나누어 나머지</li>
    </ul>
</ul>
<br>
<h3>4. 증,감 연산자</h3>
<ul>
  <li>연산자 앞이나 뒤에 사용하여 값을 1 증가, 1 감소</li>
  <li>++, --</li>
    <ul>
    <li>++ : 1 증가</li>
    <li>-- : 1 감소</li>
    <li>위치에 따라 연산 결과 차이가 있음.</li>
    </ul>
</ul>
<br>
<h3>5. 관계 연산자</h3>
<ul>
  <li>두 개의 항의 관계 여부 검사</li>
  <li>오른쪽이 큰 기준으로</li>
    <ul>
    <li>> : 왼쪽 항이 크면 참, 아니면 거짓</li>
    <li>< : 오른쪽 항이 크면 참, 아니면 거짓 </li>
    <li>>= : 왼쪽 항이 오른쪽 항보다 크거나 같으면 참, 아니면 거짓</li>
    <li><= : 오른쪽 항이 왼쪽 항보다 크거나 같으면 참, 아니면 거짓</li>
    <li>== : 두 개의 항이 같으면 참, 아니면 거짓</li>
    <li>!= : 두 개의 항이 다르면 참, 아니면 거짓</li>
    </ul>
</ul>
<br>
<h3>6. 논리 연산자</h3>
<ul>
  <li>명제</li>
    <ul>
    <li>&&(논리 곱) : 모두 참인 경우에만 참</li>
    <li>||(논리 합) : 둘 중 하나가 참인 경우 참</li>
    <li>!(부정) : 참은 거짓으로, 거짓은 참으로</li>
    </ul>
</ul>
<br>
<h3>7. 복합 대입 연산자</h3>
<ul>
  <li>대입 연산자와 다른 연산자를 조합해 하나의 연산자처럼 사용하는 연산자</li>
  <li>우선순위가 가장 낮음.</li>
    <ul>
    <li>+= : 두 항의 값을 더해서 왼쪽 항에 대입</li>
    <li>-= : 왼쪽 항에서 오른쪽 항을 빼고 값을 왼쪽 항에 대입</li>
    <li>*= : 두 항의 값을 곱해서 왼쪽 항에 대입</li>
    <li>/= : 왼쪽 항을 오른쪽 항으로 나누어 몫을 왼쪽 항에 대입</li>
    <li>%= : 왼쪽 항을 오른쪽 항으로 나누어 나머지를 왼쪽 항에 대입</li>
    <li><<= : 비트를 왼쪽으로 이동 후 값을 왼쪽항에 대입</li>
    <li>>>= : 비트를 오른쪽으로 이동하고 값을 왼쪽 항에 대입</li>
    <li>>>>= : 비트를 오른쪽으로 이동하고 값을 왼쪽 항에 대입</li>
    <li>&= : 두 항의 & 비트 연산 후 값을 왼쪽 항에 대입</li>
    <li>|= : 두 항의 | 비트 연산 후 값을 왼쪽 항에 대입</li>
    <li>^= : 두 항의 ^ 비트 연산 후 값을 왼쪽 항에 대입</li>
    </ul>
</ul>
<br>
<h3>8. 조건 연산자</h3>
<ul>
  <li>삼항 연산자</li>
  <li>조건 ? 결과1 : 결과2;</li>
    <ul>
    <li>ex) int num = (10 > 7) ? '참' : '거짓'  <-- 결과 '참' </li>
    </ul>
</ul>
<br>
<br>
<br>
<h3>비트 연산자</h3>

<ul>
  <li>비트 단위로 연산이 이루어지는 연산자</li>
  <li>프로그램에서 특정 값을 만들거나 연산할 때 사용</li>
</ul>
<br>
<br>
<ul>
  <li style="font-size:25px">비트 논리 연산자</li>
  <ul>
  <li>&, |, ^, ~</li>
  <li>& 연산자</li>
    <ul>
    <li>두 개의 비트 값이 모두 1인 경우에만 연산의 결과 값이 1이 됨.</li>
    <li>ex)</li>
      <ul>
      <li>int num1 = 5; <- 2진수로 00000101</li>
      <li>int num2 = 10; <- 2진수로 00001010</li>
      <li>int result = num1 & num2;</li>
      <li>num1 : 00000101, num2 : 00001010 이기 때문에 결과 값은 0이 된다.</li>
      </ul>
    </ul>
    <li>| 연산자</li>
    <ul>
    <li>비트 값이 하나라도 1이면 연산 결과 값이 1이 됨.</li>
    <li>ex)</li>
      <ul>
      <li>int num1 = 5; <- 2진수로 00000101</li>
      <li>int num2 = 10; <- 2진수로 00001010</li>
      <li>int result = num1 | num2;</li>
      <li>연산 결과 00001111 <- 10진수 변환 시 15기 때문에 결과값이 15가 됨.</li>
      </ul>
    </ul>
    <li>^ 연산자</li>
    <ul>
    <li>같은 값이면 0, 다른 값이면 1</li>
    <li>ex)</li>
      <ul>
      <li>int num1 = 5; <- 2진수로 00000101</li>
      <li>int num2 = 7; <- 2진수로 00000111</li>
      <li>int result = num1 ^ num2;</li>
      <li>num1 : 0101, num2 : 0111 이기 때문에 0010이 된다. 결과값 : 2</li>
      </ul>
    </ul>
    <li>~ 연산자</li>
    <ul>
    <li>0은 1로, 1은 0으로 바꿈.</li>
    <li>ex)</li>
      <ul>
      <li>int num1 = 5; <- 2진수로 00000101</li>
      <li>int result = ~num1;</li>
      <li>~num1 : 11111010으로 -6이 됨.</li>
      <li>11111010 : 반전시긴 후 + 1 <- 00000101 + 1 = 00000110 <= 6이므로 -6</li>
      </ul>
    </ul>
</ul>
</ul>
<br>
<h3>보수</h3>

<p>주어진 수를 다른 수로 바꾸는 연산을 의미함.
이진수에서 주로 사용된다.</p>
<ul>
  <li>2의 보수</li>
  <ul>
    <li>음수를 표현하기 위한 방법</li>
      <ol>
      <li>
        양수의 이진수 표현 : 절대값이 양수인 이진수를 구함.
      </li>
      <li>
        비트 반전 : 모든 비트를 반전시킴. 0은 1로 1은 0으로
      </li>
      <li>
        1 더하기 : 반전된 이진수에 1을 더함.
      </li>
      <li>
        ex) -6을 2의 보수로 표현하기
      </li>
        <ol>
          <li>
            양수 6을 8비트 이진수로 표현하면 00000110
          </li>
          <li>
            비트를 반전시키면 11111001
          </li>
          <li>
            1을 더하면 11111010이 됨.
          </li>
        </ol>
    </ol>
  </ul>
</ul>


<br>

<ul>
<li style="font-size:25px">비트 이동 연산자</li>
  <ul>
    <li><<, >>, >>></li>
    <li>시프트 연산자라고도 부름.</li>
      <ul>
        <li>
          << 연산자
          <ul>
            <li>
                  왼쪽으로 비트를 이동하는 연산자
            </li>
            <li>
                  ex)
                  <ul>
                  <li>
                      int num = 5; <- 00000101
                  </li>
                  <li>
                      num << 2; <- 00010100
                  </li>
                  <li>
                      결과값 : 20
                  </li>
                  <li>
                    왼쪽으로 n비트 이동한다는 것은 기존 값에 2<sup>n</sup>만큼 곱한다는 뜻
                  </li>
                  <li>
                      5 * 2<sup>2</sup> = 20 
                  </li>
                </ul>
            </li>
          </ul>
        </li>
      </ul>
      <ul>
        <li>
          >> 연산자
          <ul>
            <li>
                  오른쪽으로 비트를 이동하는 연산자
            </li>
            <li>
                  ex)
                  <ul>
                  <li>
                      int num = 10; <- 00001010
                  </li>
                  <li>
                      num >> 2; <- 00000010
                  </li>
                  <li>
                      결과값 : 2
                  </li>
                  <li>
                    오른쪽으로 n비트 이동한다는 것은 기존 값에 2<sup>n</sup>만큼 나눈다는 뜻 (왜 소수점이 버려지나 했더니 int로 선언했음..)
                  </li>
                  <li>
                      10 / 2<sup>2</sup> = 2 <- int
                  </li>
                </ul>
            </li>
          </ul>
        </li>
      </ul>
      <ul>
        <li>
          >>> 연산자
          <ul>
            <li>
                  >>이랑 동일하게 오른쪽으로 비트를 이동하는 연산자
            </li>
            <li>
                  왼쪽에 채워지는 비트값이 부호 비트와 상관없이 무조건 0이 되는 차이
            </li>
            <li>
                  ex)
                  <ul>
                  <li>
                      int num = 10; <- 00001010
                  </li>
                  <li>
                      num >>> 2; <- 00000010
                  </li>
                  <li>
                      결과값 : 2
                  </li>
                  <li>
                    사실 뭐가 다른지 잘 모르겠다.
                  </li>
                </ul>
            </li>
          </ul>
        </li>
      </ul>
  </ul>
</ul>
<h3>>>, >>> 연습</h3>
<div>
-6 : 11111010

<p>-6 &gt;&gt;</p>
<p>11111110
00000001 + 1 = 00000010 &lt;- 2 그래서 2인가?</p>
<p>연습</p>
<p>ex) -11</p>
<p>11은 00001011
반전 =&gt; 11110100
+1 -&gt; 11110101</p>
<p>-11 &gt;&gt;2;</p>
<p>11110101을 두칸 옮기면 11111101 (1로 채워진다 가정하면)
11111101 &lt;- 00000010 &lt;- 00000011 &lt;- 3 = -3 
아마 음수는 1로 채워지는게 맞는 것 같다</p>
<p>그럼 -11을 &gt;&gt;&gt; 하면?</p>
<p>&amp;nbsp&gt;&gt;&gt;는 0으로 채운다 했으니 0으로 채워넣기
-11 &gt;&gt;&gt;2 는 11110101 -&gt; 00111101 이것도 반전 시켜야 하나? 일단 시키면 11000010 +1도 해보면 11000011임. 11000011 : 195
근데 막상 자바에 찍어보면 1073741821라는 난해한 숫자가 나옴
노가다로 1073741821를 16비트 2진법으로 바꾸면
해볼라했는데 16비트로도 불가능
32비트라고 치면</p>
<p>2의 0승 : 1
2의 1승 : 2
2의 2승 : 4
2의 3승 : 8
2의 4승 : 16
2의 5승 : 32
2의 6승 : 64
2의 7승 : 128
2의 8승 : 256
2의 9승 : 512
2의 10승 : 1024
2의 11승 : 2048
2의 12승 : 4096
2의 13승 : 8192
2의 14승 : 16384
2의 15승 : 32768
2의 16승 : 65536
2의 17승 : 131072
2의 18승 : 262144
2의 19승 : 524288
2의 20승 : 1048576
2의 21승 : 2097152
2의 22승 : 4194304
2의 23승 : 8388608
2의 24승 : 16777216
2의 25승 : 33554432
2의 26승 : 67108864
2의 27승 : 134217728
2의 28승 : 268435456
2의 29승 : 536870912
2의 30승 : 1073741824
2의 31승 : 2147483648</p>
<p>결론은 2의 30승에서 3을 뺀 값이니 32비트로 표현하면 00111111111111111111111111111100이다.</p>
<p>사실 졸면서 계산해서 맞는지 잘 모르겠다.</p>
</div>
<br>
<br>
<br>

<p>자료형의 크기(값의 범위) 순서
byte &lt; short/char &lt; int &lt; long &lt; float &lt; double</p>
<br>

<h3>
연산자 우선순위  
</h3>
<ol>
  <li>
    일차식 : ()  []  . &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp연산방향 →
  </li>
  <li>
    단항 : !  ++  --  +  - &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp연산방향 ←
  </li>
  <li>
    산술 : %  / &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp연산방향 →
  </li>
  <li>
    산술 : +  - &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp연산방향 →
  </li>
  <li>
    비트 이동 : <<  >> &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp연산방향 →
  </li>
  <li>
    관계 : <  >  <=  >= &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp연산방향 →
  </li>
  <li>
    관계 : ==  != &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp연산방향 →
  </li>
  <li>
    비트 곱 : & &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp연산방향 →
  </li>
  <li>
    비트 차 : ^ &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp연산방향 →
  </li>
  <li>
    비트 합 : | &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp연산방향 →
  </li>
  <li>
    논리 곱 : && &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp연산방향 →
  </li>
  <li>
    논리 합 : || &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp연산방향 →
  </li>
  <li>
    조건 :  ?: &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp연산방향 →
  </li>
  <li>
    대입 : =  +=  -=  *=  %=  /= &nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp연산방향 ←
  </li>
</ol>


<br>
<br>
<br>
<fieldset>
  <legend>결론</legend>
비트 연산자를 처음 접해봐서 여러가지 방식으로 삽질을 했었다.. 좀 더 개념을 알게 되면 내용을 수정해야 할 것 같다.
</fieldset>

  <br>

  <br>

  <br>




<p>참조 &amp; 출저
<a href="https://memostack.tistory.com/206">Java 자료형</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2024.08.27 - Java 01 초기 세팅]]></title>
            <link>https://velog.io/@hyper_quanx/2024.08.27-Java-01</link>
            <guid>https://velog.io/@hyper_quanx/2024.08.27-Java-01</guid>
            <pubDate>Wed, 28 Aug 2024 10:07:31 GMT</pubDate>
            <description><![CDATA[<h1>자바를 시작하기 전에..</h1>
<br>
<br>
<br>

<p>자바의 버전은 Java SE 11.0.24 (LTS)를 사용.
<a href="https://www.oracle.com/java/technologies/downloads/#java11-windows">여기서 다운</a>
editer는 Eclipse를 사용</p>
<p>windows admin의 이름이 한글이면 예상치 못한 오류 발생 가능성 ↑
<br/></p>
<h2> Java Initial Settings </h2>

<p>에디터나 자바 등 여러 프로그램 다운로드 폴더에 설치 X
(경로에 한글 있을 시에 오류 생길 가능성 ↑)</p>
<p>내 PC 우클릭 -&gt; 속성 -&gt; 고급 시스템 속성 -&gt; 고급 -&gt; 환경 변수 -&gt; 시스템 변수 -&gt; 새로 만들기 ↓</p>
<p><img src="https://velog.velcdn.com/images/hyper_quanx/post/f37741de-6a04-4818-8f0b-9b186a710516/image.png" alt=""></p>
<p>디렉터리 찾아보기로 자바를 다운받은 드라이브에 접근해서 JDK폴더 찾고 경로에 넣어주기.</p>
<p><img src="https://velog.velcdn.com/images/hyper_quanx/post/c04987d0-5efc-4db3-a954-59a54aabd8a5/image.png" alt=""></p>
<p>CLASSPATH도 설정. 경로는 JDK 폴더 안에 있는 lib 폴더로</p>
<p>환경 변수 -&gt; 시스템 변수 -&gt; Path에서</p>
<p><img src="https://velog.velcdn.com/images/hyper_quanx/post/2a51eef8-61a4-4afc-9b08-93866936b6f0/image.png" alt=""></p>
<p>기존에 설치해서 생긴 oracle/java 경로를 삭제 후 위 사진처럼 새로 생성.</p>
<br/>
<br/>
<br/>

<h2> Eclipes Initial settings </h2>

<p>상단의 window -&gt; Preferences</p>
<p><img src="https://velog.velcdn.com/images/hyper_quanx/post/44dffa10-131f-4c6d-ba79-8ec66e57be12/image.png" alt="">
<br/>
<img src="https://velog.velcdn.com/images/hyper_quanx/post/6f6e4478-7d5f-4b26-bcca-579dd6afa806/image.png" alt="">
<br/>
<img src="https://velog.velcdn.com/images/hyper_quanx/post/ace32d84-3179-4e4b-aaf1-2d451f3ddcff/image.png" alt="">
Autosave 체크 (거의 필수)
<img src="https://velog.velcdn.com/images/hyper_quanx/post/c391c896-7b33-41ec-b8ac-182deaf9ff76/image.png" alt="">
HTML, CSS, JSP, XML 등 UTF-8로 되어있는지 확인하기</p>
<br>
<br>
<br>
<br>
<br>
강사님께서는 자바는 세팅이 반이라는 말씀을 하셨다. 백엔드 첫 경험.. 잘 해내고 싶다.]]></description>
        </item>
        <item>
            <title><![CDATA[2024. 08. 01 - (TIL) Js Event, DOM 정리]]></title>
            <link>https://velog.io/@hyper_quanx/2024.-08.-01-TIL-Js-Event-DOM-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@hyper_quanx/2024.-08.-01-TIL-Js-Event-DOM-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Thu, 01 Aug 2024 09:46:30 GMT</pubDate>
            <description><![CDATA[<h1>이벤트</h1>
    <ul>
      <li>웹 브라우저나 사용자가 행하는 동작</li>
      <li>웹 문서 (DOM) 영역 안에서 발생하는 동작으로 한정</li>
      <li>마우스, 키보드, 웹 문서 로딩 시, 폼 내용 작성,,,,</li>
    </ul>

   <h2>이벤트의 종류</h2>
    <ul>
      <li>
        마우스 이벤트
        <ul>
          <li>onclick : HTML, 요소, 영역을 클릭할 때 발생</li>
          <li>ondbclick : 두 번 클릭할 때 발생</li>
          <li>onmouseover :</li>
          <li>onmouseout :</li>
          <li>onmousemove :</li>
          <li>onmousedown :</li>
          <li>onmouseup :</li>
          <li>onwheel :</li>
        </ul>
      </li>
      <li>
        키보드 이벤트
        <ul>
          <li>onkeypress : 키를 누를 때</li>
          <li>onkeydown : 키를 누르는 동안</li>
          <li>onkeyup : 눌렀던 키가 올라올 때(손을 땔 때)</li>
          <li>대부분 keyup/down 많이 씀</li>
        </ul>
      </li>
      <li>
        포커스 이벤트
        <ul>
          <li>onfocus : 요소에 포커스(커서, 포인터)가 되면</li>
          <li>onblur : 요소가 포커스를 잃으면</li>
        </ul>
      </li>
      <li>
        폼 이벤트
        <ul>
          <li>onsubmit : 폼 전송 될 때</li>
          <li>reset : 폼 요소 값 초기화</li>
        </ul>
      </li>
      <li>
        문서 관련 이벤트
        <ul>
          <li>onload : 문서 로딩이 끝나면 발생</li>
          <li>resize : 문서 화면의 크기가 바뀌면 발생</li>
          <li>scrool : 화면이 스크롤되면 발생</li>
          <li>about : 문서가 완전히 로딩되기 전에 화면이 멈추면 발생</li>
          <li>error : 문서가 정확히 로딩되지 않고 에러가 발생할 경우</li>
          <li>unload : 문서에서 벗어날 때 발생</li>
        </ul>
      </li>
    </ul>



<h1>브라우저 객체 모델의 종류</h1>
    <ul>
      <li>
        window : 웹 브라우저가 열릴 때마다 생성되는 최상위 객체
        <ul>
          <li>innerWidth : 웹 브라우저 화면 너비(px)</li>
          <li>innerHeight : 웹 브라우저 화면 높이(px)</li>
          <li>outerWidth : 웹 브라우저 창의 너비(px)</li>
          <li>outerHeight : 웹 브라우저 창의 높이(px)</li>
          <li>screenTop/screenY : 웹 브라우저 위쪽 면과 모니터의 간격</li>
          <li>screenLeft/screenX : 웹 브라우저 왼쪽 면과 모니터의 간격</li>
          <li>pageXOffset/scroolX : 웹 브라우저의 수평 스크롤 위치</li>
          <li>pageYOffset : 웹 브라우저의 수직 스크롤 위치</li>
        </ul>
        <ul>
          <li>
            <h3>주요 메서드</h3>
          </li>
          <li>alert() : 알림창 표시</li>
          <li>confirm() : 확인창 표시</li>
          <li>prompt() : 입력창 표시</li>
          <li>open() : 새로운 웹 브라우저 창 열기</li>
          <li>close() : 웹 브라우저 닫기</li>
          <li>setTimeout() : 일정 시간(ms) 뒤에 콜백 함수를 한 번만 실행</li>
          <li>setInterval() : 일정 시간(mns)마다 콜백 함수를 반복 실행</li>
          <li>
            clearInterval() : setInterval() 메서드를 반복 실행되는 함수를 중지
          </li>
          <li>scrollTo() : 웹 브라우저의 스크롤을 특정 위치로 이동</li>
          <li>
            scrollBy() : 웹 브라우저의 스크롤을 현재 위치에서 상대 위치로 이동
          </li>
        </ul>
      </li>
      <li>
        document : 웹 브라우저에 표시되는 HTML 문서 정보가 포함된 객체 ->
        &lt;html>&lt;/html>
      </li>
      <li>
        location : 웹 브라우저에 현재 표시된 페이지에 대한 URL 정보가 포함된
        객체
      </li>
      <li>history : 웹 브라우저에 저장된 방문 기록이 포함된 객체</li>
      <li>navigator : 웹 브라우저(메뉴) 정보가 포함된 객체</li>
      <li>screen : 웹 브라우저의 화면 정보가 포함된 객체</li>
    </ul>

<pre><code>&lt;h1&gt;문서 객체 모델 (DOM : Document Object Model)&lt;/h1&gt;
&lt;ul&gt;
  &lt;li&gt;
    DOM 트리
    &lt;ul&gt;
      &lt;li&gt;
        웹 문서에 있는 요소들 간의 부모, 자식 관계를 계층 구조로 표시한 것
      &lt;/li&gt;
      &lt;li&gt;자바스크립트가 이해할 수 있도록 객체화한 모델 구조&lt;/li&gt;
      &lt;li&gt;나무 형태로 표현되기 때문에 DOM 트리 라고 함&lt;/li&gt;
      &lt;li&gt;노드(node) : DOM 트리에서 가지가 갈라져 나간 항목&lt;/li&gt;
      &lt;li&gt;루트 노드 (root node) : DOM 트리의 시작 부분&lt;/li&gt;
      &lt;li&gt;모든 HTML 태그는 요소(element) 노드&lt;/li&gt;
      &lt;li&gt;
        웹 문서의 텍스트 내용은 요소 노드의 자식 노드인 텍스트(text)노드
      &lt;/li&gt;
      &lt;li&gt;태그의 속성 : 요소 노드의 자식 노드인 속성(attribute)노드&lt;/li&gt;
      &lt;li&gt;주석 : 주석(comment) 노드&lt;/li&gt;
      &lt;li&gt;
        attribute vs property
        &lt;ul&gt;
          &lt;li&gt;
            &lt;a
              href=&quot;https://inpa.tistory.com/entry/%F0%9F%8C%90-attribute-property-%EC%B0%A8%EC%9D%B4&quot;
              &gt;여기를 참고 (출저 : Inpa Dev)&lt;/a
            &gt;
          &lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    노드의 타입
    &lt;ul&gt;
      &lt;li&gt;
        문서 노드(Node.DOCUMENT_NODE) : 최상위 DOCUMENT 객체의 노드 타입
      &lt;/li&gt;
      &lt;li&gt;
        요소 노드(Node.ELEMENT_NODE) : 요소의 노드 타입 -&gt; h1, p 태그
        등등...
      &lt;/li&gt;
      &lt;li&gt;
        속성 노드(Node.ATTRIBUTE_NODE) : 속성의 노드 타입 -&gt; href. src...
      &lt;/li&gt;
      &lt;li&gt;텍스트 노드(Node.TEXT_NODE) : 텍스트에 해당하는 노드 타입&lt;/li&gt;
      &lt;li&gt;주석 노드(Node.COMMENT_NODE) : 주석에 해당하는 노드 타입&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;
    DOM 요소에 접근 방법
    &lt;ul&gt;
      &lt;li&gt;
        getElementById(&quot;id이름&quot;) 메서드
        &lt;ul&gt;
          &lt;li&gt;형식 : 요소명.getElementById(&quot;id명&quot;)&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;
        getElementByClass() 메서드
        &lt;ul&gt;
          &lt;li&gt;형식 : 요소명.getElementByClass(&quot;class명&quot;)&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;
        getElementByName() 메서드
        &lt;ul&gt;
          &lt;li&gt;형식 : 요소명.getElementByName(&quot;태그명&quot;)&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;
        querySelector() 메서드
        &lt;ul&gt;
          &lt;li&gt;형식 : 요소명.querySelector(&quot;선택자&quot;)&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;
        querySelectorAll() 메서드
        &lt;ul&gt;
          &lt;li&gt;형식 : 요소명.querySelectorAll(&quot;선택자 또는 태그&quot;)&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[2024. 07. 26 - (TIL) JS If, Loop, Function Study]]></title>
            <link>https://velog.io/@hyper_quanx/2024.-07.-26-TIL-JS-If-Loop-Function-Study</link>
            <guid>https://velog.io/@hyper_quanx/2024.-07.-26-TIL-JS-If-Loop-Function-Study</guid>
            <pubDate>Tue, 30 Jul 2024 09:59:49 GMT</pubDate>
            <description><![CDATA[<p>오늘은 Javascript의 if, loop, function에 대해서 공부해보았다.</p>
<h1 id="잊지-말아야-할-내용">잊지 말아야 할 내용</h1>
<ul>
<li>자바스크립트 이벤트 생명주기 (Life Cycle)</li>
<li>호이스팅</li>
<li>컴파일 방식(자바스크립트는 인터프리터 방식으로 위에서 순차적으로 내려옴)</li>
</ul>
<h2 id="조건문">조건문</h2>
<p>if ( 조건문 ) {<br />
      실행문1;<br />
      실행문2;<br />
      실행문3;<br />
      } else if ( 조건문 2 ) {<br />
      실행문1-1;<br />
      실행문2-1;<br />
      실행문3-1;<br />
      } else {<br />
      실행문4;<br />
      실행문5;<br />
      }<br /></p>
<h2 id="반복문">반복문</h2>
<ul>
    <li>
        for 문
        <p>for ( 초기값; 조건; 증가식 ) { 실행문; 조건문; 반복문; 함수; ...}</p>
      </li>
      <li>초기값 : for 문에서 사용하는 반복 조건값을 초기화</li>
      <li>조건 : 조건이 true 동안에 for 문이 반복</li>
      <li>증가식 : for문이 반복되는 동안 초기값 증가</li>
    </ul>


   <ul>
      <li>white문</li>
      <li>
        <p>
          white (조건) {<br />
          실행구문; for문; while문; 함수; 선언; break; continue; ..... }<br />
        </p>
      </li>
      <li>do ~ while문</li>
      <li><p>do{ 실행구문; break; continue; } while(조건);</p></li>
    </ul>





<h2 id="함수function">함수(function)</h2>
  <ul>
      <li>어떤 목적을 가지고 작성한 코드를 모아놓은 블록문</li>
      <li>각 명령의 시작과 끝을 명확히 구분할 수 있음</li>
      <li>
        함수를 정의한다 :
        <ul>
          <li>블록문을 구성한다.</li>
          <li>function 키워드</li>
          <li>식별자</li>
          <li>소괄호</li>
        </ul>
      </li>
      <li>코드의 재활용이 가능</li>
      <li>
        function 함수명(매개변수) {<br />
        실행구문;<br />
        함수;<br />
        로직;<br />
        변수;<br />
        [return 값;]<br />
        }
      </li>
      <li>
        함수 표현식
        <ul>
          <li>
            익명 함수
            <ul>
              <li>변수에 바로 할당</li>
              <li>let 변수명 = fucntiion (매개변수){ }</li>
              <li>변수명(매개변수,,,,,)</li>
              <li>변수명(10, 20)</li>
              <li>function sum(매개변수1, 매개변수2) {}, sum(10, 20)</li>
            </ul>
          </li>
          <li>
            네이밍 함수
            <ul>
              <li>변수에 할당하는 함수에 식별자가 있을 때</li>
              <li>const 변수명 = function 이름() {}</li>
            </ul>
          </li>
          <li>
            즉시 실행 함수
            <ul>
              <li>(function(){실행구문;}(인수));</li>
              <li>(function(매개변수,,,,){실행구문;,,,}(인수));</li>
              <li>페이지가 로딩될 때 즉시 실행</li>
              <li>jQuery</li>
            </ul>
          </li>
          <li>
            화살표 함수
            <ul>
              <li>ES6에 정의</li>
              <li>오로지 익명함수에만 정의</li>
              <li>() => {}</li>
              <li>
                const sum = () => {로직};<br />
                sum();
              </li>
              <li>
                //onclick="(e) => {e.target.value}"//
              </li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>   


]]></description>
        </item>
        <item>
            <title><![CDATA[2024. 07. 26 - Javascript 시작]]></title>
            <link>https://velog.io/@hyper_quanx/2024.-07.-26-Javascript-%EC%8B%9C%EC%9E%91</link>
            <guid>https://velog.io/@hyper_quanx/2024.-07.-26-Javascript-%EC%8B%9C%EC%9E%91</guid>
            <pubDate>Fri, 26 Jul 2024 08:51:17 GMT</pubDate>
            <description><![CDATA[<p>오랜만에 javascript 입문</p>
<h1 id="자바스크립트의-자료형">자바스크립트의 자료형</h1>
<h3 id="숫자형number">숫자형(number)</h3>
<h4 id="--숫자-형태의-데이터를-처리">- 숫자 형태의 데이터를 처리</h4>
<h4 id="--정수---3--2-0-1-10">- 정수 : -3, -2, 0, 1, 10</h4>
<h4 id="--실수---025-0-30">- 실수 : -0.25, 0, 3.0</h4>
<h4 id="--실수의-소수점-이하-자릿수에-대하여-정밀도를-보장하지-않는다">- 실수의 소수점 이하 자릿수에 대하여 정밀도를 보장하지 않는다.</h4>
<h3 id="문자열string">문자열(string)</h3>
<h4 id="--문자가-한-개-이상-이어져-있는-것을-문자열">- 문자가 한 개 이상 이어져 있는 것을 문자열</h4>
<h4 id="--a-a-aaaaa-aaaaa-다-똑같이-인식함">- &#39;a&#39;, &quot;a&quot;, &#39;aaaaa&#39;, &quot;aaaaa&quot; 다 똑같이 인식함.</h4>
<h3 id="논리형boolean">논리형(boolean)</h3>
<h4 id="--참true-또는-거짓false-값을-표현">- 참(true) 또는 거짓(false) 값을 표현</h4>
<h4 id="--조건을-확인해서-맞으면-true-틀리면-false">- 조건을 확인해서 맞으면 true, 틀리면 false</h4>
<h3 id="undefined-유형">undefined 유형</h3>
<h4 id="--자료형이-정의되지-않았을-때의-데이터-상태">- 자료형이 정의되지 않았을 때의 데이터 상태</h4>
<h4 id="--변수-선안만-하고-값이-할당되지-않은-상태">- 변수 선안만 하고 값이 할당되지 않은 상태</h4>
<h3 id="null-유형">null 유형</h3>
<h4 id="--데이터의-값이-유효하지-않은-상태">- 데이터의 값이 유효하지 않은 상태</h4>
<h4 id="--변수에-할당된-값이-유효하지-않다는-의미">- 변수에 할당된 값이 유효하지 않다는 의미</h4>
<h3 id="배열array">배열(array)</h3>
<h4 id="--하나의-변수에-여러-값을-저장할-수-있는-유형">- 하나의 변수에 여러 값을 저장할 수 있는 유형</h4>
<h4 id="--자료형의-유형이-같은-값을-할당">- 자료형의 유형이 같은 값을 할당</h4>
<h3 id="객체">객체</h3>
<h4 id="--배열도-객체의-일종">- 배열도 객체의 일종</h4>
<h4 id="--함수와-속성을-함께-포함">- 함수와 속성을 함께 포함</h4>
<h4 id="--배열-함수-객체-리터럴-등으로-파생되는-상위-자료형">- 배열, 함수, 객체 리터럴 등으로 파생되는 상위 자료형</h4>
<h4 id="--객체-리터럴--중괄호를-사용-키key-값value-한-쌍으로-이루어진-데이터">- 객체 리터럴 : 중괄호({})를 사용, 키(key), 값(value) 한 쌍으로 이루어진 데이터</h4>
<h3 id="연산자의-종류">연산자의 종류</h3>
<h4 id="-----수학과-동일">+, -, *, / 수학과 동일</h4>
<h4 id="--퍼센트-연산자-모듈러-연산자---나머지를-구하는-연산자">% : 퍼센트 연산자, 모듈러 연산자 - 나머지를 구하는 연산자</h4>
<h4 id="--피연산자를-1-증가">++ : 피연산자를 1 증가</h4>
<h4 id="----피연산자를-1-감소">-- : 피연산자를 1 감소</h4>
<h4 id="xx--제곱승--axxa-aa--별이-안되서-xx로-대체-">xx : 제곱승 ==&gt; axxa, a^a ( 별이 안되서 xx로 대체 )</h4>
<h3 id="논리-연산자">논리 연산자</h3>
<h4 id="--or-연산자---피연산자-중-하나만-true여도-true">- OR 연산자 || : 피연산자 중 하나만 true여도 true</h4>
<h4 id="--and-연산자---피연산자가-모두-true일-경우에만-true">- AND 연산자 &amp;&amp; : 피연산자가 모두 true일 경우에만 true</h4>
<h4 id="--not-연산자---피연산자의-반댓값을-사용">- NOT 연산자 ! : 피연산자의 반댓값을 사용</h4>
<p>역시 공부 안한 티가 난다. JS 메서드 들도 거의 기억 안나고 로직도 다 까먹었다.
오늘은 금요일. 토요일에 작은 프로젝트 끝내고 일요일에 js 강의를 다시 들어야겠다.</p>
<p><a href="https://google.github.io/styleguide/jsguide.html">구글 스타일 가이드 참조</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2024. 07. 24 (TIL) - mediaQuery, flex]]></title>
            <link>https://velog.io/@hyper_quanx/2024.-07.-24-TIL-mediaQuery-flex</link>
            <guid>https://velog.io/@hyper_quanx/2024.-07.-24-TIL-mediaQuery-flex</guid>
            <pubDate>Wed, 24 Jul 2024 09:46:31 GMT</pubDate>
            <description><![CDATA[<h1 id="미디어-쿼리">미디어 쿼리</h1>
<h3 id="미디어-쿼리-구문">미디어 쿼리 구문</h3>
<h4 id="--media-속성을-사용">- @media 속성을 사용</h4>
<h4 id="--적용할-미디어-대상-지정">- 적용할 미디어 대상 지정</h4>
<h4 id="--적용할-css를-지정">- 적용할 css를 지정</h4>
<h4 id="--style태그-사이에-정의">- style태그 사이에 정의</h4>
<h4 id="--형식--media-notonly-미디어타입-and-조건--and-조건---css-코드--">- 형식 : @media [not|only] 미디어타입 [and 조건] * [and 조건] { /* css 코드 */ }</h4>
<h4 id="--속성값">- 속성값</h4>
<ul>
<li>not : 다음에 지정하는 미디어타입을 제외</li>
<li>only : 미디어 쿼리를 지원하지 않는 웹 브라우저에서는 무시</li>
<li>and : 여러 개를 연결하여 추가 가능<h4 id="미디어-유형">미디어 유형</h4>
</li>
<li>all : 지원하는 모든 미디어</li>
<li>print : 인쇄 장치에서 사용할 css 정의</li>
<li>screen : 컴퓨터 스크린과 같은 모니터 스크린, 스마트폰 포함</li>
<li>tv : TV</li>
<li>aural : 음성 신호 장치(TTS 같은 장비들)</li>
<li>braille : 점자 표시 장치</li>
<li>handheld : 패드같은 이동성 장치</li>
<li>projection : 프로젝트 같은 장비</li>
<li>tty : 디스플레이 기능이 성능이 낮은 장비들</li>
<li>embossed : 점자 프린터<h3 id="웹-문서-기준-가로세로">웹 문서 기준 가로/세로</h3>
<h4 id="--실제-웹-문서-내용이-표현되는-영역의-가로세로">- 실제 웹 문서 내용이 표현되는 영역의 가로/세로</h4>
<h4 id="--width-height">- width, height</h4>
<h4 id="--min-width-min-height----브라우저-사이즈에-대해-컨텐츠가-노출-영역의-변동-최저-값">- min-width, min-height --&gt; 브라우저 사이즈에 대해 컨텐츠가 노출 영역의 변동 최저 값</h4>
<h4 id="--max-width-max-height----디바이스-구분-용도">- max-width, max-height --&gt; 디바이스 구분 용도</h4>
<h4 id="--media-screen-and-min-width1440px---css-코드--">- @media screen and (min-width:1440px) { /* css 코드 */ }</h4>
<h4 id="--너비가-최소-1440px인-화면에서-플레이-되는-스타일">- 너비가 최소 1440px인 화면에서 플레이 되는 스타일</h4>
<h3 id="단말기-기준">단말기 기준</h3>
<h4 id="--단말기-해상도와-실제-브라우저의-너비가-다름">- 단말기 해상도와 실제 브라우저의 너비가 다름</h4>
<h4 id="--device-width-device-height">- device-width, device-height</h4>
<h4 id="--min-device-width-min-device-height">- min-device-width, min-device-height</h4>
<h4 id="--max-device-width-max-device-height">- max-device-width, max-device-height</h4>
<h4 id="--media-screen-and-min-device-width380px-and-min-device-height812px---css-코드--">- @media screen and (min-device-width:380px) and (min-device-height:812px) { /* css 코드 */ }</h4>
<h3 id="화면-회전-기준">화면 회전 기준</h3>
<h4 id="--orientation--portrait---단말기-세로모드">- orientation : portrait - 단말기 세로모드</h4>
<h4 id="--orientation--landscape---단말기-가로모드">- orientation : landscape - 단말기 가로모드</h4>
</li>
</ul>
<br/>

<br/>

<br/>

<br/>

<br/>

<br/>


<h1 id="그리드-레이아웃">그리드 레이아웃</h1>
<h3 id="--반응형-웹-디자인에서-웹-문서의-요소를-배치하는-기준">- 반응형 웹 디자인에서 웹 문서의 요소를 배치하는 기준</h3>
<h3 id="--웹-사이트의-화면을-여러-개의-컬럼으로-나눠서-배치">- 웹 사이트의 화면을 여러 개의 컬럼으로 나눠서 배치</h3>
<h3 id="--화면을-규칙적으로-배치하고-레이아웃-일관적으로-관리-편리">- 화면을 규칙적으로 배치하고, 레이아웃 일관적으로 관리 편리</h3>
<h3 id="--시각적으로-안정된-디자인">- 시각적으로 안정된 디자인</h3>
<h3 id="--업데이트가-편함">- 업데이트가 편함</h3>
<h3 id="--요소-자유롭게-배치하는-것이-가능">- 요소 자유롭게 배치하는 것이 가능</h3>
<h3 id="--구성하는-방법">- 구성하는 방법</h3>
<h4 id="----플렉스-박스-레이아웃">- - 플렉스 박스 레이아웃</h4>
<ul>
<li>수평방향, 수직방향 중 하나를 축으로 정하고 박스를 배치</li>
<li>여유 공간이 생길 경우, 너비나 높이를 적절하게 늘리거나 줄일 수 있음</li>
<li>주축 : 플렉스 박스의 진행 방향</li>
<li>교차축 : 주축과 수직방향</li>
<li>플렉스 컨테이너 : display 속성 값으로 flex, inline-flex 사용</li>
<li>플렉스 아이템 : 플렉스 컨테이너의 자식관계를 이루는 요소<h4 id="----플렉스-박스의-기본-속성">- - 플렉스 박스의 기본 속성</h4>
</li>
<li>display 속성</li>
<li><ul>
<li>flex : 컨테이너 안의 플렉스 항목을 블록 레벨 요소로 배치</li>
</ul>
</li>
<li><ul>
<li>inline-flex : 플렉스 항목을 인라인 레벨 요소로 배치</li>
</ul>
</li>
<li><ul>
<li>형식 : display:flex / inline-flex</li>
</ul>
</li>
<li>flex-direction 속성</li>
<li><ul>
<li>플렉스 박스 레이아웃의 주축 방향 지정</li>
</ul>
</li>
<li><ul>
<li>형식 : flex-direction:속성값</li>
</ul>
</li>
<li><ul>
<li>row : 주축 방향을 왼쪽-&gt;오른쪽</li>
</ul>
</li>
<li><ul>
<li>row-reverse : 주축 방향을 오른쪽-&gt;왼쪽</li>
</ul>
</li>
<li><ul>
<li>column : 주축 방향을 위-&gt;아래</li>
</ul>
</li>
<li><ul>
<li>column-reverse : 주축 방향을 아래-&gt;위</li>
</ul>
</li>
<li>flex-wrap 속성</li>
<li><ul>
<li>플렉스 아이템의 자동 줄바꿈 여부 처리</li>
</ul>
</li>
<li><ul>
<li>형식 : flex-wrap:속성값</li>
</ul>
</li>
<li><ul>
<li>nowrap : 아이템이 플렉스 컨테이너의 영역을 벗어나도 무시</li>
</ul>
</li>
<li><ul>
<li>wrap : 아이템이 컨테이너 영역을 벗어나면 줄바꿈</li>
</ul>
</li>
<li><ul>
<li>wrap-reverse : 아이템이 컨테이너 영역을 벗어나면 wrap의 역방향으로 줄바꿈</li>
</ul>
</li>
<li>flex-flow 속성</li>
<li><ul>
<li>flex-direction과 flex-wrap 속성을 한번 사용할 수 있는 단축 속성</li>
</ul>
</li>
<li><ul>
<li>형식 : flex-flow:direction wrap</li>
</ul>
</li>
<li><ul>
<li>기본값 : flex-flow:row no-wrap</li>
</ul>
</li>
<li>justify-content 속성</li>
<li><ul>
<li>플렉스 아이템을 모두 주축 방향으로 정렬</li>
</ul>
</li>
<li><ul>
<li>형식 : justify-content:속성값</li>
</ul>
</li>
<li><ul>
<li>flex-start : 주축 방향의 시작점 기준으로 정렬</li>
</ul>
</li>
<li><ul>
<li>flex-end : 주축 방향의 끝점을 기준으로 정렬</li>
</ul>
</li>
<li><ul>
<li>center : 주축 방향의 중앙을 기준으로 정렬</li>
</ul>
</li>
<li><ul>
<li>space-between : 플렉스 아이템 사이의 간격이 일정하도록 정렬</li>
</ul>
</li>
<li><ul>
<li>space-around : 플렉스 아이템의 둘레가 일정하도록 정렬</li>
</ul>
</li>
<li><ul>
<li>space-evenly : 아이템의 사이, 양끝 간격이 일정하도록 정렬</li>
</ul>
</li>
<li>align-items, align-self 속성</li>
<li><ul>
<li>플렉스 아이템을 모두 교차축 방향으로 정렬</li>
</ul>
</li>
<li><ul>
<li>교차축에서 특정 항목만 지정할 경우 align-self</li>
</ul>
</li>
<li><ul>
<li>형식 : align-items:속성값</li>
</ul>
</li>
<li><ul>
<li>flex-start : 교차축 방향의 시작점을 기준으로 정렬</li>
</ul>
</li>
<li><ul>
<li>flex-end : 교차축 방향의 끝을 기준으로 정렬</li>
</ul>
</li>
<li><ul>
<li>center : 교차축 방향의 중앙을 기준으로 정렬</li>
</ul>
</li>
<li><ul>
<li>baseline : 플렉스 아이템의 baseline을 기준으로 정렬</li>
</ul>
</li>
<li><ul>
<li>stretch : 교차축 방향으로 플렉스 아이템의 너비, 높이가 늘어남</li>
</ul>
</li>
<li>align-content 속성</li>
<li><ul>
<li>플렉스 아이템이 두 줄 이상일 때 교차축 방향으로 정렬</li>
</ul>
</li>
<li><ul>
<li>형식 : align-content:속성값</li>
</ul>
</li>
<li><ul>
<li>flex-start : 교차축 시작점에 맞춰 배치</li>
</ul>
</li>
<li><ul>
<li>flex-end : 교차축 끝점에 맞춰 배치</li>
</ul>
</li>
<li><ul>
<li>center : 교차축 기준 중앙에 맞춰 배치</li>
</ul>
</li>
<li><ul>
<li>space-between : 첫 항목, 끝 항목은 교차축의 시작과 끝에 맞추고, 사이간격은 같은 간격으로 배치</li>
</ul>
</li>
<li><ul>
<li>space-around : 교차축에 모든 항목을 같은 간격으로 배치</li>
</ul>
</li>
<li><ul>
<li>stretch : 교차축 방향으로 플렉스 아이템의 너비, 높이가 늘어남</li>
</ul>
</li>
</ul>
<br/>

<br/>

<br/>

<h3 id="css-그리드-레이아웃">CSS 그리드 레이아웃</h3>
<h4 id="--최근-등장한-css-표준">- 최근 등장한 css 표준</h4>
<h4 id="--수평이나-수직이나-어디로든-배치-가능">- 수평이나 수직이나 어디로든 배치 가능</h4>
<h4 id="--레고블럭-끼우듯이-처리">- 레고블럭 끼우듯이 처리</h4>
<h4 id="--양쪽-축-방향을-모두-사용할-수-있음2차원-레이아웃">- 양쪽 축 방향을 모두 사용할 수 있음(2차원 레이아웃)</h4>
<h4 id="--행row-컬럼column으로-화면-구성">- 행(row), 컬럼(column)으로 화면 구성</h4>
<h4 id="--행-열-사이의-여백-조절----table과-유사">- 행, 열 사이의 여백 조절 --&gt; table과 유사</h4>
<h4 id="--그리드-셀grid-cell--행과-열이-만나서-이루어지는-공간">- 그리드 셀(grid cell) : 행과 열이 만나서 이루어지는 공간</h4>
<h4 id="--그리드-갭grid-gap--그리드-셀과-셀-사이의-간격">- 그리드 갭(grid gap) : 그리드 셀과 셀 사이의 간격</h4>
<h4 id="--그리드-아이템grid-item--그리드-셀-안의-컨텐츠">- 그리드 아이템(grid item) : 그리드 셀 안의 컨텐츠</h4>
<h4 id="--그리드-라인grid-line--그리드-행과-열을-그리는-선">- 그리드 라인(grid line) : 그리드 행과 열을 그리는 선</h4>
<h4 id="--그리드-넘버grid-number--그리드-라인에-붙는-번호">- 그리드 넘버(grid number) : 그리드 라인에 붙는 번호</h4>
<h4 id="--그리드-컨테이너grid-container--그리드-아이템을-묶는감싸는-부모-요소">- 그리드 컨테이너(grid container) : 그리드 아이템을 묶는(감싸는) 부모 요소</h4>
<br/>

<br/>

<br/>

<h3 id="그리드-레이아웃-속성">그리드 레이아웃 속성</h3>
<h4 id="display-속성">display 속성</h4>
<ul>
<li>grid : 컨테이너 안의 항목을 블록 레벨 요소로 배치</li>
<li>inline-grid : 컨테이너 안의 항목을 인라인 레벨 요소로 배치<h4 id="grid-template-columns-grid-template-rows-속성">grid-template-columns, grid-template-rows 속성</h4>
</li>
<li>grid-template-columns : 그리드 컨테이너 안의 컬럼 개수, 너비값</li>
<li>grid-template-rows : 그리드 컨테이너 안의 줄 갯수, 너비값</li>
<li>형식 : grid-template-columns:1열값 2열값 .....</li>
<li>형식 : grid-template-rows:1행값 2행값 .....</li>
<li>컬럼에 지정하는 값 -&gt; 상대크기로 지정 가능 --&gt; 테이블 colspan과 같은 개념</li>
<li>형식 : grid-template-columns: 2fr 1fr 2fr<h4 id="row-gap-column-gap-속성">row-gap, column-gap 속성</h4>
</li>
<li>그리드 셀과 셀 사이의 간격</li>
<li>형식 : row-gap:크기</li>
<li>형식 : column-gap:크기<h4 id="align-items-속성">align-items 속성</h4>
</li>
<li>그리드 아이템 전체를 셀의 세로 방향으로 정렬</li>
<li>stretch : 그리드 아이템이 그리드 셀을 가득 채우도록 크기를 늘림</li>
<li>start : 그리드 아이템을 그리드 셀의 세로 방향 중간에 배치</li>
<li>end : 그리드 아이템을 그리드 셀의 맨 아래에 배치<h4 id="align-self-속성">align-self 속성</h4>
</li>
<li>각각의 그리드 아이템을 셀의 세로 방향으로 각각 지정<h4 id="justify-items-속성">justify-items 속성</h4>
</li>
<li>그리드 아이템 전체를 셀의 가로 방향으로 정렬</li>
<li>stretch : 그리드 아이템이 그리드 셀을 가득 채우도록 크기를 늘림</li>
<li>start : 그리드 아이템을 그리드 셀의 왼쪽 끝에 배치</li>
<li>center : 그리드 아이템을 그리드 셀의 가로 방향 중간에 배치</li>
<li>end : 그리드 아이템을 그리드 셀의 오른쪽 끝에 배치<h4 id="justify-self-속성">justify-self 속성</h4>
</li>
<li>각각의 그리드 아이템을 셀의 가로 방향으로 정렬<h4 id="place-item-속성">place-item 속성</h4>
</li>
<li>align-items, justify-items 속성을 한 번에 지정</li>
<li>형식 : place-items: align-items속성 justify-items속성<h4 id="place-self-속성">place-self 속성</h4>
</li>
<li>align-self, justify-self 속성을 한 번에 지정</li>
<li>형식 : place-self: align-self속성 justify-selfthrtjd<h4 id="grid-template-areas-속성">grid-template-areas 속성</h4>
</li>
<li>그리드 레이아웃에 행과 열을 이름으로 지정<h4 id="grid-area-속성">grid-area 속성</h4>
</li>
<li>그리드 아이템에 이름을 지정<h4 id="grid-column-start-grid-column-end">grid-column-start, grid-column-end</h4>
</li>
<li>그리드 레이아웃에서 열의 시작, 끝번호 지정</li>
<li>형식 : grid-column-start:속성값</li>
<li>형식 : grid-column-end:속성값<h4 id="grid-row-start-grid-row-end-속성">grid-row-start, grid-row-end 속성</h4>
</li>
<li>그리드 레이아웃에서 행의 시작, 끝번호 지정</li>
<li>형식 : grid-row-start:속성값</li>
<li>형식 : grid-row-end:속성값<h4 id="grid-column">grid-column</h4>
</li>
<li>grid-column-start, grid-column-end 의 단축 속성</li>
<li>형식1 : grid-column:start end</li>
<li>형식2 : grid-column:start/span(열의 개수)<h4 id="grid-row">grid-row</h4>
</li>
<li>grid-row-start, grid-row-end 의 단축 속성</li>
<li>형식1 : grid-row:start end</li>
<li>형식2 : grid-row:start/span(행의 개수)</li>
</ul>
<p>오늘은 mediaQuery, flex layout, grid layout에 대해서 공부를 진행했다. grid에 대해선 알고 있었지만 항상 flex로 layout을 잡는 걸 고집해왔었는데 grid로 layout을 나누는 게 코드 상으로는 훨씬 깔끔한 느낌을 받았다. 손에 익을 정도로 열심히 공부해야할 것 같다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2024. 07. 23 (TIL) - Transform, Animation]]></title>
            <link>https://velog.io/@hyper_quanx/2024.-07.-23-TIL-Transform</link>
            <guid>https://velog.io/@hyper_quanx/2024.-07.-23-TIL-Transform</guid>
            <pubDate>Tue, 23 Jul 2024 09:51:12 GMT</pubDate>
            <description><![CDATA[<h1 id="변형transform">변형(transform)</h1>
<h3 id="변형transform--특정-요소의-크기나-형태-스타일-등이-바뀌는-것">변형(transform) : 특정 요소의 크기나 형태, 스타일 등이 바뀌는 것</h3>
<h3 id="2차원3차원-변형">2차원/3차원 변형</h3>
<h4 id="--수평수직으로-웹-요소를-변형">- 수평/수직으로 웹 요소를 변형</h4>
<h4 id="--크기각도만-지정">- 크기/각도만 지정</h4>
<h4 id="--2차원-좌표-사용">- 2차원 좌표 사용</h4>
<h4 id="확대축소">확대/축소</h4>
<ul>
<li>scale(x,y) - 요소를 x, y 만큼 확대/축소</li>
<li>scaleX(n) - 요소를 n만큼 x축으로 확대/축소</li>
<li>scaleY(n) - 요소를 n만큼 y축으로 확대/축소</li>
<li>scale3d(x,y,z) - 요소를 x, y, z축으로 각각 x, y, z 만큼 확대<h4 id="기울이기">기울이기</h4>
</li>
<li>skew(xdeg, ydeg) : 요소를 x축, y축으로 xdeg, ydeg만큼 기울임</li>
<li>skewX(xdeg) : 요소를 x축으로 xdeg만큼 기울임</li>
<li>skewY(ydeg) : 요소를 y축으로 ydeg만큼 기울임<h4 id="회전">회전</h4>
</li>
<li>rotate(deg) : 요소를 deg만큼 회전<h4 id="translate-함수">translate 함수</h4>
</li>
<li>지정한 방향으로 이동할 거리 지정 후 이동</li>
<li>transform:translate(tx,ty) - x축 방향으로 tx만큼, y축 방향으로 ty만큼 이동, ty 값을 주지 않으면 0으로 간주</li>
<li><ul>
<li>translate3d(tx, ty, tz)</li>
</ul>
</li>
<li><ul>
<li>translateX(tx) : x축 방향</li>
</ul>
</li>
<li><ul>
<li>translateY(ty) : y축 방향</li>
</ul>
</li>
<li><ul>
<li>translateZ(tz) : z축 방향</li>
</ul>
</li>
</ul>
<h1 id="animation-관련-css">Animation 관련 Css</h1>
<h3 id="애니메이션-속성">애니메이션 속성</h3>
<h4 id="웹-요소에-애니메이션-속성을-추가">웹 요소에 애니메이션 속성을 추가</h4>
<h4 id="애니메이션을-시작해서-끝나는-동안-원하는-곳에-스타일을-바꾸어-애니메이션-정의-가능">애니메이션을 시작해서 끝나는 동안 원하는 곳에 스타일을 바꾸어 애니메이션 정의 가능</h4>
<h4 id="키프레임keyframe--애니메이션-중간에-스타일이-바뀌는-지점">키프레임(keyframe) : 애니메이션 중간에 스타일이 바뀌는 지점</h4>
<h3 id="애니메이션-속성-1">애니메이션 속성</h3>
<h4 id="keyframe--애니메이션이-바뀌는-지점을-정의">@keyframe : 애니메이션이 바뀌는 지점을 정의</h4>
<ul>
<li>형식 : @keyframe 이름(키프레임명) { 0% { /* CSS 코드 <em>/ } n% { /</em> CSS 코드 <em>/ } 100% { /</em> CSS 코드 */ } }</li>
<li>이름으로 애니메이션을 구분</li>
<li>시작점 0%, 끝점 100%로 놓고 지정</li>
<li>시작, 끝만 사용 시 from, to 키워드 사용 가능</li>
<li>필수값<h4 id="animation-name-속성">animation-name 속성</h4>
</li>
<li>애니메이션을 지정할 키프레임명 지정</li>
<li>애니메이션을 구분하는 역할</li>
<li>@keyframe에서 지정한 이름을 사용</li>
<li>형식 : animation-name: 이름 | none</li>
<li>필수값<h4 id="animation-duration-속성값">animation-duration 속성값</h4>
</li>
<li>애니메이션의 지속시간 지정</li>
<li>설정 값은 초(s), 밀리초(ms)</li>
<li>필수값<h4 id="animation-delay-속성값">animation-delay 속성값</h4>
</li>
<li>애니메이션의 지연 시간 설정</li>
<li>형식 : animation-delay:지연시간<h4 id="animation-direction-속성">animation-direction 속성</h4>
</li>
<li>애니메이션의 진행 방향을 지정</li>
<li>형식 : animation-direction:속성값</li>
<li>normal : 애니메이션의 진행 방향을 키 프레임에 정의된 시간 순서대로 진행 (to-&gt;from)</li>
<li>reverse : 애니메이션의 진행 방향을 키 프레임에 역순으로 진행 (from-&gt;to)</li>
<li>alternate : 1회 이상 실행시에는 홀수번째는 normal, 짝수번째는 reverse 진행</li>
<li>alternate-reverse : 홀수번째는 reverse, 짝수번째는 normal<h4 id="animation-iteration-count-속성">animation-iteration-count 속성</h4>
</li>
<li>애니메이션의 반복 횟수 지정</li>
<li>형식 : animation-iteration-count:횟수</li>
<li>숫자 : 반복횟수 지정</li>
<li>infinite : 무한 반복<h4 id="animation-timing-function-속성">animation-timing-function 속성</h4>
</li>
<li>애니메이션의 속도 지정<h4 id="animation-play-state-속성">animation-play-state 속성</h4>
</li>
<li>애니메이션의 진행/정지 상태 정의</li>
<li>형식 : animation-play-state:속성값</li>
<li>paused: 일시 정지</li>
<li>running : 실행<h4 id="animation-속성">animation 속성</h4>
</li>
<li>모든 애니메이션 속성 지정</li>
<li>형식 : animation:name duration timing-function delay iteration-count direction fill-mode play-state</li>
<li>지정하지 않은 속성은 기본값 사용</li>
<li>animation-duration 값은 필수값</li>
</ul>
<p>머리아프다. 이걸 다 외워야 하다니.</p>
<p>애니메이션은 차근히 외운다 해도 트랜지션 속성은 다 외워야 편하게 작업할 수 있을 것 같다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2024. 07. 22 (TIL) CSS 선택자, 가상 클래스, 가상 요소]]></title>
            <link>https://velog.io/@hyper_quanx/2024.-07.-22-TIL-CSS-%EC%84%A0%ED%83%9D%EC%9E%90</link>
            <guid>https://velog.io/@hyper_quanx/2024.-07.-22-TIL-CSS-%EC%84%A0%ED%83%9D%EC%9E%90</guid>
            <pubDate>Mon, 22 Jul 2024 10:31:47 GMT</pubDate>
            <description><![CDATA[<h2 id="선택자">선택자</h2>
<h3 id="기본-선택자">기본 선택자</h3>
<h4 id="전체-선택자">전체 선택자</h4>
<ul>
<li>형식 : * { /* CSS 코드 */ }<h4 id="타입태그-선택자">타입(태그) 선택자</h4>
</li>
<li>태그명으로 선택자 지정</li>
<li><ul>
<li>형식 : 태그명 { /* CSS 코드 */ }<h4 id="아이디-선택자">아이디 선택자</h4>
</li>
</ul>
</li>
<li>id 속성값(아이디명)으로 선택자 지정</li>
<li><ul>
<li>형식 : #id명 { /* CSS 코드 */ }<h4 id="클래스-선택자">클래스 선택자</h4>
</li>
</ul>
</li>
<li>class 속성(클래스명)으로 선택자 지정</li>
<li><ul>
<li>형식 : .class명 { /* CSS 코드 */ }<h4 id="기본-속성-선택자">기본 속성 선택자</h4>
</li>
</ul>
</li>
<li>HTML 태그에서 사용할 수 있는 속성과 값으로 선택자를 지정</li>
<li><ul>
<li>형식 : [속성] { /* CSS 코드 */ }</li>
</ul>
</li>
</ul>
<br/>


<h3 id="조합연결-선택자">조합(연결) 선택자</h3>
<ul>
<li>선택자와 선택자를 연결해 적용하여 대상을 제한</li>
<li>combination selector(조합 선택자)<h3 id="그룹-선택자">그룹 선택자</h3>
</li>
<li>여러 선택자를 콤마(,)를 사용하여 그룹으로 묶어서 지정</li>
<li>형식 : 선택자1, 선택자2,,,,,, 선택자n { /* CSS 코드 */ }<h3 id="자식-선택자child-selector">자식 선택자(child selector)</h3>
</li>
<li>자식 요소에 스타일을 적용</li>
<li>선택자 범위를 자식 관계로 제한
두 요소 사이에 &gt;(부등호)를 이용하여 부모와 자식을 구분</li>
<li>형식 : 부모 선택자 &gt; 자식 선택자 { /* CSS 코드 */ }<h3 id="하위-선택자descendant-selector">하위 선택자(descendant selector)</h3>
</li>
<li>선택자 범위를 자식 및 자손 관계로 제한</li>
<li>부모 요소에 포함된 모든 하위 요소에 스타일 적용</li>
<li>형식 : 상위 선택자 하위 선택자</li>
<li>형식 : 선택자1 선택자2 선택자3,,,,{ /* CSS 코드 */ }<h3 id="인접-형제-선택자adjacent-selector">인접 형제 선택자(adjacent selector)</h3>
</li>
<li>특정 태그와 가장 인접한 형제 관계 태그를 선택자로 지정</li>
<li>같은 부모를 가진 형제 요소 중에서 첫 번째 동생 요소에만 적용</li>
<li>요소1과 요소2는 같은 레벨이면서 요소1 이후 첫 번째 요소2에 적용</li>
<li>구분자 : +</li>
<li>형식 : 이전 선택자 + 대상 선택자 { /* CSS 코드 */ }<h3 id="일반-형제-선택자sibling-selector">일반 형제 선택자(sibling selector)</h3>
</li>
<li>특정 태그와 형제 관계에 오는 모든 태그를 선택자로 지정</li>
<li>형제 요소들에 스타일 적용</li>
<li>인접 형제 선택자와 다르게 모든 형제 요소에 적용</li>
<li>구분자 : ~</li>
<li>형식 : 이전 선택자 ~ 대상 선택자 { /* CSS 코드 */ }</li>
</ul>
<h3 id="속성-선택자">[속성] 선택자</h3>
<ul>
<li>해당 속성이 있는 요소에 적용</li>
<li>형식 : 태그[속성] { /* CSS 코드 */ }<h3 id="속성값-선택자">[속성=값] 선택자</h3>
</li>
<li>지정한 속성값이 있는 요소에 적용</li>
<li>형식 : 태그[속성=값] { /* CSS 코드 */ }<h3 id="속성값-선택자-1">[속성~=값] 선택자</h3>
</li>
<li>지정한 속성값(단어별)이 포함된 요소에 적용</li>
<li>형식 : 태그[속성~=값] { /* CSS 코드 */ }<h3 id="속성값-선택자-2">[속성|=값] 선택자</h3>
</li>
<li>지정한 속성값(하이픈 포함, 단어별)이 포함된 요소에 적용</li>
<li>형식 : 태그[속성|=값] { /* CSS 코드 */ }<h3 id="속성값-선택자-3">[속성^=값] 선택자</h3>
</li>
<li>특정 값으로 시작하는 속성을 가진 요소에 적용</li>
<li>형식 : 태그[속성^=값] { /* CSS 코드 */ }<h3 id="속성값-선택자-4">[속성$=값] 선택자</h3>
</li>
<li>속성값이 특정 값으로 끝나면 선택</li>
<li>형식 : 태그[속성$=값] { /* CSS 코드 */ }<h3 id="속성값-선택자-5">[속성*=값] 선택자</h3>
</li>
<li>속성값에 해당 문자열이 포함되면 적용</li>
<li>형식 : 태그[속성<em>=값] { /</em> CSS 코드 */ }</li>
</ul>
<h2 id="가상-클래스-가상-요소">가상 클래스, 가상 요소</h2>
<ul>
<li>실제로 존재하지 않는 요소</li>
<li>존재한다고 가정하고 선택하는 방법
요소의 상태를 이용하여 선택자를 지정</li>
<li>가상 클래스 앞에 : 기호를 붙여서 사용</li>
<li>사용자의 동작에 반응하는 가상 클래스 선택자</li>
<li>링크 가상 클래스 선택자</li>
<li><ul>
<li>:link - 링크를 한 번도 방문한 적이 없는 상태</li>
</ul>
</li>
<li><ul>
<li>:visited - 링크를 한 번 이상 방문한 적이 있는 상태</li>
</ul>
</li>
<li>동적 가상 클래스 선택자</li>
<li><ul>
<li>:hover - 마우스를 올린 상태</li>
</ul>
</li>
<li><ul>
<li>:active - 마우스로 클릭한 상태</li>
</ul>
</li>
<li>입력 요소 가상 클래스 선택자</li>
<li><ul>
<li>:focus - 입력 요소에 커서가 이동하여 활성화된 상태</li>
</ul>
</li>
<li><ul>
<li>:checked - 체크박스(레디오버튼) 요소에 체크한 상태</li>
</ul>
</li>
<li><ul>
<li>:enabled - 상호 작용 요소가 활성화된 상태</li>
</ul>
</li>
<li><ul>
<li>:disabled - 상호 작용 요소가 비활성화된 상태 - 요소가 서버로 전송되지 않는다.</li>
</ul>
</li>
<li><ul>
<li>:not - 특정 요소를 제외하고 스타일 적용</li>
</ul>
</li>
</ul>
<h2 id="구조-가상-클래스">구조 가상 클래스</h2>
<p>:only-child -&gt; 부모 안에 자식 요소가 하나뿐일 때 자식 요소 선택
A:only-type-of -&gt; 부모 안에 A 요소가 하나뿐일 때 선택
:first-child -&gt; 부모 안에 있는 모든 요소 중에서 첫 번째 자식 요소를 선택
:last-child -&gt; 부모 안에 있는 모든 요소 중에서 마지막 자식 요소를 선택
A:first-of-type -&gt; 부모 안에 있는 A 요소 중에서 첫 번째 요소를 선택
A:last-of-type -&gt; 부모 안에 있는 A 요소 중에서 마지막 요소를 선택
:nth-child(n) -&gt; 부모 안에 있는 모든 요소 중에서 n 번째 자식 요소를 선택
:nth-of-type(n) -&gt; 부모 안에 있는 모든 요소 중에서 끝에서 n 번째 자식 요소를 선택
A:nth-of-type(n) -&gt; 부모 안에 있는 A 요소 중에서 n 번째 요소를 선택
A:nth-last-of-type(n) -&gt; 부모 안에 있는 A 요소 중에서 끝에서 n 번째 요소를 선택</p>
<h2 id="가상-요소">가상 요소</h2>
<ul>
<li>실제로 존재하지 않는 요소</li>
<li>존재한다고 가정하고 선택하는 방법</li>
<li>화면 꾸미기용, 웹 문서에는 포함되지 않음</li>
<li>가상요소 선택자 앞에 :: 를 붙임</li>
<li>형식 : 기준 선택자 :: 가상요소 선택자 { /* CSS 코드 */ }</li>
<li>::before - 기준 선택자의 요소의 앞 선택</li>
<li>::after - 기준 선택자의 요소의 뒤가 선택</li>
<li>::first-line - 특정 요소의 첫 번째 줄에 스타일 적용</li>
<li>::first-letter - 특정 요소의 첫 번째 글자에 스타일 적용</li>
</ul>
<p>이번 부분은 계속 복습하고 복습해서 외워야 할 것 같다.
너무 많이 썼던 것들인데도 불구하고 항상 구글링만 해서 머릿속에 남질 않았다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2024. 07. 18 (TIL) - Css 여러 스타일]]></title>
            <link>https://velog.io/@hyper_quanx/2024.-07.-18-TIL-Css-%EC%97%AC%EB%9F%AC-%EC%8A%A4%ED%83%80%EC%9D%BC</link>
            <guid>https://velog.io/@hyper_quanx/2024.-07.-18-TIL-Css-%EC%97%AC%EB%9F%AC-%EC%8A%A4%ED%83%80%EC%9D%BC</guid>
            <pubDate>Thu, 18 Jul 2024 07:32:34 GMT</pubDate>
            <description><![CDATA[<p>오늘 시작은 Text 관련 스타일과 웹 폰트 사용하기
그 이후 list 관련 스타일을 오전에 공부했다.</p>
<p>웹 문서에서 사용할 글꼴 지정
body 태그를 비롯해 p 태그나, hn 태그처럼 텍스트를 사용하는 요소에 사용
지정한 글꼴이 없을 경우, 두 번째, 세 번째 지정할 글꼴 순서로 적용, 없을 경우 시스템 기본 폰트가 적용됨
둘 이상의 글꼴 이름을 지정할 경우 쉼표 ( , )로 구분
body 태그 스타일에서 한 번 정의하면 문서 전체에 적용 문서 안에서 모든 자식 요소에 같은 속성이 적용</p>
<p>font-size 속성
font-size: {&lt;절대크기&gt; | &lt;상대크기&gt; | &lt;크기&gt; | &lt;백분율&gt;}
절대크기 : 브라우저에서 지정한 글자 크기
상대크기 : 부모 요소 기준
크기 : 브라우저 상관없이 글자 크기 지정
백분율 : 부모 요소의 글자 크기 기준 백분율(%)로 지정</p>
<p>키워드를 사용한 글자 크기 지정
xx-Small &lt; x-Small &lt; Small &lt; Medium &lt; Large &lt; x-Large &lt; xx-Large
단위를 사용해 글자 크기 지정</p>
<p>font-style 속성</p>
<p>font-style : normal | italic | oblique
normal : 기본값으로 일반적인 형태로 표시
italic : 이탤릭체로 표시</p>
<p>font-weight 속성</p>
<p>font-weight : normal | bold | bolder | lighter | 100 | ~~ | 900</p>
<p>글자 굵기를 조절하는 속성
normal : 기본값
bold : 굵게
bolder : 원래보다 더 굵게
lighter : 원래보다 가늘게
100 ~ 900 : 가늘게 ~ 가장 굵게</p>
<p>색상 이름 표기법
잘 알려진 색상 이름을 표시, 기본 색상 16가지</p>
<p>웹 안전 색상
모든 브라우저에서 표현할 수 있는 색상
기본 색상 포함 216가지</p>
<p>RGB표기법</p>
<p>rgb/rgba 표기
color:rgb(255,255,255) 형태
빨강, 초록, 파랑 순서
color:rgba(255,255,255,투명도), 투명도 : 0<del>1사용, 0: 투명, 1: 불투명
0</del>255 로 표현</p>
<p>16진수 표기법
#ffffff 처럼 #숫자, 영문 6자리로 표현
앞에서부터 2자리 단위, 빨, 초, 파
0은 검정, f는 투명
두자리가 동일할 경우 축약 가능 ex) #ffffff --&gt; #fff</p>
<p>색상표기법</p>
<p>color:red - 색상명을 직접 지정</p>
<p>RGB 표기법
rgb(17, 255, 0) 으로 표기</p>
<p>16진수 표기법
color:#ff00ff 로 표기</p>
<p>text-align 속성
text-align: start | end | left | right | center | justify |
            match-parent
style=&quot;text-align: left&quot; : 왼쪽 정렬
style=&quot;text-align: right&quot; : 오른쪽 정렬
style=&quot;text-align: center&quot; : 중앙 정렬
style=&quot;text-align: justify&quot; : 양쪽 정렬</p>
<p>line-height속성</p>
<p>문단의 줄 간격 지정
숫자 : 현재 font-size 값에 숫자 곱한 값
백분율 : 부모 요소 기준
크기 : 입력한 크기</p>
<p>HTML 라인하이트 속성
text-decoration</p>
<p>텍스트에 밑줄/윗줄/취소
none : 표시안함
underline : 밑줄
overline : 윗줄
line-through : 취소선
style=&quot;text-decoration: none&quot; : 적용안됨
style=&quot;text-decoration: overline&quot; : 윗줄
style=&quot;text-decoration: line-through&quot; : 가격 변경 : 30000원
style=&quot;text-decoration: underline&quot; : 아랫줄</p>
<p>text shadow
text-shadow : none | &lt;가로거리&gt; &lt;세로거리&gt; &lt;번짐정도&gt; &lt;색상&gt;
가로거리 : 텍스트로부터 그림자의 가로거리, 필수 속성
세로거리 : 텍스트로부터 그림자의 세로거리, 필수 속성
번짐 정보 : 그림자가 번져 보이는 정도, 기본값 0
색상 : 그림자의 색상 지정, 여러가지 지정 가능</p>
<p>style=&quot;color: red; text-shadow: 5px 5px black&quot;
style=&quot;text-shadow: 7px 7px 3px blueviolet&quot; : CSS 텍스트 스타일
style=&quot;color: aqua; text-shadow: 10px -10px 20px&quot;
CSS 텍스트 스타일</p>
<p>letter-spacing
letter-spacing:nromal | &lt;크기&gt;
글자 간격</p>
<p>word-spacing
word-spacing : normal | &lt;크기&gt;
단어간 간격</p>
<p>HTML
style=&quot;letter-spacing: 0.2em&quot;&gt;HTML
style=&quot;letter-spacing: 0.5em&quot;&gt;HTML
HTML HTML
style=&quot;word-spacing: 0.2em&quot;&gt;HTML HTML
style=&quot;word-spacing: 0.5em&quot;&gt;HTML HTML</p>
<ul>
<li>span 태그는 인라인 블럭이기 때문에 width를 바꿀 수 없다.</li>
<li>id가 같을 경우 뒤에 선언한 내용대로 덮어 씌워진다.</li>
</ul>
<p>static : 문서의 흐름에 맞춰 배치 (default)
relative : 위칫값을 지정할 수 있다는 점을 제외하면 static과 같음
absolute : relative값을 사용한 상위 요소를 기준으로 위치를 지정해 배치
fixed : 브라우저 창을 기준으로 지정해 배치</p>
<p>position 속성 중에서 absolute 값을 사용할 때 주의할 점
요소에 position:absolute</p>
<p>나머지는 Github에</p>
<p>css도 오랜만에 하니 어렵다.</p>
<p><a href="https://github.com/HyperQuanx/ChunjaeCssStudy">내 깃허브</a></p>
<p>도움받은 사이트
<a href="https://velog.io/@sweetpumpkin/HTML-%ED%83%9C%EA%B7%B8-%EA%B8%B0%EC%B4%88">내부링크 관련</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2024. 07. 17 (TIL) - block-inline content, box-model]]></title>
            <link>https://velog.io/@hyper_quanx/2024.-07.-17-TIL-block-inline-content-box-model</link>
            <guid>https://velog.io/@hyper_quanx/2024.-07.-17-TIL-block-inline-content-box-model</guid>
            <pubDate>Wed, 17 Jul 2024 10:23:59 GMT</pubDate>
            <description><![CDATA[<p>부트캠프를 시작한지 일주일이 지났다.
아직 HTML 끝, CSS 시작이지만 기초부터 탄탄하게 다져나가는 느낌이라 매우 만족하고 있다.
오늘 배운 내용들을 총 복습해보는 포스트를 남겨볼까 한다.</p>
<h2 id="1-css를-배우면서-깨닫게-된-사실">1. css를 배우면서 깨닫게 된 사실</h2>
<p>블로그나 포털사이트 같은 여러 웹 사이트들을 보면 ul, li, ol등의 태그로 메뉴를 나눠 놓는 모습을 보았다.
지금까지 무식하게 div, span 태그만 사용해서 구간을 나눴던 지난날이 떠올라서 부끄러워졌다.
한창 공부할 때 여러 웹 사이트들에서 개발자도구로 어떻게 설계가 되었는지 찾아볼 걸 그랬다.
특히 html에서 form 쪽 수업에서도 서버 통신에 이런 태그도 존재했는데 왜 나는 잊고 있었을까? 에 대해서 생각해보게 되었다.</p>
<h2 id="2-나는-react의-노예였다">2. 나는 React의 노예였다.</h2>
<p>결국 React도 JS 라이브러리 중 하나일 뿐이었는데 너무 맹신해서 사용했던 것 같다. css도 대충 스타일컴포넌트로 외부 내부 가리지 않고 막 사용했었고 가장 기본인 HTML식 방법들을 등한시하고 무조건 어렵게 만들곤 했었다. 결국 웹의 기반이자 뼈대는 HTML인데.. 내가 왜 그렇게 React를 못 썼는지 이제야 이해가 됐다. 중학 수학도 못 푸는 아이가 미적분을 할 수 있을까? 못 했으니 매번 인터넷에 검색하는 방식으로 문제를 해결했었지... 오늘 강사님께서 하셨던 말씀이 가장 기억에 남는다. 검색하고, GPT한테 물어보고 하는 방법으론 실력이 늘 수 없다고..
결국 개발자는 문제해결을 잘 해야 하는데 내가 너무 바보 같이 공부하고 있었다는 생각이 든다.</p>
<h2 id="자습한-내용">자습한 내용</h2>
<h4 id="block-inline-content-box-model">block-inline content, box-model</h4>
<p>block, inline, boxModel 모두 css에서 가장 기본이면서 가장 중요한 내용이기에 다시 한번 개념을 잡기 위해 정규과정이 끝난 후 자습을 진행했다. 초창기에 공부할 때 정말 쉬워보였는데 막상 머릿속으로 깊이 이해하기까지 꽤나 시간이 걸렸던 이 개념. 이 참에 확실히 이해하기 위해 여러 방법으로 공부를 했다.</p>
<p>사실 한번 이해하고 나면 어렵지 않다. 하지만 웹 구조의 기본이기 때문에 꼭 이해하고 넘어가야 한다고 생각한다.</p>
<p>block 요소는 가로로 100%를 사용한다.
줄 노트를 생각하면 편하다. 내가 만약 단어장을 만든다고 가정할 때 블록 요소는 단어 : 뜻 하나만 쓰고 넘어가고 인라인 요소는 계속 써나간다고 생각하면 좋다.</p>
<p>ex)
hello world : 안녕 세계야 (block)
head : 머리 body : 몸 (inline)</p>
<p>이 개념이 마냥 쉬워보이지만 내 입장에서는 가면 갈 수록 어려웠던 것 같다.
가면 갈 수록 좀 더 예쁘게 꾸미고 싶다는 욕심이 생기는데 이 부분을 제대로 짚지 못하고 가면 생각보다 각 요소들을 배치하는데 많은 시간을 소요하고 있는 나를 만나게 된다.</p>
<p>box model도 개념만큼은 절대 어렵지 않다.</p>
<p>margin : 요소와 요소간의 여백
말 그대로 요소와 요소간의 여백. 지금 나와 내 눈앞의 모니터 사이의 거리가 마진.</p>
<p>border : 요소의 테두리
이것도 말 그대로 테두리다. 어렵지 않다.</p>
<p>padding : 요소와 컨텐츠 간의 여백
처음에 이게 제일 머리 아팠다. 테두리가 이미 나왔는데 무슨 여백? 했었는데 이것도 별거 없다.
그냥 div에 아무 말이나 치고 style로 border: 1px solid black을 줘보면 내가 친 아무말과 테두리의 거리가 padding이다.</p>
<p>content : 위에서 말한 아무말</p>
<p><img src="https://velog.velcdn.com/images/hyper_quanx/post/62074ad1-b28c-42d2-91b6-ab553c23a170/image.png" alt="">
이해를 도와줄 그림. 근데 이해에 도움이 될까..?</p>
<p>참고
<a href="https://velog.io/@aepee/%EB%B8%94%EB%A1%9D-%EC%9A%94%EC%86%8C%EC%99%80-%EC%9D%B8%EB%9D%BC%EC%9D%B8-%EC%9A%94%EC%86%8C">링크텍스트</a></p>
<p><a href="https://velog.io/@parkksss/%EA%B0%9C%EB%B0%9C%EA%B8%B0%EB%A1%9D-css%EB%B0%95%EC%8A%A4%EB%AA%A8%EB%8D%B8">링크텍스트</a></p>
]]></description>
        </item>
    </channel>
</rss>