<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>k-codewiki 님의 블로그</title>
    <link>https://k-codewiki.tistory.com/</link>
    <description>k-codewiki 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Mon, 22 Jun 2026 21:28:44 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>k-codewiki</managingEditor>
    <item>
      <title>Spring AOP 란?</title>
      <link>https://k-codewiki.tistory.com/11</link>
      <description>&lt;h1&gt;Spring AOP (Aspect-Oriented Programming, AOP)&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Spring AOP란?&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  Spring AOP 정의&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spring AOP는 스프링 프레임워크에서 제공하는 관점 지향 프로그래밍(Aspect-Oriented Programming)을 지원하는 기능입니다. 공통 관심사(Cross-cutting Concerns)를 모듈화하여 코드의 중복을 줄이고 유지보수성을 향상시킵니다. 주로 &lt;b&gt;로깅&lt;/b&gt;, &lt;b&gt;트랜잭션 관리&lt;/b&gt;, &lt;b&gt;보안&lt;/b&gt; 등에 활용됩니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  관점 지향 프로그래밍 (AOP)이란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AOP는 객체 지향 프로그래밍(OOP)을 보완하는 개념으로, **핵심 관심사(Core Concern)**와 **공통 관심사(Cross-cutting Concern)**를 분리해 개발하는 기법입니다. 핵심 기능은 각 객체가 수행해야 할 역할이고, 공통 기능은 여러 객체에서 반복되는 로직입니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;Tip&lt;/b&gt;: 여러 클래스에 반복되는 코드를 AOP를 통해 분리하고 관리하면, 코드의 재사용성 및 유지 보수성을 높일 수 있습니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;예시:&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스 A, B, C에서 공통으로 사용되는 로직이 있다고 가정합니다. 이를 Aspect로 분리해 관리하면 클래스마다 일일이 코드를 수정할 필요 없이 &lt;b&gt;모듈화된 Aspect&lt;/b&gt;를 수정하면 됩니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. AOP 주요 개념&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AOP를 이해하기 위해 알아두어야 할 용어들입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;용어설명&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Aspect&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;공통 관심사를 모듈화한 단위입니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Target&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Aspect가 적용될 대상, 예를 들어 메소드나 클래스입니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Join Point&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Aspect가 적용될 수 있는 지점으로, 메소드 실행 전후 등을 의미합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Advice&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Aspect의 동작을 정의한 코드로, 메소드 실행 전, 후 또는 예외 처리 시 동작합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Pointcut&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Advice가 적용될 범위를 정의합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. AOP 어노테이션 살펴보기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spring AOP에서 사용하는 주요 어노테이션을 소개합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어노테이션설명&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;@Aspect&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;해당 클래스를 Aspect로 사용한다는 것을 명시합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;@Before&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;대상 메소드 실행 전 Advice를 실행합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;@AfterReturning&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;대상 메소드가 정상적으로 실행된 후 Advice를 실행합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;@AfterThrowing&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;대상 메소드에서 예외가 발생했을 때 Advice를 실행합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;@After&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;대상 메소드 실행 후 Advice를 실행합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;@Around&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;메소드 실행 전후 또는 예외 발생 시 Advice를 실행합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. Spring AOP 환경 설정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spring AOP를 설정하고 사용하는 방법에 대해 알아보겠습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  개발 환경&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같은 환경에서 Spring AOP 예시를 살펴보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항목버전&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Java&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Spring Boot&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;2.7.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Spring Framework&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;5.7.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Spring AOP&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;2.7.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;Gradle&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;7.5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  Gradle 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spring AOP를 사용하기 위해 build.gradle 파일에 아래와 같이 의존성을 추가합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;gradle&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span data-state=&quot;closed&quot;&gt;코드 복사&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;dependencies { implementation 'org.springframework.boot:spring-boot-starter-aop' }&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. @AspectJ를 활용한 AOP 구현&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spring에서 AOP를 구현하는 가장 흔한 방법은 @AspectJ 어노테이션을 사용하는 것입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  @EnableAspectJAutoProxy 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AOP를 사용하기 위해 @EnableAspectJAutoProxy를 활성화해야 합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;java&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span data-state=&quot;closed&quot;&gt;코드 복사&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;@Configuration&lt;/span&gt; &lt;span&gt;@EnableAspectJAutoProxy&lt;/span&gt; &lt;span&gt;public&lt;/span&gt; &lt;span&gt;class&lt;/span&gt; &lt;span&gt;AppConfig&lt;/span&gt; { }&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  Aspect와 Advice 구현&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 코드는 특정 패키지 내의 모든 메소드에 Before와 After Advice를 적용하는 예시입니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;java&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span data-state=&quot;closed&quot;&gt;코드 복사&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;import&lt;/span&gt; lombok.extern.slf4j.Slf4j; &lt;span&gt;import&lt;/span&gt; org.aspectj.lang.annotation.After; &lt;span&gt;import&lt;/span&gt; org.aspectj.lang.annotation.Aspect; &lt;span&gt;import&lt;/span&gt; org.aspectj.lang.annotation.Before; &lt;span&gt;import&lt;/span&gt; org.aspectj.lang.annotation.Pointcut; &lt;span&gt;import&lt;/span&gt; org.springframework.stereotype.Component; &lt;span&gt;@Component&lt;/span&gt; &lt;span&gt;@Slf4j&lt;/span&gt; &lt;span&gt;@Aspect&lt;/span&gt; &lt;span&gt;public&lt;/span&gt; &lt;span&gt;class&lt;/span&gt; &lt;span&gt;TimeLogAspect&lt;/span&gt; { &lt;span&gt;@Pointcut(&quot;within(com.example..service..*)&quot;)&lt;/span&gt; &lt;span&gt;private&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; &lt;span&gt;servicePointcut&lt;/span&gt;&lt;span&gt;()&lt;/span&gt; {} &lt;span&gt;@Before(&quot;servicePointcut()&quot;)&lt;/span&gt; &lt;span&gt;public&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; &lt;span&gt;logStartTime&lt;/span&gt;&lt;span&gt;()&lt;/span&gt; { log.info(&lt;span&gt;&quot;메소드 시작: {}ms&quot;&lt;/span&gt;, System.currentTimeMillis()); } &lt;span&gt;@After(&quot;servicePointcut()&quot;)&lt;/span&gt; &lt;span&gt;public&lt;/span&gt; &lt;span&gt;void&lt;/span&gt; &lt;span&gt;logEndTime&lt;/span&gt;&lt;span&gt;()&lt;/span&gt; { log.info(&lt;span&gt;&quot;메소드 종료: {}ms&quot;&lt;/span&gt;, System.currentTimeMillis()); } }&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드에서는 서비스 클래스의 모든 메소드 실행 전후로 시간을 기록하여 성능 측정에 활용할 수 있습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. Spring AOP API 활용&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spring AOP는 Proxy를 통해 구현되며, 주로 동적으로 Advice를 메소드에 적용하는 방식으로 동작합니다. 동작 과정은 아래와 같습니다:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;빈 객체 생성&lt;/b&gt; -&amp;gt; 2. &lt;b&gt;빈 후처리기에서 AOP 적용 여부 판단&lt;/b&gt; -&amp;gt; 3. &lt;b&gt;프록시 생성 후 빈 저장소에 등록&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프록시가 생성되면 Spring은 프록시 객체를 통해 메소드 호출을 제어하며, Aspect와 Advice를 동적으로 적용합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;마치며&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spring AOP는 반복되는 로직을 분리하고 모듈화하여 개발 효율을 높여줍니다. 특히, 트랜잭션 처리나 로깅과 같이 여러 메소드에서 공통적으로 수행해야 하는 작업을 효율적으로 관리할 수 있게 도와줍니다.&lt;/p&gt;</description>
      <category>c0ding/Spring 끼고 개발까지</category>
      <author>k-codewiki</author>
      <guid isPermaLink="true">https://k-codewiki.tistory.com/11</guid>
      <comments>https://k-codewiki.tistory.com/11#entry11comment</comments>
      <pubDate>Mon, 14 Oct 2024 08:42:05 +0900</pubDate>
    </item>
    <item>
      <title>React의 상태(state)와 생명주기(life cycle) 란?</title>
      <link>https://k-codewiki.tistory.com/10</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;리액트에서 상태 관리가 필요한 이유&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 상태 관리의 필요성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리액트는 UI를 컴포넌트 단위로 분할하여 개발하는 라이브러리입니다. 복잡한 웹 애플리케이션에서 컴포넌트 간 데이터를 효율적으로 다루기 위해 **상태 관리(state management)**가 중요합니다. 예를 들어, 수백 개의 데이터 항목을 일일이 관리하는 것은 비효율적이며, 수천 페이지에 걸친 대규모 웹 프로젝트라면 각 페이지의 데이터를 일일이 체크하며 관리하는 것은 거의 불가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 문제를 해결하기 위해 **리액트의 상태(state)**가 등장하게 되었으며, 이 상태 관리가 자동화되면 데이터를 일일이 추적하지 않아도 리액트가 알아서 각 컴포넌트의 상태 변화를 감지하고, 필요한 경우 UI를 재렌더링하여 최신 정보를 사용자에게 보여줄 수 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 상태(state)란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리액트의 state는 각 컴포넌트가 내부적으로 관리하는 데이터로, 컴포넌트의 &lt;b&gt;동적인 UI 변경&lt;/b&gt;을 가능하게 합니다. props와는 달리 컴포넌트 내에서 정의되고, setState 메서드를 통해 업데이트할 수 있습니다. 이러한 특성 덕분에 상태는 컴포넌트 내부에서 자유롭게 조작할 수 있으며, 주로 사용자 입력이나 서버로부터의 응답에 따라 UI를 변경해야 할 때 유용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, 상태는 특정 시점에 따라 &lt;b&gt;뷰의 모양을 변화&lt;/b&gt;시키는 역할을 합니다. 상태가 변경될 때마다 리액트는 &lt;b&gt;자동으로 컴포넌트를 재렌더링&lt;/b&gt;하여 사용자가 항상 최신의 데이터를 볼 수 있게 보장합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 리액트의 상태 관리 방식&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리액트는 다양한 상태 관리 방식들을 제공하여, 프로젝트의 규모나 특성에 맞는 상태 관리를 선택할 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;useState&lt;/b&gt;: 가장 기본적인 상태 관리 훅으로, 함수형 컴포넌트에서 상태를 관리할 때 사용합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Context API&lt;/b&gt;: 컴포넌트 트리 전체에 걸쳐 &lt;b&gt;전역 상태&lt;/b&gt;를 관리할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Redux&lt;/b&gt;: 리덕스는 복잡한 전역 상태 관리를 체계적으로 수행하기 위한 라이브러리로, 상태와 관련된 액션, 리듀서 등을 통해 관리합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;React Query&lt;/b&gt;: 서버에서 가져오는 데이터의 &lt;b&gt;캐싱, 자동 갱신&lt;/b&gt; 등을 처리할 수 있는 라이브러리입니다. 비슷한 라이브러리로 SWR이 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이처럼 리액트는 다양한 상태 관리 방법을 제공하여, 프로젝트의 요구 사항에 따라 유연하게 상태 관리를 구현할 수 있게 합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;리액트 컴포넌트의 생명주기&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 생명주기란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리액트 컴포넌트는 &lt;b&gt;탄생, 업데이트, 소멸&lt;/b&gt;의 일련의 과정을 겪으며, 이를 **생명주기(Life Cycle)**라고 합니다. 이러한 생명주기 과정에서 리액트는 다양한 이벤트를 제공하여 특정 시점마다 개발자가 원하는 동작을 수행할 수 있게 합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 생명주기의 단계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리액트 컴포넌트의 생명주기는 크게 3단계로 나눌 수 있습니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Mounting (생성)&lt;/b&gt;: 컴포넌트가 처음 생성되어 화면에 나타나는 단계입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Updating (변경)&lt;/b&gt;: 상태나 props가 변경되어 컴포넌트가 재렌더링 되는 단계입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Unmounting (소멸)&lt;/b&gt;: 컴포넌트가 더 이상 필요 없어져 화면에서 제거되는 단계입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 각 생명주기 메서드의 역할&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리액트는 각 생명주기 단계마다 &lt;b&gt;특정 메서드&lt;/b&gt;를 호출하여 컴포넌트가 생성, 업데이트, 소멸 시 원하는 로직을 수행할 수 있게 해줍니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3.1 Mounting (생성 단계)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;constructor&lt;/b&gt;: 컴포넌트가 처음 생성될 때 호출되며, 초기 상태를 설정합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;componentDidMount&lt;/b&gt;: 컴포넌트가 처음 렌더링된 직후에 호출되며, &lt;b&gt;API 호출&lt;/b&gt;이나 &lt;b&gt;타이머 설정&lt;/b&gt; 등의 작업을 수행합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3.2 Updating (업데이트 단계)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;componentDidUpdate&lt;/b&gt;: 상태나 props가 변경된 후에 호출되며, DOM이 업데이트된 이후의 작업을 처리합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;shouldComponentUpdate&lt;/b&gt;: 리렌더링 여부를 결정하여 불필요한 업데이트를 방지할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3.3 Unmounting (소멸 단계)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;componentWillUnmount&lt;/b&gt;: 컴포넌트가 화면에서 제거되기 직전에 호출되며, &lt;b&gt;타이머 정리&lt;/b&gt;나 &lt;b&gt;이벤트 리스너 해제&lt;/b&gt; 등의 작업을 수행합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 함수형 컴포넌트의 생명주기 관리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수형 컴포넌트에서는 클래스 컴포넌트의 생명주기 메서드를 사용할 수 없으나, &lt;b&gt;useEffect 훅&lt;/b&gt;을 통해 유사한 동작을 구현할 수 있습니다. useEffect는 컴포넌트의 &lt;b&gt;마운트, 업데이트, 언마운트&lt;/b&gt; 시점을 제어할 수 있어 함수형 컴포넌트에서도 생명주기를 쉽게 관리할 수 있도록 도와줍니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리액트에서 상태 관리와 생명주기 관리는 &lt;b&gt;효율적인 UI 개발&lt;/b&gt;을 위해 필수적인 요소입니다. 상태 관리를 통해 복잡한 데이터 흐름을 단순화하고, 생명주기 메서드를 통해 컴포넌트의 특정 시점마다 자동화된 처리를 수행할 수 있습니다. 이러한 기능들을 잘 활용한다면, 유지 보수와 성능 최적화를 동시에 이룰 수 있습니다.&lt;/p&gt;</description>
      <category>c0ding/React 끼고 개발까지</category>
      <author>k-codewiki</author>
      <guid isPermaLink="true">https://k-codewiki.tistory.com/10</guid>
      <comments>https://k-codewiki.tistory.com/10#entry10comment</comments>
      <pubDate>Mon, 30 Sep 2024 08:34:09 +0900</pubDate>
    </item>
    <item>
      <title>프레임워크와 라이브러리란?</title>
      <link>https://k-codewiki.tistory.com/9</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;프레임워크에 대해 알아보던 중, '부트스트랩(Bootstrap)'이라는 용어를 먼저 접하게 되었습니다. 웹 프로젝트 개발에 유용하다는 이야기를 들었고, 이에 대해 더 조사해보니 부트스트랩은 프레임워크의 한 종류라는 사실을 알게 되었습니다. 그렇다면 '프레임워크'란 무엇일까요?&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프레임워크란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프레임워크는 소프트웨어 개발에서 필수적인 개념 중 하나로, 유명한 소프트웨어 공학자인 랄프 존슨(Ralph Johnson)은 &quot;프레임워크는 재사용 가능한 형태로 클래스들이 협업하도록 설계된 구조&quot;라고 정의했습니다. 이 정의만으로는 다소 어렵게 느껴질 수 있습니다. 프레임워크는 흔히 '라이브러리'와 비교하여 설명되는데, 이 차이를 이해하면 좀 더 명확해집니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프레임워크 vs 라이브러리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라이브러리는 자주 사용하는 코드를 재사용할 수 있도록 모아둔 코드 집합입니다. 개발자가 필요할 때마다 호출하여 사용하는 방식이죠. 반면, 프레임워크는 프로그램의 구조 자체를 제공하는 뼈대 같은 역할을 합니다. 프레임워크는 개발자가 코드를 작성할 때 미리 정해진 방식에 따라 프로그램을 구성하도록 유도합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비유하자면, 프레임워크는 자동차의 프레임처럼 기본적인 구조를 제공하는 반면, 라이브러리는 그 자동차에 필요한 바퀴, 헤드라이트와 같은 부품들입니다. 자동차 프레임이 정해지면 그 틀 안에서 다양한 부품을 활용해 기능을 추가할 수 있는 것이죠.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프레임워크의 종류&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프레임워크는 다양한 프로그래밍 언어와 용도에 맞춰 여러 종류가 존재합니다. 예를 들어:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;자바 프레임워크&lt;/b&gt;: Struts, Spring, 전자정부 프레임워크&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ORM(Object-Relational Mapping) 프레임워크&lt;/b&gt;: myBatis(iBatis), Hibernate&lt;/li&gt;
&lt;li&gt;&lt;b&gt;자바스크립트 프레임워크&lt;/b&gt;: AngularJS, React, Ember&lt;/li&gt;
&lt;li&gt;&lt;b&gt;프론트엔드 프레임워크&lt;/b&gt;: Bootstrap, Foundation&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프레임워크의 장단점&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;장점&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;효율성&lt;/b&gt;: 프레임워크는 기본적인 구조와 기능을 제공해주므로, 처음부터 모든 것을 직접 개발하는 것보다 훨씬 효율적입니다. 덕분에 시간과 비용을 절감할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;품질 향상&lt;/b&gt;: 이미 검증된 구조와 코드를 제공하기 때문에 개발 과정에서 발생할 수 있는 오류나 버그를 최소화할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;유지보수 용이&lt;/b&gt;: 체계적인 코드 구조 덕분에, 개발자 교체가 발생하더라도 비교적 쉽게 프로젝트를 인수인계하고 유지보수할 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;단점&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;학습 곡선&lt;/b&gt;: 프레임워크가 제공하는 구조를 익히고 이해하는 데 시간이 걸립니다. 특히 처음 접하는 프레임워크라면 학습 시간이 길어질 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;제한적인 자유&lt;/b&gt;: 프레임워크의 구조에 맞춰 개발해야 하므로, 제작자의 의도된 설계 안에서만 코드를 작성해야 합니다. 따라서 개발자의 자유도가 제한될 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;결론&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프레임워크는 분명 학습에 시간이 필요하고, 자유도가 제한될 수 있는 단점이 있지만, 효율성과 품질 향상, 유지보수 용이성이라는 큰 장점을 제공합니다. 프로젝트의 성격에 맞는 프레임워크를 적절히 선택하면, 개발 시간과 비용을 절감할 수 있을 뿐만 아니라, 고품질의 코드를 생산할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프레임워크와 라이브러리를 잘 이해하고 상황에 맞게 활용하는 것이 중요한 이유입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리액트를 자바스크립트 라이브러리라고들 하죠. 그런데 실제로 '라이브러리'란 무엇일까요? 그리고 프레임워크와는 어떻게 다른지 한번 명확하게 정리해보겠습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;라이브러리란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라이브러리는 자주 사용하는 기능을 묶어놓은 코드 모음입니다. 소프트웨어 개발 시 필요한 기능들을 미리 작성해 두고, 필요할 때마다 쉽게 호출할 수 있도록 만들어진 도구죠. 예를 들어, 특정 기능을 매번 처음부터 구현하는 대신, 라이브러리에 있는 코드를 호출해서 편리하게 사용할 수 있는 겁니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;라이브러리의 장점&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;유지 보수와 디버깅이 쉬움&lt;/b&gt;: 라이브러리를 사용하면 코드의 일부 기능을 분리해서 유지 보수와 디버깅이 훨씬 쉬워집니다. 모든 코드를 한 곳에 몰아넣는 것보다 관리가 용이하죠.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;컴파일 시간 단축&lt;/b&gt;: 라이브러리는 자주 사용되는 코드를 모듈화하기 때문에 전체 코드의 변경이 필요하지 않을 때, 일부 코드만 컴파일해서 시간을 절약할 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;라이브러리의 종류&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;표준 라이브러리&lt;/b&gt;: 특정 프로그래밍 언어에 기본적으로 포함된 라이브러리로, 일반적인 기능을 제공합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;런타임 라이브러리&lt;/b&gt;: 프로그램이 실행되는 동안 필요한 라이브러리로, 프로그램이 실제 환경에서 실행될 때 필요한 모듈을 포함합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;정적 라이브러리&lt;/b&gt;: 컴파일 시점에 코드와 함께 결합되어 프로그램이 실행될 때 내장된 상태로 사용되는 라이브러리입니다. 이런 방식은 실행파일의 크기를 키울 수 있지만, 간편한 배포가 가능합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;동적 라이브러리&lt;/b&gt;: 프로그램이 실행 중에 필요할 때만 호출되는 라이브러리입니다. DLL 파일처럼 프로그램과 독립적으로 존재하며, 필요할 때만 실행됩니다. 이 방식을 사용하면 배포가 간편하고, 프로그램 성능을 향상시키는 데 도움이 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프레임워크란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프레임워크는 프로그램을 개발할 때 기본 구조와 규칙을 제공하는 일종의 틀입니다. 장난감 조립 키트를 생각해보세요. 키트가 제공하는 부품과 매뉴얼을 따르면서 조립하는 것처럼, 프레임워크는 개발자가 일정한 규칙에 따라 코드를 작성하도록 유도합니다. 프레임워크는 프로그램 개발에 필요한 다양한 요소를 포함하고 있어, 개발자가 보다 빠르고 체계적으로 작업할 수 있게 돕습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;라이브러리와 프레임워크의 차이점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라이브러리와 프레임워크의 가장 큰 차이는 &lt;b&gt;자유도&lt;/b&gt;입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;라이브러리&lt;/b&gt;: 개발자가 필요에 따라 도구처럼 사용합니다. 예를 들어, 장난감 조립 중 작은 부품을 다루기 위해 핀셋을 사용할지 손으로 처리할지 자유롭게 선택할 수 있는 것처럼, 라이브러리는 개발자가 원하는 방식으로 선택하고 사용할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;프레임워크&lt;/b&gt;: 정해진 규칙과 틀을 따라야 합니다. 프레임워크는 프로그램의 전체 구조를 제공하므로, 이를 따르면서 필요한 부분만 자유롭게 구현할 수 있습니다. 예를 들어, 장난감 키트를 사용할 때 매뉴얼을 따르지 않으면 제대로 된 결과물을 만들기 어렵듯이, 프레임워크는 반드시 제공하는 구조와 규칙을 지켜야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;결론&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라이브러리는 개발자가 도구처럼 자유롭게 활용할 수 있는 코드 집합이라면, 프레임워크는 전체 프로그램의 틀과 규칙을 제공해 개발 과정을 좀 더 체계적으로 만들어줍니다. 각각의 장단점을 잘 이해하고, 상황에 맞게 선택해 사용하는 것이 중요합니다.&lt;/p&gt;</description>
      <category>c0ding/Servlet 끼고 개발까지</category>
      <author>k-codewiki</author>
      <guid isPermaLink="true">https://k-codewiki.tistory.com/9</guid>
      <comments>https://k-codewiki.tistory.com/9#entry9comment</comments>
      <pubDate>Mon, 9 Sep 2024 08:23:31 +0900</pubDate>
    </item>
    <item>
      <title>Oracle SQL Developer (DB) Step.01 RDB</title>
      <link>https://k-codewiki.tistory.com/8</link>
      <description>&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;RDB 란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 RDB 에 대해서 이해를 하기전에 Data Base 즉 DB 에 대해서 알아갈 필요가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일전에 Java 포스팅글을 보거나 Java 언어를 공부했던 사람은 Oracle 에 대해서 알것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 Oracle 은 DB 에서도 나온다. 내가 Oracle SQL Developer Framework 를 사용하고 있기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Data Base 를 아예 모르는 사람도 있을것이고. 어느정도 기본적인 지식을 가지고 있는 사람이 있을것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금 내가 사용하는 Oracle 에서 정의하는 데이터 베이스에 대한 글을 빌려와 보겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;h1 style=&quot;list-style-type: none;&quot;&gt;데이터베이스란?&lt;/h1&gt;
&lt;/div&gt;
&lt;div style=&quot;list-style-type: none;&quot;&gt;
&lt;h2 style=&quot;list-style-type: none;&quot; data-ke-size=&quot;size26&quot;&gt;데이터베이스 정의&lt;/h2&gt;
&lt;p style=&quot;list-style-type: none;&quot; data-ke-size=&quot;size16&quot;&gt;데이터베이스는 구조화된 정보 또는 데이터의 조직화된 모음으로서 일반적으로 컴퓨터 시스템에 전자적으로 저장됩니다 데이터베이스는 일반적으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;list-style-type: none; color: #006b8f;&quot; href=&quot;https://www.oracle.com/kr/database/what-is-database/#WhatIsDBMS&quot;&gt;데이터베이스 관리 시스템(DBMS)&lt;/a&gt;에 의해 제어됩니다. 연결된 애플리케이션과 함께 데이터와 DBMS를 하나로 묶어 데이터베이스 시스템이라고 하며 단축하여 데이터베이스라고도 합니다.&lt;/p&gt;
&lt;p style=&quot;list-style-type: none;&quot; data-ke-size=&quot;size16&quot;&gt;오늘날 운영되고 있는 가장 일반적인 유형의 데이터베이스에서 데이터는 일반적으로 처리 및 데이터 쿼리를 효율적으로 수행하기 위해 일련의 테이블에서 행과 열로 모델링됩니다. 그러면 데이터에 쉽게 액세스하고 관리, 수정, 업데이트, 제어 및 구성할 수 있습니다. 대부분의 데이터베이스는 데이터 작성 및 쿼리에 SQL(Structured Query Language)을 사용합니다.&lt;/p&gt;
&lt;p style=&quot;list-style-type: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;list-style-type: none;&quot; data-ke-size=&quot;size16&quot;&gt;데이터베이스를 아는사람은 조금만 읽어도 어느정도 이해가 될것이다.&lt;/p&gt;
&lt;p style=&quot;list-style-type: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;list-style-type: none;&quot; data-ke-size=&quot;size16&quot;&gt;허나 데이터 베이스를 모르는 사람은 봐도 뭔소린지 모를것이다.&lt;/p&gt;
&lt;p style=&quot;list-style-type: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;list-style-type: none;&quot; data-ke-size=&quot;size16&quot;&gt;지금은 나도 배우는 단계라 어떤식으로 설명을 해야할지 부족하고 100% 완벽한 지식이 없기 때문에&lt;/p&gt;
&lt;p style=&quot;list-style-type: none;&quot; data-ke-size=&quot;size16&quot;&gt;DB에 대해서 설명을 해줄수는 없다. 즉, 직접 서칭해서 알아봐야한다.&lt;/p&gt;
&lt;p style=&quot;list-style-type: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;list-style-type: none;&quot; data-ke-size=&quot;size16&quot;&gt;내가 설명을 해줄순 있지만 잘못된 지식이나 정보가 전달 될수도 있기때문에 내가 100% , 그 이상으로 완벽하게 습득 하기 전까지는 설명을 해줄수가 없다.&lt;/p&gt;
&lt;p style=&quot;list-style-type: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;list-style-type: none;&quot; data-ke-size=&quot;size16&quot;&gt;여기까지 DB 이야기를 간단하게 마치고 본문의 제목처럼 RDB에 대해서 알아가보자..&lt;/p&gt;
&lt;p style=&quot;list-style-type: none;&quot; data-ke-size=&quot;size16&quot;&gt;(Data Base 가 뭔지 알아보고 아래 내용을 읽는게 좋을듯 하다.)&lt;/p&gt;
&lt;p style=&quot;list-style-type: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;list-style-type: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;list-style-type: none;&quot; data-ke-size=&quot;size16&quot;&gt;-----------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;많은 사람들이 DataBase 를 사용하게 된다면 보통 Oracle 또는 MySQL을 많이 접하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Oracle 과 MySQL 두개다 관계형 데이터베이스 ( RDB ) 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 간단하다 &lt;b&gt;관계형 데이터베이스&lt;/b&gt; 그게 &lt;b&gt;RDB&lt;/b&gt; 다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;RDB(Relational Database)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;관계형 데이터 모델에 기초를 둔 데이터 베이스&amp;nbsp; &amp;nbsp;=&amp;nbsp; &amp;nbsp;RDB&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 관계형 데이터 베이스가 뭐냐?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;관계형 데이터 베이스의 정의&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데이터 구성을 하는데 필요한 방법 중 하나로 모든 데이터를 2차원의 테이블 형태로 표현해주는것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; letter-spacing: 0px;&quot;&gt;- 데이터 간의 상관관계에서 개체간의 관계를 표현한 것&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f8f9fa; color: #202124; text-align: start;&quot;&gt;- 관계형 데이터베이스(RDB)는 테이블, 행, 열의 정보를 구조화하는 방식, RDB에는 테이블을 조인하여 정보 간의 관계나 링크를 설정할 수 있는 기능이 있으므로 여러 데이터 포인트 간의 관계를 쉽게 이해하고 유용한 정보를 얻을 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 RDB 의 정의는 알아보앗는데 &lt;b&gt;특징&lt;/b&gt;은 무엇인가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RDB는 데이터의 독립성이 높고, 고수준의 데이터 조작언어 DML(나중에 또 다루는 포스팅 작성예정) 을 사용하여 결합,제약,투영 등의 관계 조작에 의해 비약적으로 표현능력을 높일수가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이들의 관계 조작에 의해 자유롭게 구조를 변경할 수 있다는 것이 RDB 의 특징이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 내가 자료 조사를 해본 내용은 여기 까지 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB 의 첫 포스팅 글이기 때문에 아직 많이 부족하고 읽기가 힘들수도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 더 노력하여 조금이나마 개발을 공부하는 사람들에게 도움이 될정도로 열심히 자료조사와 포스팅을 할것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PS. RDBMS(Relational Database Management System) : 관계형 데이터베이스(RDB)를 생성,수정,관리 하는 소프트웨어(정의)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;LIFE&amp;nbsp;HAS&amp;nbsp;NO&amp;nbsp;Ctrl+Z&amp;nbsp;&lt;/b&gt;&lt;/p&gt;</description>
      <category>c0ding/Oracle SQL 끼고 개발까지</category>
      <author>k-codewiki</author>
      <guid isPermaLink="true">https://k-codewiki.tistory.com/8</guid>
      <comments>https://k-codewiki.tistory.com/8#entry8comment</comments>
      <pubDate>Sun, 28 Jul 2024 19:33:53 +0900</pubDate>
    </item>
    <item>
      <title>?! Java 첫번째 트러블 슈팅 ?!</title>
      <link>https://k-codewiki.tistory.com/7</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;225&quot; data-origin-height=&quot;225&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FhS3U/btsIzysyLQe/mkxH4PNwLOl96iSksSzMv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FhS3U/btsIzysyLQe/mkxH4PNwLOl96iSksSzMv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FhS3U/btsIzysyLQe/mkxH4PNwLOl96iSksSzMv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFhS3U%2FbtsIzysyLQe%2FmkxH4PNwLOl96iSksSzMv1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;225&quot; height=&quot;225&quot; data-origin-width=&quot;225&quot; data-origin-height=&quot;225&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;자바 변수 부터 네트워크 까지 트러블 슈팅 모음&lt;/h2&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;그 첫번째.&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 연산자&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;603&quot; data-origin-height=&quot;415&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfvuVn/btsIzNQxUax/0UFrLs6XJKNF7aDoDrj0R0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfvuVn/btsIzNQxUax/0UFrLs6XJKNF7aDoDrj0R0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfvuVn/btsIzNQxUax/0UFrLs6XJKNF7aDoDrj0R0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfvuVn%2FbtsIzNQxUax%2F0UFrLs6XJKNF7aDoDrj0R0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;603&quot; height=&quot;415&quot; data-origin-width=&quot;603&quot; data-origin-height=&quot;415&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본인은 자바 공부를 시작할때 변수와 형변환 까지는 매우 쉽게 접근해서 공부를 했었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수와 형변환을 공부할때는 &quot;나 자바에 재능이 있는것인가?&quot; 라고 자신감 넘치게 공부를 했지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제는 그다음 연산자에서부터 시작 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에 표에 나와 있는거처럼 많이 본 특수문자 지만 자바에서는 전혀 다르게 작동한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내 머리속에 있는 특수문자와 그 뜻들이 자바에서는 다르게 작용하니 처음에 적용 할때는 매우 힘이 들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의를 찾아보고 유튜브를 찾아보고 계속 공부를 하고 이해를 했지만 돌아서면 그전에 머리속에 남아있는 것들이 새롭게 배우는 자바의 연산자를 지워 버리는게 가장 큰 문제였기 때문에 이렇게 공부를 해서는 안되겠다 생각해서 다른 방법으로&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새롭게 접근을 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그것은 바로 머리속에 지우개를&lt;/b&gt; 넣는것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;amp;&amp;amp; , || 등등 가장 헷갈리는 연산자를 외우기 위해서 나의 머리속을 리셋 시켰다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에 연산자들은 자바에서 처음 접하는 연산자처럼 생각하고 공부하기 시작했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 직접 코드를 쳐봤다. 영상으로,음성으로 책으로 아무리 본들 무엇하나 내가 실무에서 직접 칠줄 알아야 하는데 말이다. 수도없이 계속해서 코드를 쳐봤다. 그결과 나는 연산자 부분을 길면 길고 짧으면 짧은 시간안에 머리속에 각인 시킬수 있었다.&amp;nbsp; 사람마다 각자 다른 공부 방법이 있겠지만.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연산자 부분에서 느낀 내 공부법은 기존 연산자를 지우고 새롭게 흰 도화지에서 공부를 한다는 생각으로 임해야하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외우는 것도 중요하지만 개발쪽은 직접 쳐봐야한다. 머리와 눈으로 배운다 하지만 손으로도 배워야 하는걸 느낀게&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;자바&quot; 였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2.제어문&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연산자를 끝내기가 무섭게 찾아온 다음 파트는 &lt;b&gt;&quot;제어문&quot;&amp;nbsp;&lt;/b&gt;이였다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조건문 , 반복문 처음보는 ~~문 이 튀어나오기 시작했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조건문 말그대로 조건에 맞게 움직이는 뜻이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들자면&lt;/p&gt;
&lt;pre id=&quot;code_1720951972213&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Main {
	public static void main(String[] args) {

		int num1 = 5;
		int num2 = 10;

		if (num1 == 4) {
			System.out.println(&quot;해당 숫자는 4입니다.&quot;);
		} else if (num1 == 5) {
			System.out.println(&quot;해당 숫자는 5입니다.&quot;);

			if (num1 == num2) {
				System.out.println(&quot;두 정수는똑같습니다.&quot;);
			} else {
				System.out.println(&quot;두 정수는 서로 다릅니다.&quot;);
			}
		}
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드와 같이 조건이 true 인지 false 인지 조건을 걸고 그에 맞게 실행할 코드를 작성 하는것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반복문도 for,while 문을 사용하여 조건에 맞으면 반복문 안에있는 코드를 반복할수 있게 하는것이였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 내가 이해를 하지 못했던 부분이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조건문 안에 조건문&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반복문 안에 반복문&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조건문 안에 반복문 안에 조건문 등등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안에 안에 안에 안에 사용할수있는것들이 많아지면서 계속해서 혼돈이 오기 시작했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삼항연산자,for~each 등등 다양한 표현법? 도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금도 자바를 다시 복습하지만 아직 100% 완벽하게 학습을 한것은 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 3주~2주전 보다는 훨씬 이해가 잘 되기 시작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;트러블 슈팅..? 이라고 해야하나 해결법은 그냥 계속 코드를 쳐야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방법이 없었다 외울수 있는게 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 조건문과 반복문의 개념만 이해하고 주구장창 코딩테스트와 실습예제들을 바탕으로 계속해서 조건문과 반복문을 쳐봐야한다. 그거말곤 방법이 없었다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어쨋튼 연산자와 조건문 반복문 이외에 아직 공부를 하고 있지만 일단 나의 Java 첫번째 트러블 슈팅 포스팅을 마치도록 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아마 계속해서 언어 공부를 하면서 수없이 많은 트러블 슈팅 포스팅을 작성하지 않을까 싶다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞으로 더 많은것을 배우기 위해 오늘도 힘차게 한발짝 나아가자.&lt;/p&gt;</description>
      <category>c0ding/JAVA 끼고 개발까지</category>
      <author>k-codewiki</author>
      <guid isPermaLink="true">https://k-codewiki.tistory.com/7</guid>
      <comments>https://k-codewiki.tistory.com/7#entry7comment</comments>
      <pubDate>Sun, 14 Jul 2024 19:24:15 +0900</pubDate>
    </item>
    <item>
      <title>## Garbage Collection ## 가비지 컬렉션 이란?</title>
      <link>https://k-codewiki.tistory.com/6</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;[ Garbage Collection (가비지 컬렉션) 이란 ? ]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그램 코딩을 하다보면 유효하지 않은 메모리 즉, 가비지 (Garbage) 가 발생하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java 언어를 이용해 개발을 하다 보면 개발자가 메모리를 직접 해제 해주는 일은 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 이유는 JVM의 가비지 컬렉터가 불필요한 메모리를 알아서 정리를 해주기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대신 Java 에서 명시적으로 불필요한 데이터를 표현하기 위해서 일반적으로 null &amp;amp; 0 을 선언해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 코드를 예시로 들어보자.&lt;/p&gt;
&lt;pre id=&quot;code_1720354528357&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GarbageTest gt = new GarbageTest();
gt.setName(&quot;wow&quot;);
gt = null;

// 가비지 발생
GarbageTest = new GarbageTest();
gt.setName(&quot;no&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;기존의 wow 로 생성된 GrabageTest 객체는 더이상 참조를 하지 않고 사용이 되지 않아서 Garbage(가비지)가 되었다. Java 에서는 이러한 메모리 누수를 방지하기 위해 가비지 컬렉터(Garbage Collector, GC)가 주기적으로 검사하여 메모리를 청소해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Garbage Collection(가비지 컬렉션)의 동작 방식&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;가비지 컬렉션은 Unreachable 한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199; color: #000000; text-align: start;&quot;&gt;객체를 청소하기 위해 Mark-Sweep 알고리즘을 사용&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;한다. Mark-Sweep 이란 다양한 다양한 가비지 컬렉션에서 사용되는 객체를 솎아내는 내부 알고리즘이다. 가비지 컬렉션이 동작하는 아주 기초적인 청소 과정이다.&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;img1.daumcdn.png&quot; data-origin-width=&quot;959&quot; data-origin-height=&quot;479&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dEuCdv/btsIpLGL8zO/hvftgd0UZMTI69x9VOZy91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dEuCdv/btsIpLGL8zO/hvftgd0UZMTI69x9VOZy91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dEuCdv/btsIpLGL8zO/hvftgd0UZMTI69x9VOZy91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdEuCdv%2FbtsIpLGL8zO%2Fhvftgd0UZMTI69x9VOZy91%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;959&quot; height=&quot;479&quot; data-filename=&quot;img1.daumcdn.png&quot; data-origin-width=&quot;959&quot; data-origin-height=&quot;479&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;원리는 그림을 보면 쉽게 이해할 수 있다.&amp;nbsp;가비지 컬렉션이 될 대상 객체를&amp;nbsp;&lt;b&gt;식별(Mark)&lt;/b&gt;하고&amp;nbsp;&lt;b&gt;제거(Sweep)&lt;/b&gt;하며 객체가 제거되어 단편화된 메모리 영역을 앞에서부터&amp;nbsp;채워나가는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;작업(Compaction)&lt;/b&gt;을 수행하게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #353638; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Mark: 사용되는 메모리(Reachable)와 사용되지 않는 메모리(Unreachable)를 식별하는 작업이다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Root Space로부터 그래프 순회를 통해 연결된 객체들을 찾아내 각각 어떤 객체를 참조하고 있는지 찾아서 마킹한다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Sweep: Mark 단계에서 사용되지 않음(Unreachable)으로 식별된 메모리를 해제하는 작업이다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;참조하고 있지 않은 객체 즉 Unreachable 객체들을 Heap에서 제거한다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Compaction:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;&amp;nbsp;Sweep 후에 분산된 객체들을 Heap의 시작 주소로 모아 압축한다.&amp;nbsp;&lt;br /&gt;(가비지 컬렉션 종류에 따라 생략되는 경우도 있다.)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;972&quot; data-origin-height=&quot;514&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CXl8x/btsIqVVUOwP/lISEX79gDgRvZfhguKceq1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CXl8x/btsIqVVUOwP/lISEX79gDgRvZfhguKceq1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CXl8x/btsIqVVUOwP/lISEX79gDgRvZfhguKceq1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/CXl8x/btsIqVVUOwP/lISEX79gDgRvZfhguKceq1/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;665&quot; height=&quot;352&quot; data-origin-width=&quot;972&quot; data-origin-height=&quot;514&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;Mark and sweep&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djcZkh/btr36QMPbF6/RvXBadI8137FQJBicyW9U1/img.gif&quot; data-url=&quot;https://blog.kakaocdn.net/dn/djcZkh/btr36QMPbF6/RvXBadI8137FQJBicyW9U1/img.gif&quot;&gt;&lt;/span&gt;Mark and sweep&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이렇게 Mark And Sweep 방식을 사용하면 루트로부터 연결이 끊긴 객체들을 모두 지울 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <author>k-codewiki</author>
      <guid isPermaLink="true">https://k-codewiki.tistory.com/6</guid>
      <comments>https://k-codewiki.tistory.com/6#entry6comment</comments>
      <pubDate>Sun, 7 Jul 2024 21:18:42 +0900</pubDate>
    </item>
    <item>
      <title>## 클래스 다이어그램 ## ( 수정중 )</title>
      <link>https://k-codewiki.tistory.com/5</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Java 에서 클래스 다이어그램 이란?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스 다이어그램 = UML 이라고 불리기도 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;UML은 Unified Modeling Language의 약자로, 통합 모델링 언어입니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;쉽게 말하자면 모델을 만들고 설명하는 표준 언어(약속)라고 생각하면 됩니다&lt;/span&gt; .&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜 클래스 다이어그램(UML) 을 알아야 하는지?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;다른 사람들과의 협업에 필요합니다.&lt;/b&gt;&lt;br /&gt;클래스 다이어그램(UML) 형식을 차용해 의사소통하면, 의미가 명확하고 설계에 대한 논의가 순조롭게 이루어질 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;전체 시스템의 구조와 클래스의 의존성을 파악합니다.&lt;/b&gt;&lt;br /&gt;다이어그램을 분석하면, 시스템의 구조는 물론 클래스 간의 의존성도 파악하기 쉽습니다.&lt;br /&gt;그 후에 설계를 더 세분화 하고 틀을 잡아가면서 진행 할수가 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;유지보수를 위한 백엔드 문서로 사용합니다.&lt;/b&gt;&lt;br /&gt;위의 항목과 이어지는 방법입니다. 구조적으로 효율적이지 않거나, 모듈화 또는 구체화해야하는 작업이 필요하다고 생각한다면 UML을 먼저 작성해보고 구조를 수정하는 것이 좋겠습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;클래스 다이어그램(UML)&lt;/h3&gt;
&lt;h3 id=&quot;class&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Class&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;클래스는 보통 3개 구역으로 나뉜 사각형으로 그립니다.&lt;br /&gt;클래스의 이름, 속성, 기능을 표기할 수 있으며 이름만 필수로 명시해야 합니다.&lt;br /&gt;보통 속성과 기능을 생략해 다이어그램을 그리는 경우는 주로 클래스의 흐름 분석 위주의 작업입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;345&quot; data-origin-height=&quot;349&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xld8e/btsIiReOM8g/WditKns69vcSk2DFnsvA30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xld8e/btsIiReOM8g/WditKns69vcSk2DFnsvA30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xld8e/btsIiReOM8g/WditKns69vcSk2DFnsvA30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxld8e%2FbtsIiReOM8g%2FWditKns69vcSk2DFnsvA30%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;345&quot; height=&quot;349&quot; data-origin-width=&quot;345&quot; data-origin-height=&quot;349&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;클래스의 세부사항은 필드와 메서드의&lt;span&gt;&amp;nbsp;&lt;/span&gt;접근 제한자,&lt;span&gt;&amp;nbsp;&lt;/span&gt;필드명(메서드명)&lt;span&gt;&amp;nbsp;&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;데이터 타입&lt;span&gt;&amp;nbsp;&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;매개변수(parameter)&lt;span&gt;&amp;nbsp;&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;리턴 타입&lt;span&gt;&amp;nbsp;&lt;/span&gt;등을 나타낼 수 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;접근 제한자&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;+&lt;span&gt;&amp;nbsp;&lt;/span&gt;: public&lt;/li&gt;
&lt;li&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;: private&lt;/li&gt;
&lt;li&gt;#&lt;span&gt;&amp;nbsp;&lt;/span&gt;: protected&lt;/li&gt;
&lt;li&gt;~ : default&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;속성&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;접근제어자 이름: 타입 = 기본값&lt;/li&gt;
&lt;li&gt;기본값 생략 가능&lt;/li&gt;
&lt;li&gt;- title: String = &quot;&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기능&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;접근제어자 이름(파라미터 속성): 리턴값&lt;/li&gt;
&lt;li&gt;void 리턴값은 생략 가능&lt;/li&gt;
&lt;li&gt;+ setTitle(String)&lt;/li&gt;
&lt;li&gt;+ getTitle(): String&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;bash&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;public class Member {
	private String memberId;
    private String memberPwd;
    private String memberName;
    private int age;
    private char gender;
    private String phone;
    private String email;
    
    // Member 기본 생성자
 	public Member() {}
    
    public void changName(String name){
    
    }
    
    public void printname(){
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위 다이어그램을 코드로 구현한 결과입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다이어그램을 구성할 때 클래스의 세부사항들을 상세하게 적는 것이 유용할 때도 있지만, 클래스 다이어그램은 필드나 메서드를 모두 선언하는 곳이 아니기 때문에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;다이어그램을 그리는 목적에 필요한 것만 명시&lt;/b&gt;하는 것이 좋습니다.&lt;br /&gt;보통 3개 구역으로 구분하지만 사용자 정의 모델 속성을 나타내기 위한 구역을 추가로 사용할 수도 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;stereo-type&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Stereo Type&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;UML에서 제공하는 기본 요소 외에 추가적인 확장 요소를 나타내는 타입입니다.&lt;br /&gt;길러멧 기호 ( &amp;laquo; &amp;raquo; ) 사이에 적습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;222&quot; data-origin-height=&quot;142&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kKzKa/btsIiU3BS7l/1BVzTmkMtFobEij6rZfUPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kKzKa/btsIiU3BS7l/1BVzTmkMtFobEij6rZfUPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kKzKa/btsIiU3BS7l/1BVzTmkMtFobEij6rZfUPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkKzKa%2FbtsIiU3BS7l%2F1BVzTmkMtFobEij6rZfUPk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;222&quot; height=&quot;142&quot; data-origin-width=&quot;222&quot; data-origin-height=&quot;142&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;296&quot; data-origin-height=&quot;164&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vwyHS/btsIiVuGhTp/njUF21wKsrv0Zk7qYfwW00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vwyHS/btsIiVuGhTp/njUF21wKsrv0Zk7qYfwW00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vwyHS/btsIiVuGhTp/njUF21wKsrv0Zk7qYfwW00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvwyHS%2FbtsIiVuGhTp%2FnjUF21wKsrv0Zk7qYfwW00%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;296&quot; height=&quot;164&quot; data-origin-width=&quot;296&quot; data-origin-height=&quot;164&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위 다이어그램은 interface 와 abstract 클래스를 표현하고 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>c0ding/JAVA 끼고 개발까지</category>
      <author>k-codewiki</author>
      <guid isPermaLink="true">https://k-codewiki.tistory.com/5</guid>
      <comments>https://k-codewiki.tistory.com/5#entry5comment</comments>
      <pubDate>Sun, 7 Jul 2024 21:09:51 +0900</pubDate>
    </item>
    <item>
      <title>## JAVA 객체와 클래스 ##</title>
      <link>https://k-codewiki.tistory.com/3</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;JAVA -&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체란 ?&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;제임스 고슬링이 작성한 자바 언어 설명서 ( The java Language Specification) 에는 객체 ( object ) 란 클래스의 인스턴스나 배열을 말한다고 정의가 되어있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터 공학에서 객체는 변수,자료구조,함수,메서드,식별자에 의해 참조된 메모리 상의 값 등을 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체 지향 프로그래밍에서 객체는 변수,함수,자료 구조의 조합이 될 수 있는데, 특히 객체지향 프로그래밍에서 클래스를 기반으로 한 변수를 클래스의 인스턴스 라고 지칭 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;479&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dWmMxS/btsH89ACeOJ/2JIkws5ssijomYgBiS2HkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dWmMxS/btsH89ACeOJ/2JIkws5ssijomYgBiS2HkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dWmMxS/btsH89ACeOJ/2JIkws5ssijomYgBiS2HkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdWmMxS%2FbtsH89ACeOJ%2F2JIkws5ssijomYgBiS2HkK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;853&quot; height=&quot;479&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;479&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 , 객체를 쉽게 요약해서 정리 하자면 객체는 실세계에 존재하거나 생각 할 수 있는 모든것을 뜻합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 개발을 하면서 접하게 될 프로그래밍에서의 객체는 속성과 기능을 가지는 '프로그램 단위' 를 뜻합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-----------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스란 ?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체지향 프로그래밍에서 클래스는 &lt;b&gt;멤버 변수와 메서드를 가지는 객체를 만들기 위한 확장이 가능한 코드 양식&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 말해, &lt;b&gt;객체를 찍어내기 위한 틀, 설계도&lt;/b&gt;라고 보시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>c0ding/JAVA 끼고 개발까지</category>
      <author>k-codewiki</author>
      <guid isPermaLink="true">https://k-codewiki.tistory.com/3</guid>
      <comments>https://k-codewiki.tistory.com/3#entry3comment</comments>
      <pubDate>Mon, 24 Jun 2024 08:26:23 +0900</pubDate>
    </item>
    <item>
      <title>## 참조변수와 일반변수에 대하여 ##</title>
      <link>https://k-codewiki.tistory.com/2</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Java&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 참조 변수 (레퍼런스 변수)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 참조 변수는 주소를 가지고 있는 변수 * // 크기가 정해져 있지 않은 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex ) class Menu {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;String snack = &quot;팝콘&quot;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;int price = 5000;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;public class MovieMenu {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;public static void main(String[] args) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Menu mu = new Menu();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.out.println(mu.snack); // 팝콘 ( 메뉴 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;System.out.println(mu.price); // 5000 ( 가격 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 일반 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; * 일반 변수는 값을 가지고 있는 변수 * // 크기가 정해져 있는 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;ex ) int num = 10;&lt;/p&gt;</description>
      <category>c0ding/JAVA 끼고 개발까지</category>
      <author>k-codewiki</author>
      <guid isPermaLink="true">https://k-codewiki.tistory.com/2</guid>
      <comments>https://k-codewiki.tistory.com/2#entry2comment</comments>
      <pubDate>Mon, 24 Jun 2024 08:21:41 +0900</pubDate>
    </item>
    <item>
      <title>JAVA 란?</title>
      <link>https://k-codewiki.tistory.com/1</link>
      <description>&lt;h1&gt;  Java의 매력: 특징과 장단점&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java는 그 안정성과 강력함으로 오랫동안 사랑받아온 프로그래밍 언어입니다. 오늘은 Java의 주요 특징과 함께, 이를 사용할 때의 장단점을 알아보도록 하겠습니다. 이 글이 여러분이 Java를 더 잘 이해하고 활용하는 데 도움이 되길 바랍니다!&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  Java의 주요 특징&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  1. &lt;b&gt;플랫폼 독립성&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java 프로그램은 한 번 작성하면 다양한 운영체제에서 실행될 수 있습니다. 이는 Java Virtual Machine(JVM)이 각 플랫폼에 맞게 변환해 주기 때문입니다. Windows, Mac, Linux 등 어디서든 동일하게 실행됩니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  2. &lt;b&gt;객체 지향 프로그래밍 (OOP)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java는 객체 지향 언어로, 캡슐화, 상속, 다형성과 같은 개념을 통해 코드를 보다 구조적으로 작성할 수 있게 합니다. 이를 통해 유지보수와 확장이 용이합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;♻️ 3. &lt;b&gt;자동 메모리 관리&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java는 Garbage Collection을 통해 불필요한 메모리를 자동으로 정리해 줍니다. 개발자는 메모리 관리를 신경 쓰지 않아도 되므로, 코드 작성에 더 집중할 수 있습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  4. &lt;b&gt;풍부한 표준 라이브러리&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java는 네트워킹, 데이터베이스, 유틸리티 등 다양한 기능을 제공하는 표준 라이브러리를 갖추고 있습니다. 이를 통해 복잡한 기능도 쉽게 구현할 수 있습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  5. &lt;b&gt;강력한 커뮤니티와 지원&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java는 오랜 역사를 가진 만큼 방대한 커뮤니티와 지원을 자랑합니다. 수많은 라이브러리, 프레임워크, 문제 해결 자료를 쉽게 찾을 수 있습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  Java의 장점&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  1. &lt;b&gt;안정성과 성능&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java는 뛰어난 안정성과 성능을 자랑합니다. 특히 대규모 시스템 개발에 적합하여 기업용 애플리케이션에서 많이 사용됩니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  2. &lt;b&gt;멀티쓰레딩 지원&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java는 멀티쓰레딩을 기본적으로 지원하여 복잡한 멀티쓰레드 애플리케이션을 쉽게 개발할 수 있습니다. 병렬 처리로 성능을 극대화할 수 있습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  3. &lt;b&gt;보안&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java는 강력한 보안 기능을 제공하여 안전하게 네트워크 애플리케이션을 개발할 수 있습니다. JVM은 코드의 안전성을 철저히 검증합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  4. &lt;b&gt;광범위한 사용&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java는 웹 애플리케이션, 안드로이드 앱, 엔터프라이즈 시스템 등 다양한 분야에서 널리 사용됩니다. 이는 Java 개발자들에게 많은 기회를 제공합니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  Java의 단점&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  1. &lt;b&gt;느린 실행 속도&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JVM 위에서 실행되기 때문에 네이티브 언어(C, C++)에 비해 실행 속도가 느릴 수 있습니다. 하지만 JVM의 지속적인 성능 최적화로 많이 개선되었습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;  2. &lt;b&gt;메모리 소비&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java 애플리케이션은 JVM과 함께 실행되기 때문에 메모리 소비가 상대적으로 많을 수 있습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt; ️ 3. &lt;b&gt;복잡한 GUI&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java의 GUI 개발은 다른 최신 언어들에 비해 다소 복잡하고 불편할 수 있습니다. 그러나 JavaFX와 같은 프레임워크를 사용하면 이를 어느 정도 해결할 수 있습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;⏳ 4. &lt;b&gt;장시간 컴파일&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대규모 프로젝트의 경우 컴파일 시간이 오래 걸릴 수 있습니다. 이는 개발 속도를 저하시킬 수 있습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  결론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java는 그 안정성과 광범위한 사용으로 인해 여전히 많은 개발자들에게 사랑받는 언어입니다. 플랫폼 독립성, 객체 지향 프로그래밍, 자동 메모리 관리 등의 강력한 특징들이 있지만, 느린 실행 속도와 메모리 소비와 같은 단점도 존재합니다. 그러나 이러한 단점들은 지속적인 JVM 성능 최적화와 다양한 툴의 발전으로 인해 많이 개선되었습니다. Java를 잘 이해하고 활용한다면, 다양한 분야에서 강력한 애플리케이션을 개발할 수 있을 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java의 특징과 장단점에 대한 이해를 바탕으로, 여러분의 프로젝트에 적합한 언어인지 판단해 보시길 바랍니다.  &lt;/p&gt;</description>
      <category>c0ding/JAVA 끼고 개발까지</category>
      <author>k-codewiki</author>
      <guid isPermaLink="true">https://k-codewiki.tistory.com/1</guid>
      <comments>https://k-codewiki.tistory.com/1#entry1comment</comments>
      <pubDate>Sun, 16 Jun 2024 18:19:25 +0900</pubDate>
    </item>
  </channel>
</rss>