<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Hello, Python</title>
    <link>https://hwangyoungjae.tistory.com/</link>
    <description>파이썬, 그리고 자바</description>
    <language>ko</language>
    <pubDate>Sun, 5 Apr 2026 12:57:16 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>hwangyoungjae</managingEditor>
    <image>
      <title>Hello, Python</title>
      <url>https://t1.daumcdn.net/cfile/tistory/27550437587F3D3A29</url>
      <link>https://hwangyoungjae.tistory.com</link>
    </image>
    <item>
      <title>JAVA, Optional</title>
      <link>https://hwangyoungjae.tistory.com/149</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Optional 객체 생성하기&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1.1 Optional.of - 참조변수의 값이 null이 아닐때&lt;/h4&gt;
&lt;pre id=&quot;code_1639098995832&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Optional&amp;lt;String&amp;gt; optStr = Optional.of(&quot;Hello World!&quot;);
Optional&amp;lt;String&amp;gt; optStNull = Optional.of(null); // NullPointerException 발생&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;`of`로 Optional 객체를 생성할때 null을 인자로 사용하면 NullPointerException이 발생하기 때문에 반드시 값이 있어야 한다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1.2 Optional.ofNullable - 참조변수의 값이 null일 가능성이 있을때&lt;/h4&gt;
&lt;pre id=&quot;code_1639099320265&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Optional&amp;lt;String&amp;gt; optStr = Optional.ofNullable(&quot;Hello World!&quot;);
Optional&amp;lt;String&amp;gt; optStrN = Optional.ofNullable(null);
System.out.printf(&quot;optStr : Present=%s, Empty=%s%n&quot;, optStr.isPresent(), optStr.isEmpty());
System.out.printf(&quot;optStrN: Present=%s, Empty=%s%n&quot;, optStrN.isPresent(), optStrN.isEmpty());

// 출력
optStr : Present=true, Empty=false
optStrN: Present=false, Empty=true&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1.3 Optional.empty - 참조변수를 기본값(null)로 초기화할때&lt;/h4&gt;
&lt;pre id=&quot;code_1639099807452&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Optional&amp;lt;String&amp;gt; optStrN = Optional.empty();
System.out.printf(&quot;optStrN: Present=%s, Empty=%s%n&quot;, optStrN.isPresent(), optStrN.isEmpty());
        
// 출력
optStrN: Present=false, Empty=true&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Optional 객체의 값 가져오기&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.1 T get() - 참조변수가 반드시 있을때&lt;/h4&gt;
&lt;pre id=&quot;code_1639100560674&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Optional&amp;lt;String&amp;gt; optStr = Optional.of(&quot;Hello World&quot;);
Optional&amp;lt;String&amp;gt; optStrN = Optional.empty();
String s1 = optStr.get();
String s2 = optStrN.get(); // NoSuchElementException 발생&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.2 T orElse(T other) - 참조변수가 없을때 값 대체&lt;/h4&gt;
&lt;pre id=&quot;code_1639100576480&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Optional&amp;lt;String&amp;gt; optStr = Optional.of(&quot;Hello World&quot;);
Optional&amp;lt;String&amp;gt; optStrN = Optional.empty();
System.out.println(&quot;optStr : &quot; + optStr.orElse(&quot;Default value&quot;));
System.out.println(&quot;optStrN: &quot; + optStrN.orElse(&quot;Default value!&quot;));

// 출력
optStr : Hello World
optStrN: Default value!&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.3 T orElseGet(Supplier&amp;lt;? extends T&amp;gt; supplier) - 참조변수가 없을때 람다식으로 대체&lt;/h4&gt;
&lt;pre id=&quot;code_1639102000730&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Optional&amp;lt;String&amp;gt; optStr = Optional.of(&quot;Hello World&quot;);
Optional&amp;lt;String&amp;gt; optStrN = Optional.empty();
System.out.println(&quot;optStr : &quot; + optStr.orElseGet(() -&amp;gt; &quot;Default value&quot;));
System.out.println(&quot;optStrN: &quot; + optStrN.orElseGet(() -&amp;gt; &quot;Default value&quot;));

// 출력
optStr : Hello World
optStrN: Default value&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.4 T orElseThrow(Supplier&amp;lt;? extends X&amp;gt; exceptionSupplier) - 참조변수가 null일때 예외 발생&lt;/h4&gt;
&lt;pre id=&quot;code_1639102123050&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Optional&amp;lt;String&amp;gt; optStr = Optional.of(&quot;Hello World&quot;);
Optional&amp;lt;String&amp;gt; optStrN = Optional.empty();
optStr.orElseThrow(IllegalStateException::new);
optStrN.orElseThrow(IllegalStateException::new); // IllegalStateException 발생&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.5 Optional&amp;lt;T&amp;gt; filter(Predicate&amp;lt;? super T&amp;gt; predicate) - 필터링해서 참조변수 가져오기&lt;/h4&gt;
&lt;pre id=&quot;code_1639102495616&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Optional&amp;lt;String&amp;gt; optStr1 = Optional.of(&quot;Hello World&quot;);
Optional&amp;lt;String&amp;gt; optStr2 = Optional.of(&quot;World Hello&quot;);
String s1 = optStr1.filter(s -&amp;gt; s.substring(0, 1).equals(&quot;H&quot;)).orElse(&quot;Default&quot;);
String s2 = optStr2.filter(s -&amp;gt; s.substring(0, 1).equals(&quot;H&quot;)).orElse(&quot;Default&quot;);
System.out.println(&quot;s1: &quot; + s1);
System.out.println(&quot;s2: &quot; + s2);

// 출력
s1: Hello World
s2: Default&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.6 boolean isPresent() - 참조변수 확인&lt;/h4&gt;
&lt;pre id=&quot;code_1639105559932&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Optional&amp;lt;String&amp;gt; optStr1 = Optional.ofNullable(&quot;youngjae&quot;);
Optional&amp;lt;String&amp;gt; optStr2 = Optional.ofNullable(null);

System.out.println(&quot;optStr1.isPresent() = &quot; + optStr1.isPresent());
System.out.println(&quot;optStr2.isPresent() = &quot; + optStr2.isPresent());

// 출력
optStr1.isPresent() = true
optStr2.isPresent() = false&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.7 void ifPresent(Consumer&amp;lt;? super T&amp;gt; action) - 참조변수 있으면 actino 호출&lt;/h4&gt;
&lt;pre id=&quot;code_1639105763623&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Optional&amp;lt;String&amp;gt; optStr1 = Optional.ofNullable(&quot;youngjae&quot;);
Optional&amp;lt;String&amp;gt; optStr2 = Optional.ofNullable(null);

optStr1.ifPresent(s -&amp;gt; System.out.println(&quot;optStr1: &quot; + s));
optStr2.ifPresent(s -&amp;gt; System.out.println(&quot;optStr2: &quot; + s));

// 출력
optStr1: youngjae&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.8 void ifPresentOrElse(Consumer&amp;lt;? super T&amp;gt; action, Runnable emptyAction) - 참조변수 있으면 action, 없으면 emptyActino 호출&lt;/h4&gt;
&lt;pre id=&quot;code_1639105923821&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Optional&amp;lt;String&amp;gt; optStr1 = Optional.ofNullable(&quot;youngjae&quot;);
Optional&amp;lt;String&amp;gt; optStr2 = Optional.ofNullable(null);

optStr1.ifPresentOrElse(
        s -&amp;gt; System.out.println(&quot;optStr1: &quot; + s),
        () -&amp;gt; System.out.println(&quot;optStr1: novalue&quot;));
optStr2.ifPresentOrElse(
        s -&amp;gt; System.out.println(&quot;optStr2: &quot; + s),
        () -&amp;gt; System.out.println(&quot;optStr2: novalue&quot;));
    }

// 출력
optStr1: youngjae
optStr2: novalue&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.9 Optional&amp;lt;U&amp;gt; map(Function&amp;lt;? super T, ? extends U&amp;gt; mapper) - 매핑&lt;/h4&gt;
&lt;pre id=&quot;code_1639103741980&quot; class=&quot;java&quot; style=&quot;margin: 20px auto 0px; display: block; overflow: auto; padding: 20px; color: #383a42; background: #f8f8f8; font-size: 14px; font-family: 'SF Mono', Menlo, Consolas, Monaco, monospace; border: 1px solid #ebebeb; line-height: 1.71; cursor: default; z-index: 1;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Optional&amp;lt;String&amp;gt; optStr1 = Optional.of(&quot;Hello World&quot;);
Optional&amp;lt;String&amp;gt; optStr2 = Optional.empty();
Integer s1 = optStr1.map(String::length).orElse(0);
Integer s2 = optStr2.map(String::length).orElse(0);
System.out.println(&quot;s1: &quot; + s1);
System.out.println(&quot;s2: &quot; + s2);

// 출력
s1: 11
s2: 0&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.10 Optional&amp;lt;U&amp;gt; flatMap(Function&amp;lt;? super T, ? extends Optional&amp;lt;? extends U&amp;gt;&amp;gt; mapper) - 리턴타입 Optional&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;map과 flatMap의 차이점을 보면서 flatMap의 특성을 살펴보겠음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;map과 flatMap은 반환타입이 Optional인건 같지만, map은 람다식 return값을 Optional로 감싸서 주지만, flatMap은 직접 감싸야 한다 혹은 이미 감싸져 있는걸 그대로 사용할수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Member 객체에 getName이 Optinal타입으로 return해줄때 member의 name을 가져오는 예제를 가지고 비교해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JPA에서 비식별 형태로 연관관계를 구성할때 Optional을 구성하고, 이때 flatMap을 통해 활용할수 있을것으로 생각된다.&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;예제에 사용된 Member class&lt;/p&gt;
&lt;pre id=&quot;code_1639105301664&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Member {
    private String name = null;

    public Member() {
    }

    public Member(String name) {
        this.name = name;
    }

    public Optional&amp;lt;String&amp;gt; getName() {
        return Optional.ofNullable(name);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1639105327825&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Member m1 = new Member();
Member m2 = new Member(&quot;youngjae&quot;);
Optional&amp;lt;Member&amp;gt; optM1 = Optional.ofNullable(m1);
Optional&amp;lt;Member&amp;gt; optM2 = Optional.ofNullable(m2);

// map
String m1Name = optM1
        .map(member -&amp;gt; member.getName().orElse(&quot;noname&quot;))
        .get();
String m2Name = optM2
        .map(member -&amp;gt; member.getName().orElse(&quot;noname&quot;))
        .get();
System.out.println(&quot;map    , m1Name: &quot; + m1Name);
System.out.println(&quot;map    , m2Name: &quot; + m2Name);


// flatMap
String m1NameF = optM1
        .flatMap(Member::getName)
        .orElse(&quot;noname&quot;);
String m2NameF = optM2
        .flatMap(Member::getName)
        .orElse(&quot;noname&quot;);
System.out.println(&quot;flatMap, m1Name: &quot; + m1NameF);
System.out.println(&quot;flatMap, m2Name: &quot; + m2NameF);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;map을 사용한 부분은 억지를 부린감이 없지않아 있지만, 어쨌든 flatMap을 사용하면 깔끔해진다.&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;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바의 정석 3판&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://mangkyu.tistory.com/70&quot;&gt;https://mangkyu.tistory.com/70&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://madplay.github.io/post/difference-between-map-and-flatmap-methods-in-java&quot;&gt;https://madplay.github.io/post/difference-between-map-and-flatmap-methods-in-java&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ryanwoo.tistory.com/48&quot;&gt;https://ryanwoo.tistory.com/48&lt;/a&gt;&lt;/p&gt;</description>
      <category>Java</category>
      <category>Java</category>
      <category>optional</category>
      <author>hwangyoungjae</author>
      <guid isPermaLink="true">https://hwangyoungjae.tistory.com/149</guid>
      <comments>https://hwangyoungjae.tistory.com/149#entry149comment</comments>
      <pubDate>Fri, 10 Dec 2021 12:12:47 +0900</pubDate>
    </item>
    <item>
      <title>JPA, Composite Key, IdClass</title>
      <link>https://hwangyoungjae.tistory.com/148</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;복합키를 IdClass로 구성하여 입력 및 가져오는 code를 정리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;N + 1 문제는 fetchjoin과 distinct로 해결하고자 했으며, 추후에 QueryDSL로도 정리 예정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Entity&lt;/h2&gt;
&lt;pre id=&quot;code_1638493095016&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Entity @Table(name = &quot;member&quot;)
@Getter @Setter
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class Member {
    @EqualsAndHashCode.Include
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = &quot;member_id&quot;)
    private Long id;

    private String name;

    @OneToMany(mappedBy = &quot;member&quot;, fetch = FetchType.LAZY)
    private List&amp;lt;AssociationMember&amp;gt; associationMembers = new ArrayList&amp;lt;&amp;gt;();
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1638493104102&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Entity @Table(name = &quot;association&quot;)
@Getter @Setter
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class Association {
    @EqualsAndHashCode.Include
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = &quot;association_id&quot;)
    private Long id;

    private String name;

    @OneToMany(mappedBy = &quot;association&quot;, fetch = FetchType.LAZY)
    private List&amp;lt;AssociationMember&amp;gt; associationMembers = new ArrayList&amp;lt;&amp;gt;();
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1638493114037&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@NoArgsConstructor @AllArgsConstructor
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class AssociationMemberId implements Serializable {
    @EqualsAndHashCode.Include
    private Member member;
    @EqualsAndHashCode.Include
    private Association association;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1638493124136&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Entity @Table(name = &quot;association_member&quot;)
@IdClass(AssociationMemberId.class)
@Getter @Setter
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class AssociationMember {
    @EqualsAndHashCode.Include
    @Id @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = &quot;member_id&quot;)
    private Member member;

    @EqualsAndHashCode.Include
    @Id @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = &quot;association_id&quot;)
    private Association association;
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;DDL&lt;/h2&gt;
&lt;pre id=&quot;code_1638493437484&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;create table `member`
(
    member_id bigint auto_increment primary key,
    name      varchar(255) null
);

create table `association`
(
    association_id bigint auto_increment primary key,
    name           varchar(255) null
);

create table `association_member`
(
    association_id bigint not null,
    member_id      bigint not null,
    primary key (association_id, member_id),
    constraint FKbhgfoulhcplvmuj5v3qg9k57q
        foreign key (association_id) references association (association_id),
    constraint FKe4bl75mb9i4m8ib5sw8otthay
        foreign key (member_id) references member (member_id)
);&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Record setup&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행코드&lt;/p&gt;
&lt;pre id=&quot;code_1638493580026&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public static void logic(EntityManager em) {
    for (int i = 1; i &amp;lt;= 3; i++) {
        Association association = new Association();
        association.setName(&quot;association&quot; + i);
        em.persist(association);
    }

    Member member = new Member();
    member.setName(&quot;member&quot;);
    em.persist(member);

    for (int i = 1; i &amp;lt;= 3; i++) {
        AssociationMember am = new AssociationMember();
        am.setMember(member);
        am.setAssociation(em.find(Association.class, (long) i));
        em.persist(am);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행결과&lt;/p&gt;
&lt;pre id=&quot;code_1638493643002&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Hibernate: insert into association (name) values (?)
Hibernate: insert into association (name) values (?)
Hibernate: insert into association (name) values (?)
Hibernate: insert into member (name) values (?)
Hibernate: select associatio0_.association_id as associat1_0_0_, associatio0_.name as name2_0_0_ from association associatio0_ where associatio0_.association_id=?
Hibernate: select associatio0_.association_id as associat1_0_0_, associatio0_.name as name2_0_0_ from association associatio0_ where associatio0_.association_id=?
Hibernate: select associatio0_.association_id as associat1_0_0_, associatio0_.name as name2_0_0_ from association associatio0_ where associatio0_.association_id=?
Hibernate: insert into association_member (association_id, member_id) values (?, ?)
Hibernate: insert into association_member (association_id, member_id) values (?, ?)
Hibernate: insert into association_member (association_id, member_id) values (?, ?)&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;값 가져오기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Member를 기준으로 Association 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행&lt;/p&gt;
&lt;pre id=&quot;code_1638494055838&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String jpql = &quot;select distinct m from Member m join fetch m.associationMembers am join fetch am.association&quot;;
List&amp;lt;Member&amp;gt; members = em.createQuery(jpql, Member.class)
        .getResultList();
members.forEach(member -&amp;gt; {
    System.out.printf(&quot;&amp;gt; memberName: %s%n&quot;, member.getName());
    member.getAssociationMembers().forEach(am -&amp;gt; {
        System.out.printf(&quot; &amp;gt; associationName: %s%n&quot;, am.getAssociation().getName());
    });
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과&lt;/p&gt;
&lt;pre id=&quot;code_1638494141333&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Hibernate: select distinct member0_.member_id as member_i1_2_0_, associatio1_.association_id as associat1_1_1_, associatio1_.member_id as member_i2_1_1_, associatio2_.association_id as associat1_0_2_, member0_.name as name2_2_0_, associatio1_.member_id as member_i2_1_0__, associatio1_.association_id as associat1_1_0__, associatio2_.name as name2_0_2_ from member member0_ inner join association_member associatio1_ on member0_.member_id=associatio1_.member_id inner join association associatio2_ on associatio1_.association_id=associatio2_.association_id
Hibernate: select member0_.member_id as member_i1_2_0_, member0_.name as name2_2_0_ from member member0_ where member0_.member_id=?
&amp;gt; memberName: member
 &amp;gt; associationName: association1
 &amp;gt; associationName: association2
 &amp;gt; associationName: association3&lt;/code&gt;&lt;/pre&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;size18&quot;&gt;AssociationMember를 기준으로 Member, Association 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행&lt;/p&gt;
&lt;pre id=&quot;code_1638494656355&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String jpql = &quot;select am from AssociationMember am join fetch am.member m join fetch am.association a&quot;;
List&amp;lt;AssociationMember&amp;gt; resultList = em.createQuery(jpql, AssociationMember.class)
        .getResultList();
for (AssociationMember am : resultList) {
    System.out.printf(&quot;%s - %s%n&quot;, am.getMember().getName(), am.getAssociation().getName());
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과&lt;/p&gt;
&lt;pre id=&quot;code_1638494669257&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Hibernate: select associatio0_.association_id as associat1_1_0_, associatio0_.member_id as member_i2_1_0_, member1_.member_id as member_i1_2_1_, associatio2_.association_id as associat1_0_2_, member1_.name as name2_2_1_, associatio2_.name as name2_0_2_ from association_member associatio0_ inner join member member1_ on associatio0_.member_id=member1_.member_id inner join association associatio2_ on associatio0_.association_id=associatio2_.association_id
member - association1
member - association2
member - association3&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Java/JPA</category>
      <category>Composite Key</category>
      <category>IdClass</category>
      <category>Java</category>
      <category>JPA</category>
      <author>hwangyoungjae</author>
      <guid isPermaLink="true">https://hwangyoungjae.tistory.com/148</guid>
      <comments>https://hwangyoungjae.tistory.com/148#entry148comment</comments>
      <pubDate>Fri, 3 Dec 2021 10:25:11 +0900</pubDate>
    </item>
    <item>
      <title>JPA, OneToMany, FetchType, fetch join+distinct</title>
      <link>https://hwangyoungjae.tistory.com/147</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;- Entity의 OneToMany의 FetchType에 대해 어떤식으로 처리되는지 정리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- JPQL을 사용했을때 발생하는 N + 1 문제를 fetch join + distinct로 해결&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 준비&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1.1 DDL &amp;amp; Records&lt;/p&gt;
&lt;pre id=&quot;code_1638434132558&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;create table `member`
(
    member_id bigint auto_increment primary key,
    team_id   bigint       null,
    name      varchar(255) null
);
create table `team`
(
    team_id bigint auto_increment primary key,
    name    varchar(255) null
);&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1638434222856&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# member
member_id,team_id,name
1,1,m1
2,1,m2
3,1,m3
4,2,m4
5,2,m5
6,2,m6
7,3,m7
8,3,m8
9,4,m9
10,5,m10

# team
team_id,name
1,team1
2,team2
3,team3
4,team4
5,team5&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1.2 Entity&lt;/p&gt;
&lt;pre id=&quot;code_1638434284747&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Getter @Setter
@Entity @Table(name = &quot;manyToOne_member&quot;)
public class Member {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = &quot;member_id&quot;)
    private Long id;
    private String name;

    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = &quot;team_id&quot;)
    private Team team;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1638434388923&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Getter @Setter
@Entity @Table(name = &quot;manyToOne_team&quot;)
public class Team {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = &quot;team_id&quot;)
    private Long id;

    private String name;

    @OneToMany(mappedBy = &quot;team&quot;, fetch = ?)
    private List&amp;lt;Member&amp;gt; members = new ArrayList&amp;lt;&amp;gt;();
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1.3 표출하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;Team 객체와 Member객체를 보기좋게 표출하기 위한 method&lt;/p&gt;
&lt;pre id=&quot;code_1638434447188&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public static void print(Team team) {
    String teamName = team.getName();
    List&amp;lt;String&amp;gt; memberNames = team.getMembers()
            .stream()
            .map(Member::getName)
            .collect(Collectors.toList());

    System.out.printf(&quot;&amp;gt;&amp;gt;&amp;gt; %s : &quot;, teamName);
    memberNames.forEach((memberName) -&amp;gt; System.out.printf(&quot;%s,&quot;, memberName));
    System.out.println();
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. EntityManager.find&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2.1 실행코드&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1638436010681&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public static void logic(EntityManager em) {
    Team team = em.find(Team.class, 1L);
    print(team);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2.2 FetchType.EAGER 실행결과(query 1회)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1638436059880&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Hibernate: select team0_.team_id as team_id1_1_0_, team0_.name as name2_1_0_, members1_.team_id as team_id3_0_1_, members1_.member_id as member_i1_0_1_, members1_.member_id as member_i1_0_2_, members1_.name as name2_0_2_, members1_.team_id as team_id3_0_2_ from manyToOne_team team0_ left outer join manyToOne_member members1_ on team0_.team_id=members1_.team_id where team0_.team_id=?
&amp;gt;&amp;gt;&amp;gt; team1 : m1,m2,m3,&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2.3 FetchType.LAZY 실행결과(query 2회)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1638436077502&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Hibernate: select team0_.team_id as team_id1_1_0_, team0_.name as name2_1_0_ from manyToOne_team team0_ where team0_.team_id=?
Hibernate: select members0_.team_id as team_id3_0_0_, members0_.member_id as member_i1_0_0_, members0_.member_id as member_i1_0_1_, members0_.name as name2_0_1_, members0_.team_id as team_id3_0_1_ from manyToOne_member members0_ where members0_.team_id=?
&amp;gt;&amp;gt;&amp;gt; team1 : m1,m2,m3,&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. JPQL&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3.1 Single&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.1.1 실행코드&lt;/p&gt;
&lt;pre id=&quot;code_1638436222432&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String jpql = &quot;select t from Team t where t.id=:id&quot;;
Team team = em.createQuery(jpql, Team.class)
        .setParameter(&quot;id&quot;, 1L)
        .getSingleResult();
print(team);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.1.2 FetchType.EAGER 실행결과(query 2회)&lt;/p&gt;
&lt;pre id=&quot;code_1638436296666&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Hibernate: select team0_.team_id as team_id1_1_, team0_.name as name2_1_ from manyToOne_team team0_ where team0_.team_id=?
Hibernate: select members0_.team_id as team_id3_0_0_, members0_.member_id as member_i1_0_0_, members0_.member_id as member_i1_0_1_, members0_.name as name2_0_1_, members0_.team_id as team_id3_0_1_ from manyToOne_member members0_ where members0_.team_id=?
&amp;gt;&amp;gt;&amp;gt; team1 : m1,m2,m3,&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.1.3 FetchType.LAZY 실행결과(query 2회)&lt;/p&gt;
&lt;pre id=&quot;code_1638436303925&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Hibernate: select team0_.team_id as team_id1_1_, team0_.name as name2_1_ from manyToOne_team team0_ where team0_.team_id=?
Hibernate: select members0_.team_id as team_id3_0_0_, members0_.member_id as member_i1_0_0_, members0_.member_id as member_i1_0_1_, members0_.name as name2_0_1_, members0_.team_id as team_id3_0_1_ from manyToOne_member members0_ where members0_.team_id=?
&amp;gt;&amp;gt;&amp;gt; team1 : m1,m2,m3,&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3.2 Multiple&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.2.1 실행코드&lt;/p&gt;
&lt;pre id=&quot;code_1638436351738&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String jpql = &quot;select t from Team t&quot;;
List&amp;lt;Team&amp;gt; teams = em.createQuery(jpql, Team.class)
        .getResultList();
for (Team team : teams) {
    print(team);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.2.2 FetchType.EAGER 실행결과(query 6회)&lt;/p&gt;
&lt;pre id=&quot;code_1638436383449&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Hibernate: select team0_.team_id as team_id1_1_, team0_.name as name2_1_ from manyToOne_team team0_
Hibernate: select members0_.team_id as team_id3_0_0_, members0_.member_id as member_i1_0_0_, members0_.member_id as member_i1_0_1_, members0_.name as name2_0_1_, members0_.team_id as team_id3_0_1_ from manyToOne_member members0_ where members0_.team_id=?
Hibernate: select members0_.team_id as team_id3_0_0_, members0_.member_id as member_i1_0_0_, members0_.member_id as member_i1_0_1_, members0_.name as name2_0_1_, members0_.team_id as team_id3_0_1_ from manyToOne_member members0_ where members0_.team_id=?
Hibernate: select members0_.team_id as team_id3_0_0_, members0_.member_id as member_i1_0_0_, members0_.member_id as member_i1_0_1_, members0_.name as name2_0_1_, members0_.team_id as team_id3_0_1_ from manyToOne_member members0_ where members0_.team_id=?
Hibernate: select members0_.team_id as team_id3_0_0_, members0_.member_id as member_i1_0_0_, members0_.member_id as member_i1_0_1_, members0_.name as name2_0_1_, members0_.team_id as team_id3_0_1_ from manyToOne_member members0_ where members0_.team_id=?
Hibernate: select members0_.team_id as team_id3_0_0_, members0_.member_id as member_i1_0_0_, members0_.member_id as member_i1_0_1_, members0_.name as name2_0_1_, members0_.team_id as team_id3_0_1_ from manyToOne_member members0_ where members0_.team_id=?
&amp;gt;&amp;gt;&amp;gt; team1 : m1,m2,m3,
&amp;gt;&amp;gt;&amp;gt; team2 : m4,m5,m6,
&amp;gt;&amp;gt;&amp;gt; team3 : m7,m8,
&amp;gt;&amp;gt;&amp;gt; team4 : m9,
&amp;gt;&amp;gt;&amp;gt; team5 : m10,&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.2.3 FetchType.LAZY 실행결과(query 6회)&lt;/p&gt;
&lt;pre id=&quot;code_1638436392432&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Hibernate: select team0_.team_id as team_id1_1_, team0_.name as name2_1_ from manyToOne_team team0_
Hibernate: select members0_.team_id as team_id3_0_0_, members0_.member_id as member_i1_0_0_, members0_.member_id as member_i1_0_1_, members0_.name as name2_0_1_, members0_.team_id as team_id3_0_1_ from manyToOne_member members0_ where members0_.team_id=?
&amp;gt;&amp;gt;&amp;gt; team1 : m1,m2,m3,
Hibernate: select members0_.team_id as team_id3_0_0_, members0_.member_id as member_i1_0_0_, members0_.member_id as member_i1_0_1_, members0_.name as name2_0_1_, members0_.team_id as team_id3_0_1_ from manyToOne_member members0_ where members0_.team_id=?
&amp;gt;&amp;gt;&amp;gt; team2 : m4,m5,m6,
Hibernate: select members0_.team_id as team_id3_0_0_, members0_.member_id as member_i1_0_0_, members0_.member_id as member_i1_0_1_, members0_.name as name2_0_1_, members0_.team_id as team_id3_0_1_ from manyToOne_member members0_ where members0_.team_id=?
&amp;gt;&amp;gt;&amp;gt; team3 : m7,m8,
Hibernate: select members0_.team_id as team_id3_0_0_, members0_.member_id as member_i1_0_0_, members0_.member_id as member_i1_0_1_, members0_.name as name2_0_1_, members0_.team_id as team_id3_0_1_ from manyToOne_member members0_ where members0_.team_id=?
&amp;gt;&amp;gt;&amp;gt; team4 : m9,
Hibernate: select members0_.team_id as team_id3_0_0_, members0_.member_id as member_i1_0_0_, members0_.member_id as member_i1_0_1_, members0_.name as name2_0_1_, members0_.team_id as team_id3_0_1_ from manyToOne_member members0_ where members0_.team_id=?
&amp;gt;&amp;gt;&amp;gt; team5 : m10,&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. JPQL(distinct, fetch join)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;4.1 Single(FetchType.LAZY)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;4.1.1 실행코드&lt;/p&gt;
&lt;pre id=&quot;code_1638436433092&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String jpql = &quot;select distinct t from Team t join fetch t.members where t.id=:id&quot;;
List&amp;lt;Team&amp;gt; teams = em.createQuery(jpql, Team.class)
        .setParameter(&quot;id&quot;, 1L)
        .getResultList();
for (Team team : teams) {
    print(team);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;4.1.2 실행결과(query 1회)&lt;/p&gt;
&lt;pre id=&quot;code_1638436464680&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Hibernate: select distinct team0_.team_id as team_id1_1_0_, members1_.member_id as member_i1_0_1_, team0_.name as name2_1_0_, members1_.name as name2_0_1_, members1_.team_id as team_id3_0_1_, members1_.team_id as team_id3_0_0__, members1_.member_id as member_i1_0_0__ from manyToOne_team team0_ inner join manyToOne_member members1_ on team0_.team_id=members1_.team_id where team0_.team_id=?
&amp;gt;&amp;gt;&amp;gt; team1 : m1,m2,m3,&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;4.2 Multiple(FetchType.LAZY)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;4.2.1 실행코드&lt;/p&gt;
&lt;pre id=&quot;code_1638436444381&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String jpql = &quot;select distinct t from Team t join fetch t.members&quot;;
List&amp;lt;Team&amp;gt; teams = em.createQuery(jpql, Team.class)
        .getResultList();
for (Team team : teams) {
    print(team);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;4.2.2 실행결과(query 1회)&lt;/p&gt;
&lt;pre id=&quot;code_1638436478402&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Hibernate: select distinct team0_.team_id as team_id1_1_0_, members1_.member_id as member_i1_0_1_, team0_.name as name2_1_0_, members1_.name as name2_0_1_, members1_.team_id as team_id3_0_1_, members1_.team_id as team_id3_0_0__, members1_.member_id as member_i1_0_0__ from manyToOne_team team0_ inner join manyToOne_member members1_ on team0_.team_id=members1_.team_id
&amp;gt;&amp;gt;&amp;gt; team1 : m1,m2,m3,
&amp;gt;&amp;gt;&amp;gt; team2 : m4,m5,m6,
&amp;gt;&amp;gt;&amp;gt; team3 : m7,m8,
&amp;gt;&amp;gt;&amp;gt; team4 : m9,
&amp;gt;&amp;gt;&amp;gt; team5 : m10,&lt;/code&gt;&lt;/pre&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;</description>
      <category>Java</category>
      <category>DISTINCT</category>
      <category>fetch join</category>
      <category>FetchType</category>
      <category>Java</category>
      <category>JPA</category>
      <category>onetomany</category>
      <author>hwangyoungjae</author>
      <guid isPermaLink="true">https://hwangyoungjae.tistory.com/147</guid>
      <comments>https://hwangyoungjae.tistory.com/147#entry147comment</comments>
      <pubDate>Thu, 2 Dec 2021 18:16:07 +0900</pubDate>
    </item>
    <item>
      <title>JPA, ManyToOne, FetchType, fetch join</title>
      <link>https://hwangyoungjae.tistory.com/146</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;- Entity의 ManyToOne의 FetchType에 대해 어떤식으로 처리되는지 정리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- JPQL을 사용했을때 발생하는 N + 1 문제를 fetch join으로 해결&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 준비&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1.1 DDL &amp;amp; Records&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;create table `member`
(
    member_id bigint auto_increment primary key,
    team_id   bigint       null,
    name      varchar(255) null
);
create table `team`
(
    team_id bigint auto_increment primary key,
    name    varchar(255) null
);&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# member
member_id,team_id,name
1,&amp;lt;null&amp;gt;,m1
2,1,m2
3,2,m3
4,2,m4
5,3,m5
6,3,m6
7,4,m7
8,4,m8
9,5,m9
10,5,m10&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# team
team_id,name
1,team1
2,team2
3,team3
4,team4
5,team5&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1.2 Entity&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@Getter @Setter
@Entity @Table(name = &quot;member&quot;)
public class Member {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = &quot;member_id&quot;)
    private Long id;
    private String name;

    @ManyToOne(fetch = ?, cascade = CascadeType.ALL)
    @JoinColumn(name = &quot;team_id&quot;)
    private Team team;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@Getter @Setter
@Entity @Table(name = &quot;team&quot;)
public class Team {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = &quot;team_id&quot;)
    private Long id;
    private String name;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1.3 표출하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;Member 객체와 Team을 보기좋게 표출하기 위한 print method&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;public static void print(Member member) {
  String memberName = member.getName();
  String teamName = null;
  if (member.getTeam() != null) {
    teamName = member.getTeam().getName();
  }
  System.out.printf(&quot;&amp;gt;&amp;gt;&amp;gt; %s-%s%n&quot;, memberName, teamName);
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. EntityManager.find&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2.1 실행코드&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;public static void logic(EntityManager em) {
  Member member = em.find(Member.class, 2L);
  print(member);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2.2 FetchType.EAGER 실행결과(query 1회)&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;Hibernate: select member0_.member_id as member_i1_0_0_, member0_.name as name2_0_0_, member0_.team_id as team_id3_0_0_, team1_.team_id as team_id1_1_1_, team1_.name as name2_1_1_ from member member0_ left outer join team team1_ on member0_.team_id=team1_.team_id where member0_.member_id=?
&amp;gt;&amp;gt;&amp;gt; m2-team1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2.3 FetchType.LAZY 실행결과(query 2회)&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;Hibernate: select member0_.member_id as member_i1_0_0_, member0_.name as name2_0_0_, member0_.team_id as team_id3_0_0_ from member member0_ where member0_.member_id=?
Hibernate: select team0_.team_id as team_id1_1_0_, team0_.name as name2_1_0_ from team team0_ where team0_.team_id=?
&amp;gt;&amp;gt;&amp;gt; m2-team1&lt;/code&gt;&lt;/pre&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. JPQL&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3.1 Single&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3.1.1 실행코드&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;String jpql = &quot;select m from Member m join fetch m.team where m.id=:id&quot;;
Member member = em.createQuery(jpql, Member.class)
  .setParameter(&quot;id&quot;, 2L).getSingleResult();
print(member);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3.1.2 FetchType.EAGER(query 2회)&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;Hibernate: select member0_.member_id as member_i1_0_, member0_.name as name2_0_, member0_.team_id as team_id3_0_ from member member0_ where member0_.member_id=?
Hibernate: select team0_.team_id as team_id1_1_0_, team0_.name as name2_1_0_ from team team0_ where team0_.team_id=?
&amp;gt;&amp;gt;&amp;gt; m2-team1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3.1.3 FetchType.LAZY(query 2회)&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;Hibernate: select member0_.member_id as member_i1_0_, member0_.name as name2_0_, member0_.team_id as team_id3_0_ from member member0_ where member0_.member_id=?
Hibernate: select team0_.team_id as team_id1_1_0_, team0_.name as name2_1_0_ from team team0_ where team0_.team_id=?
&amp;gt;&amp;gt;&amp;gt; m2-team1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3.2 Multiple&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3.2.1 실행코드&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;String jpql = &quot;select m from Member m&quot;;
List&amp;lt;Member&amp;gt; resultList = em.createQuery(jpql, Member.class)
  .getResultList();
for (Member member : resultList) {
  print(member);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3.2.2 FetchType.EAGER(query 6회)&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;Hibernate: select member0_.member_id as member_i1_0_, member0_.name as name2_0_, member0_.team_id as team_id3_0_ from member member0_
Hibernate: select team0_.team_id as team_id1_1_0_, team0_.name as name2_1_0_ from team team0_ where team0_.team_id=?
Hibernate: select team0_.team_id as team_id1_1_0_, team0_.name as name2_1_0_ from team team0_ where team0_.team_id=?
Hibernate: select team0_.team_id as team_id1_1_0_, team0_.name as name2_1_0_ from team team0_ where team0_.team_id=?
Hibernate: select team0_.team_id as team_id1_1_0_, team0_.name as name2_1_0_ from team team0_ where team0_.team_id=?
Hibernate: select team0_.team_id as team_id1_1_0_, team0_.name as name2_1_0_ from team team0_ where team0_.team_id=?
&amp;gt;&amp;gt;&amp;gt; m1-null
&amp;gt;&amp;gt;&amp;gt; m2-team1
&amp;gt;&amp;gt;&amp;gt; m3-team2
&amp;gt;&amp;gt;&amp;gt; m4-team2
&amp;gt;&amp;gt;&amp;gt; m5-team3
&amp;gt;&amp;gt;&amp;gt; m6-team3
&amp;gt;&amp;gt;&amp;gt; m7-team4
&amp;gt;&amp;gt;&amp;gt; m8-team4
&amp;gt;&amp;gt;&amp;gt; m9-team5
&amp;gt;&amp;gt;&amp;gt; m10-team5&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3.2.3 FetchType.LAZY(query 6회)&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;Hibernate: select member0_.member_id as member_i1_0_, member0_.name as name2_0_, member0_.team_id as team_id3_0_ from manyToOne_member member0_
&amp;gt;&amp;gt;&amp;gt; m1-null
Hibernate: select team0_.team_id as team_id1_1_0_, team0_.name as name2_1_0_ from manyToOne_team team0_ where team0_.team_id=?
&amp;gt;&amp;gt;&amp;gt; m2-team1
Hibernate: select team0_.team_id as team_id1_1_0_, team0_.name as name2_1_0_ from manyToOne_team team0_ where team0_.team_id=?
&amp;gt;&amp;gt;&amp;gt; m3-team2
&amp;gt;&amp;gt;&amp;gt; m4-team2
Hibernate: select team0_.team_id as team_id1_1_0_, team0_.name as name2_1_0_ from manyToOne_team team0_ where team0_.team_id=?
&amp;gt;&amp;gt;&amp;gt; m5-team3
&amp;gt;&amp;gt;&amp;gt; m6-team3
Hibernate: select team0_.team_id as team_id1_1_0_, team0_.name as name2_1_0_ from manyToOne_team team0_ where team0_.team_id=?
&amp;gt;&amp;gt;&amp;gt; m7-team4
&amp;gt;&amp;gt;&amp;gt; m8-team4
Hibernate: select team0_.team_id as team_id1_1_0_, team0_.name as name2_1_0_ from manyToOne_team team0_ where team0_.team_id=?
&amp;gt;&amp;gt;&amp;gt; m9-team5
&amp;gt;&amp;gt;&amp;gt; m10-team5&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. JPQL(fetch join)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;fetch join을 통한 N + 1 해결&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;4.1 Single(FetchType.LAZY)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4.1.1 실행코드&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;String jpql = &quot;select m from Member m left join fetch m.team where m.id=:id&quot;;
Member member = em.createQuery(jpql, Member.class)
  .setParameter(&quot;id&quot;, 2L).getSingleResult();
print(member);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4.1.2 실행결과(query 1회)&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;Hibernate: select member0_.member_id as member_i1_0_0_, team1_.team_id as team_id1_1_1_, member0_.name as name2_0_0_, member0_.team_id as team_id3_0_0_, team1_.name as name2_1_1_ from member member0_ inner join team team1_ on member0_.team_id=team1_.team_id where member0_.member_id=?
&amp;gt;&amp;gt;&amp;gt; m2-team1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;4.2 Multiple(FetchType.LAZY)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4.2.1 실행코드&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;String jpql = &quot;select m from Member m left join fetch m.team&quot;;
List&amp;lt;Member&amp;gt; resultList = em.createQuery(jpql, Member.class)
  .getResultList();
for (Member member : resultList) {
  print(member);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4.2.2 실행결과(query 1회)&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;Hibernate: select member0_.member_id as member_i1_0_0_, team1_.team_id as team_id1_1_1_, member0_.name as name2_0_0_, member0_.team_id as team_id3_0_0_, team1_.name as name2_1_1_ from manyToOne_member member0_ left outer join manyToOne_team team1_ on member0_.team_id=team1_.team_id
&amp;gt;&amp;gt;&amp;gt; m2-team1
&amp;gt;&amp;gt;&amp;gt; m3-team2
&amp;gt;&amp;gt;&amp;gt; m4-team2
&amp;gt;&amp;gt;&amp;gt; m5-team3
&amp;gt;&amp;gt;&amp;gt; m6-team3
&amp;gt;&amp;gt;&amp;gt; m7-team4
&amp;gt;&amp;gt;&amp;gt; m8-team4
&amp;gt;&amp;gt;&amp;gt; m9-team5
&amp;gt;&amp;gt;&amp;gt; m10-team5
&amp;gt;&amp;gt;&amp;gt; m1-null&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Java/JPA</category>
      <category>fetch join</category>
      <category>Java</category>
      <category>jpl</category>
      <category>ManyToOne</category>
      <author>hwangyoungjae</author>
      <guid isPermaLink="true">https://hwangyoungjae.tistory.com/146</guid>
      <comments>https://hwangyoungjae.tistory.com/146#entry146comment</comments>
      <pubDate>Thu, 2 Dec 2021 16:55:27 +0900</pubDate>
    </item>
    <item>
      <title>MySQL, JOIN문</title>
      <link>https://hwangyoungjae.tistory.com/145</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;JOIN문을 사용하고는 있지만 제대로 알고 사용하고 있나 싶어서 다시한번 정리&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;99219C345BE91A7E32.png&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;472&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Aogag/btrmyCKaxyC/J8qFeOs688AqWDKTKQkKY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Aogag/btrmyCKaxyC/J8qFeOs688AqWDKTKQkKY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Aogag/btrmyCKaxyC/J8qFeOs688AqWDKTKQkKY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAogag%2FbtrmyCKaxyC%2FJ8qFeOs688AqWDKTKQkKY1%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;600&quot; height=&quot;472&quot; data-filename=&quot;99219C345BE91A7E32.png&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;472&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* MYSQL에는 FULL JOIN은 없음 union을 통해서 구현 가능함&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Tables&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;member&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 108px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 18px; text-align: center;&quot;&gt;member_id&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 18px; text-align: center;&quot;&gt;member_name&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 18px; text-align: center;&quot;&gt;team_id&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 18px; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 18px; text-align: center;&quot;&gt;m1&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 18px; text-align: center;&quot;&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 18px; text-align: center;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 18px; text-align: center;&quot;&gt;m2&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 18px; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 18px; text-align: center;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 18px; text-align: center;&quot;&gt;m3&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 18px; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 18px; text-align: center;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 18px; text-align: center;&quot;&gt;m4&lt;/td&gt;
&lt;td style=&quot;width: 33.333333333333336%; height: 18px; text-align: center;&quot;&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;team&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 72px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 18px;&quot;&gt;team_id&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 18px;&quot;&gt;team_name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 18px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 18px;&quot;&gt;team1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 18px;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 18px;&quot;&gt;team2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 18px;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center; height: 18px;&quot;&gt;team3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;SELECT JOIN&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;INNERT JOIN (JOIN)&lt;/h4&gt;
&lt;pre id=&quot;code_1638241659245&quot; class=&quot;sql&quot; style=&quot;display: block; overflow: auto; padding: 20px; color: #383a42; background-color: #f8f8f8; font-size: 14px; font-family: 'SF Mono', Menlo, Consolas, Monaco, monospace; border: 1px solid #ebebeb; line-height: 1.71; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM `member` m
INNER JOIN `team` t ON t.team_id = m.team_id;&lt;/code&gt;&lt;/pre&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;member_id&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;member_name&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team_id&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team_id&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team_name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;m2&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;m3&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;m4&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;LEFT OUTER JOIN (LEFT JOIN)&lt;/h4&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;SELECT * FROM `member` m
LEFT OUTER JOIN `team` t ON t.team_id = m.team_id;&lt;/code&gt;&lt;/pre&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 54px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; text-align: center; height: 18px;&quot;&gt;member_id&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center; height: 18px;&quot;&gt;member_name&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center; height: 18px;&quot;&gt;team_id&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center; height: 18px;&quot;&gt;team_id&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center; height: 18px;&quot;&gt;team_name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; text-align: center; height: 18px;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center; height: 18px;&quot;&gt;m2&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center; height: 18px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center; height: 18px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center; height: 18px;&quot;&gt;team1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20%; text-align: center; height: 18px;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center; height: 18px;&quot;&gt;m3&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center; height: 18px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center; height: 18px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center; height: 18px;&quot;&gt;team1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;m4&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;m1&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;&amp;lt;null&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;&amp;lt;null&amp;gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;LEFT OUTER JOIN (LEFT JOIN) B IS NULL&lt;/h4&gt;
&lt;pre id=&quot;code_1638242663002&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM `member` m
LEFT OUTER JOIN `team` t ON t.team_id = m.team_id
WHERE t.team_id IS NULL;&lt;/code&gt;&lt;/pre&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;member_id&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;member_name&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team_id&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team_id&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team_name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;m1&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;&amp;lt;null&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;&amp;lt;null&amp;gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;RIGHT OUTER JOIN (RIGHT JOIN)&lt;/h4&gt;
&lt;pre id=&quot;code_1638242839280&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM `member` m
RIGHT OUTER JOIN `team` t ON t.team_id = m.team_id;&lt;/code&gt;&lt;/pre&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;member_id&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;member_name&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team_id&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team_id&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team_name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;m2&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;m3&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;m4&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;&amp;lt;null&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;&amp;lt;null&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;&amp;lt;null&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;RIGHT OUTER JOIN (RIGHT JOIN) A IS NULL&lt;/h4&gt;
&lt;pre id=&quot;code_1638243202004&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM `member` m
RIGHT OUTER JOIN `team` t ON t.team_id = m.team_id
WHERE m.team_id IS NULL;&lt;/code&gt;&lt;/pre&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;member_id&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;member_name&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team_id&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team_id&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team_name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;&amp;lt;null&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;&amp;lt;null&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;&amp;lt;null&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;FULL JOIN -- mysql에는 full join이 없으므로 union으로 구현&lt;/h4&gt;
&lt;pre id=&quot;code_1638243637115&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM `member` m
LEFT OUTER JOIN `team` t ON t.team_id = m.team_id
UNION
SELECT * FROM `member` m
RIGHT OUTER JOIN `team` t ON t.team_id = m.team_id;&lt;/code&gt;&lt;/pre&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;member_id&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;member_name&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team_id&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team_id&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team_name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;m2&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;m3&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;m4&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;m1&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;&amp;lt;null&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;&amp;lt;null&amp;gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;&amp;lt;null&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;&amp;lt;null&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;&amp;lt;null&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;FULL JOIN A IS NULL, B IS NULL -- mysql에는 full join이 없으므로 union으로 구현&lt;/h4&gt;
&lt;pre id=&quot;code_1638243644738&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM `member` m
LEFT OUTER JOIN `team` t ON t.team_id = m.team_id
WHERE t.team_id IS NULL
UNION
SELECT * FROM `member` m
RIGHT OUTER JOIN `team` t ON t.team_id = m.team_id
where m.member_id IS NULL;&lt;/code&gt;&lt;/pre&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;member_id&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;member_name&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team_id&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team_id&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team_name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;m1&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;&amp;lt;null&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;&amp;lt;null&amp;gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;&amp;lt;null&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;&amp;lt;null&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;&amp;lt;null&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 20%; text-align: center;&quot;&gt;team3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;a href=&quot;https://yoo-hyeok.tistory.com/98&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://yoo-hyeok.tistory.com/98&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>MySQL</category>
      <author>hwangyoungjae</author>
      <guid isPermaLink="true">https://hwangyoungjae.tistory.com/145</guid>
      <comments>https://hwangyoungjae.tistory.com/145#entry145comment</comments>
      <pubDate>Tue, 30 Nov 2021 12:46:27 +0900</pubDate>
    </item>
    <item>
      <title>개발을 잘하는 사람의 특징 다섯가지(feat, OJ Tube)</title>
      <link>https://hwangyoungjae.tistory.com/144</link>
      <description>&lt;div data-pm-slice=&quot;1 1 []&quot; data-en-clipboard=&quot;true&quot;&gt;유튜브에서 좋은 개발자라는 주제로 영상을 하나 시청하였는데,&lt;/div&gt;
&lt;div&gt;공감가는 부분이 있어 기록을 위해 글을 하나 남기기로 하였다.&lt;/div&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=TG9bpvGi2BE&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/pH8YW/hyMlqSIH1g/phlEqxgJBF8QNXu2e9b831/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=536_164_762_410&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/TG9bpvGi2BE&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;div data-pm-slice=&quot;1 1 []&quot; data-en-clipboard=&quot;true&quot;&gt;종종 개발주제로 시청하던 OJ tube에 오지완이란 분인데,&lt;/div&gt;
&lt;div&gt;어떤 개발자가 좋은 개발자라고 생각하시는지, 될놈될은 좋은 습관과 좋은 태도를 몸에 이미 익혔기 때문에라는 말과 함께 타고난것이 아닌 노력으로 충분히 이룰수 있는 부분이라는 이야기도 해주었다.&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;내가 관심을 가지고 봤던 부분은 개발을 잘하는 사람의 특징 다섯가지이다.&lt;/div&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;세번째,자기개발에 욕심이 있다. 계속 발전하려는 의지가 있다.&lt;/li&gt;
&lt;li&gt;네번째, 성실하거나 똑똑하거나 성실한데 똑똑하거나&lt;/li&gt;
&lt;li&gt;다섯번째, 어떤 지식을 습득했을때 조립을 잘한다. 개발자에게 필요한 능력, 새로운 지식을 습득했을때 끝이 아니라 그 지식을 다른 지식과 조합하여 활용할수 있는 능력&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;위 다섯가지는 영상 초반부에 나오는 내용이고 후반부에는 본인의 경험담을 비추어 사례를 말씀해주시니 혹시 이 글을 읽고 계신분이라면 영상을 시청해보시는것도 좋을것이란 생각이 든다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;</description>
      <category>일상다반사</category>
      <author>hwangyoungjae</author>
      <guid isPermaLink="true">https://hwangyoungjae.tistory.com/144</guid>
      <comments>https://hwangyoungjae.tistory.com/144#entry144comment</comments>
      <pubDate>Tue, 16 Nov 2021 06:52:03 +0900</pubDate>
    </item>
    <item>
      <title>MySQL, foreign key update,delete rule</title>
      <link>https://hwangyoungjae.tistory.com/143</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Update rule&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;cascade&lt;/b&gt;:&amp;nbsp;참조되는 테이블에서 데이터를 수정하면, 참조하는 테이블의 데이터도 함께 수정됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;set default&lt;/b&gt;: 참조되는 테이블에서 데이터를 수정하면, 참조하는 테이블의 데이터가 해당 필드의 default값으로 수정됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;set null&lt;/b&gt;: 참조되는 테이블에서 데이터를 수정하면, 참조하는 테이블의 데이터가 null로 수정됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;restrict&lt;/b&gt;: 참조하는 테이블에 데이터가 남아 있으면, 참조되는 테이블의 데이터를 수정할 수 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;noaction&lt;/b&gt;: restrict와 동일&amp;nbsp;&amp;lt;- default&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Delete rule&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;cascade&lt;/b&gt;: 참조되는 테이블에서 데이터를 삭제하면, 참조하는 테이블의 데이터도 함께 삭제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;set default&lt;/b&gt;: 참조되는 테이블에서 데이터를 삭제하면, 참조하는 테이블의 데이터가 해당 필드의 default값으로 수정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;set null&lt;/b&gt;: 참조되는 테이블에서 데이터를 삭제하면, 참조하는 테이블의 데이터가 null로 수정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;restrict&lt;/b&gt;: 참조하는 테이블에 데이터가 남아 있으면, 참조되는 테이블의 데이터를 삭제할 수 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;noaction&lt;/b&gt;: restrict와 동일 &amp;lt;- default&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;a href=&quot;http://tcpschool.com/mysql/mysql_constraint_foreignKey&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;http://tcpschool.com/mysql/mysql_constraint_foreignKey&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>MySQL</category>
      <author>hwangyoungjae</author>
      <guid isPermaLink="true">https://hwangyoungjae.tistory.com/143</guid>
      <comments>https://hwangyoungjae.tistory.com/143#entry143comment</comments>
      <pubDate>Fri, 29 Oct 2021 13:55:37 +0900</pubDate>
    </item>
    <item>
      <title>JPA, DynamicUpdate, DynamicInsert</title>
      <link>https://hwangyoungjae.tistory.com/142</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;org.hibernate.annotations.DynamicUpdate&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수정된 데이터만 사용해서 동적으로 UPDATE문을 생성한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1635419055346&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import org.hibernate.annotations.DynamicUpdate;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@DynamicUpdate
@Table(name = &quot;MEMBER&quot;)
public class Member {
    @Id
    @Column(name = &quot;ID&quot;)
    private String id;

    @Column(name = &quot;NAME&quot;)
    private String name;

    @Column(name = &quot;AGE&quot;)
    private Integer age;
    
    ...
}&lt;/code&gt;&lt;/pre&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;@DynamicUpdate를 사용했을때와 사용하지 않았을때&lt;/p&gt;
&lt;pre id=&quot;code_1635419288439&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package jpabook.start;

import javax.persistence.*;
import java.util.List;

public class JpaMain {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory(&quot;jpabook&quot;);
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();

        try {
            tx.begin();
            logic(em);
            tx.commit();
        } catch (Exception e) {
            e.printStackTrace();
            tx.rollback();
        } finally {
            em.close();
        }
        emf.close();
    }

    private static void logic(EntityManager em) {
        Member member = em.find(Member.class, &quot;id1&quot;);
        member.setAge(25);
        em.persist(member);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@DynamicUpdate 미사용(기본)&lt;/p&gt;
&lt;pre id=&quot;code_1635419350628&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;UPDATE `MEMBER` SET `AGE`=?, `NAME`=? WHERE `ID`=?;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@DynamicUpdate 사용&lt;/p&gt;
&lt;pre id=&quot;code_1635419388974&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;UPDATE `MEMBER` SET `AGE`=? WHERE `ID`=?;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;org.hibernate.annotations.DynamicInsert&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터가 존재하는(null이 아닌) 필드만으로 INSERT문을 동적으로 생성한다.&lt;/p&gt;
&lt;pre id=&quot;code_1635420307682&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import org.hibernate.annotations.DynamicInsert;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@DynamicInsert
@Table(name = &quot;MEMBER&quot;)
public class Member {
    @Id
    @Column(name = &quot;ID&quot;)
    private String id;

    @Column(name = &quot;NAME&quot;)
    private String name;

    @Column(name = &quot;AGE&quot;)
    private Integer age;
    
    ...
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 코드를 @DynamicInsert를 사용했을때와 사용하지 않았을때&lt;/p&gt;
&lt;pre id=&quot;code_1635420400800&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package jpabook.start;

import javax.persistence.*;
import java.util.List;

public class JpaMain {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory(&quot;jpabook&quot;);
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();

        try {
            tx.begin();
            logic(em);
            tx.commit();
        } catch (Exception e) {
            e.printStackTrace();
            tx.rollback();
        } finally {
            em.close();
        }
        emf.close();
    }

    private static void logic(EntityManager em) {
        Member member = new Member(&quot;id9&quot;);
        member.setName(&quot;황영재&quot;);
        member.setAge(null);
        em.persist(member);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@DynamicInsert 미사용(기본)&lt;/p&gt;
&lt;pre id=&quot;code_1635420350068&quot; class=&quot;sql&quot; style=&quot;margin: 20px auto 0px; display: block; overflow: auto; padding: 20px; color: #383a42; background: #f8f8f8; font-size: 14px; font-family: 'SF Mono', Menlo, Consolas, Monaco, monospace; border: 1px solid #ebebeb; line-height: 1.71; cursor: default; z-index: 1;&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;INSERT INTO MEMBER(ID,NAME,AGE) VALUES(?, ?, ?);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@DynamicInsert 사용&lt;/p&gt;
&lt;pre id=&quot;code_1635420350068&quot; class=&quot;sql&quot; style=&quot;margin: 20px auto 0px; display: block; overflow: auto; padding: 20px; color: #383a42; background: #f8f8f8; font-size: 14px; font-family: 'SF Mono', Menlo, Consolas, Monaco, monospace; border: 1px solid #ebebeb; line-height: 1.71; cursor: default; z-index: 1;&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;INSERT INTO MEMBER(ID,NAME) VALUES(?, ?);&lt;/code&gt;&lt;/pre&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;상황에 따라 다르지만 컬럼이 대략 30개 이상이 되면 기본 방법인 정적 수정 쿼리보다 @DynamicUpdate를 사용한 동적 수정 쿼리가 빠르다고 한다. 한 테이블에 컬럼이 30개 이상 된다는 것은 테이블 설계상 책임이 적절히 분리되지 않았을 가능성이 높다.&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;size14&quot;&gt;자바 ORM 표준 JPA 프로그래밍 저:김영한, 3장 영속성 관리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java/JPA</category>
      <author>hwangyoungjae</author>
      <guid isPermaLink="true">https://hwangyoungjae.tistory.com/142</guid>
      <comments>https://hwangyoungjae.tistory.com/142#entry142comment</comments>
      <pubDate>Thu, 28 Oct 2021 20:37:42 +0900</pubDate>
    </item>
    <item>
      <title>Spring, Dependency Injection 종류 생성자주입, 수정자주입, 필드주입</title>
      <link>https://hwangyoungjae.tistory.com/141</link>
      <description>&lt;h1&gt;생성자 주입&lt;/h1&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;annotation&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MsgProvider.java&lt;/p&gt;
&lt;pre class=&quot;crystal&quot;&gt;&lt;code&gt;package constructor.annotation;

import org.springframework.stereotype.Component;

@Component(&quot;provider&quot;)
public class MsgProvider {
    private String msg = &quot;Hello World!(Constructor Injection annotation)&quot;;

    public String getMsg() {
        return msg;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MsgRender.java&lt;/p&gt;
&lt;pre class=&quot;crystal&quot;&gt;&lt;code&gt;package constructor.annotation;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service(&quot;render&quot;)
public class MsgRender {
    private MsgProvider msgProvider;

    @Autowired
    public MsgRender(MsgProvider msgProvider) {
        this.msgProvider = msgProvider;
    }

    public void render() {
        System.out.println(msgProvider.getMsg());
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ConstructorConfig.java&lt;/p&gt;
&lt;pre class=&quot;crystal&quot;&gt;&lt;code&gt;package constructor.annotation;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@ComponentScan
@Configuration
public class ConstructorConfig {
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Main.java&lt;/p&gt;
&lt;pre class=&quot;crystal&quot;&gt;&lt;code&gt;package constructor.annotation;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ConstructorConfig.class);
        MsgRender msgRender = ctx.getBean(&quot;render&quot;, MsgRender.class);
        msgRender.render();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;xml&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MsgProvider.java&lt;/p&gt;
&lt;pre class=&quot;delphi&quot;&gt;&lt;code&gt;package constructor.xml;

public class MsgProvider {
    private String msg = &quot;Hello World!(Constructor Injection xml)&quot;;

    public String getMsg() {
        return msg;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MsgRender.java&lt;/p&gt;
&lt;pre class=&quot;delphi&quot;&gt;&lt;code&gt;package constructor.xml;

public class MsgRender {
    private MsgProvider msgProvider;

    public MsgRender(MsgProvider msgProvider) {
        this.msgProvider = msgProvider;
    }

    public void render() {
        System.out.println(msgProvider.getMsg());
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;constructor-config.xml&lt;/p&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;
       xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
       xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd&quot;&amp;gt;
    &amp;lt;bean id=&quot;provider&quot;
          class=&quot;constructor.xml.MsgProvider&quot;&amp;gt;
    &amp;lt;/bean&amp;gt;

    &amp;lt;bean id=&quot;render&quot;
          class=&quot;constructor.xml.MsgRender&quot;&amp;gt;
        &amp;lt;constructor-arg ref=&quot;provider&quot;/&amp;gt;
    &amp;lt;/bean&amp;gt;
&amp;lt;/beans&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Main.java&lt;/p&gt;
&lt;pre class=&quot;java&quot;&gt;&lt;code&gt;package constructor.xml;

import org.springframework.context.support.GenericXmlApplicationContext;

public class Main {
    public static void main(String[] args) {
        GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(&quot;classpath:constructor-config.xml&quot;);
        MsgRender msgRender = ctx.getBean(&quot;render&quot;, MsgRender.class);
        msgRender.render();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;수정자 주입&lt;/h1&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;annotation&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MsgProvider.java&lt;/p&gt;
&lt;pre class=&quot;crystal&quot;&gt;&lt;code&gt;package setter.annotation;

import org.springframework.stereotype.Component;

@Component(&quot;provider&quot;)
public class MsgProvider {
    private String msg = &quot;Hello World!(Setter Injection annotation)&quot;;

    public String getMsg() {
        return msg;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MsgRender.java&lt;/p&gt;
&lt;pre class=&quot;crystal&quot;&gt;&lt;code&gt;package setter.annotation;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service(&quot;render&quot;)
public class MsgRender {
    private MsgProvider msgProvider;

    @Autowired
    public void setMsgProvider(MsgProvider msgProvider) {
        this.msgProvider = msgProvider;
    }

    public void render() {
        System.out.println(msgProvider.getMsg());
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SetterConfig.java&lt;/p&gt;
&lt;pre class=&quot;crystal&quot;&gt;&lt;code&gt;package setter.annotation;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@ComponentScan
@Configuration
public class SetterConfig {
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Main.java&lt;/p&gt;
&lt;pre class=&quot;crystal&quot;&gt;&lt;code&gt;package setter.annotation;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SetterConfig.class);
        MsgRender render = ctx.getBean(&quot;render&quot;, MsgRender.class);
        render.render();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;xml&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MsgProvider.java&lt;/p&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;package setter.xml;

public class MsgProvider {
    private String msg = &quot;Hello World!(Setter Injection xml)&quot;;

    public String getMsg() {
        return msg;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MsgRender.java&lt;/p&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;package setter.xml;

public class MsgRender {
    private MsgProvider msgProvider;

    public void setMsgProvider(MsgProvider msgProvider) {
        this.msgProvider = msgProvider;
    }

    public void render() {
        System.out.println(msgProvider.getMsg());
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;setter-config.xml&lt;/p&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;
       xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
       xmlns:p=&quot;http://www.springframework.org/schema/p&quot;
       xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd&quot;&amp;gt;

    &amp;lt;bean id=&quot;provider&quot;
          class=&quot;setter.xml.MsgProvider&quot;/&amp;gt;


    &amp;lt;bean id=&quot;render&quot;
          class=&quot;setter.xml.MsgRender&quot;
          p:msgProvider-ref=&quot;provider&quot;&amp;gt;
    &amp;lt;/bean&amp;gt;

    &amp;lt;bean id=&quot;render_property&quot;
          class=&quot;setter.xml.MsgRender&quot;&amp;gt;
        &amp;lt;property name=&quot;msgProvider&quot; ref=&quot;provider&quot;/&amp;gt;
    &amp;lt;/bean&amp;gt;

&amp;lt;/beans&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Main.java&lt;/p&gt;
&lt;pre class=&quot;java&quot;&gt;&lt;code&gt;package setter.xml;

import org.springframework.context.support.GenericXmlApplicationContext;

public class Main {
    public static void main(String[] args) {
        GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(&quot;classpath:setter-config.xml&quot;);
        MsgRender msgRender = ctx.getBean(&quot;render&quot;, MsgRender.class);
        msgRender.render();

        MsgRender msgRender2 = ctx.getBean(&quot;render_property&quot;, MsgRender.class);
        msgRender2.render();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;필드 주입&lt;/h1&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;annotation&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MsgProvider.java&lt;/p&gt;
&lt;pre class=&quot;crystal&quot;&gt;&lt;code&gt;package field.annotation;

import org.springframework.stereotype.Component;

@Component(&quot;provider&quot;)
public class MsgProvider {
    private String msg = &quot;Hello World!(Field Injection annotation)&quot;;

    public String getMsg() {
        return msg;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MsgRender.java&lt;/p&gt;
&lt;pre class=&quot;crystal&quot;&gt;&lt;code&gt;package field.annotation;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service(&quot;render&quot;)
public class MsgRender {
    @Autowired
    private MsgProvider msgProvider;

    public void render() {
        System.out.println(msgProvider.getMsg());
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FieldConfig.java&lt;/p&gt;
&lt;pre class=&quot;crystal&quot;&gt;&lt;code&gt;package field.annotation;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@ComponentScan
@Configuration
public class FieldConfig {
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Main.java&lt;/p&gt;
&lt;pre class=&quot;crystal&quot;&gt;&lt;code&gt;package field.annotation;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(FieldConfig.class);
        MsgRender msgRender = ctx.getBean(&quot;render&quot;, MsgRender.class);
        msgRender.render();
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Java/Spring</category>
      <author>hwangyoungjae</author>
      <guid isPermaLink="true">https://hwangyoungjae.tistory.com/141</guid>
      <comments>https://hwangyoungjae.tistory.com/141#entry141comment</comments>
      <pubDate>Wed, 27 Oct 2021 14:16:37 +0900</pubDate>
    </item>
    <item>
      <title>Python,tkinter Checkbutton</title>
      <link>https://hwangyoungjae.tistory.com/140</link>
      <description>&lt;div&gt;&lt;span&gt;&lt;b style=&quot;color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; orphans: 2; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span  style=&quot;font-size: 15pt;&quot;&gt;Python,tkinter Checkbutton&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;hr&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;생성자&lt;span &gt;&amp;nbsp;: tkinter.Checkbutton(master=None, cnf={}, **kw)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;은 체크박스와 같은 옵션의 번호를 표시하며&lt;span &gt;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;사용자는 한번에 여러 옵션을 선택할수 있다&lt;span &gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;div style=&quot;margin: 0cm 0cm 0pt; padding: 0px; font-style: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: rgb(61, 68, 68);&quot;&gt;&lt;span style=&quot;font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: 돋움;&quot;&gt;&lt;span &gt;ex) python_tkinter_004.py&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;-en-codeblock: true; box-sizing: border-box; padding: 8px; font-family: Monaco, Menlo, Consolas, &amp;quot;Courier New&amp;quot;, monospace; font-size: 12px; color: rgb(51, 51, 51); border-top-left-radius: 4px; border-top-right-radius: 4px; border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: rgb(251, 250, 248); border: 1px solid rgba(0, 0, 0, 0.14902); background-position: initial initial; background-repeat: initial initial;&quot;&gt;&lt;div&gt;# -*- encoding:utf8 -*-&lt;/div&gt;&lt;div&gt;# Python version in the development environment 2.7.11&lt;/div&gt;&lt;div&gt;import os&lt;/div&gt;&lt;div&gt;os.chdir(os.path.dirname(__file__))&lt;/div&gt;&lt;div&gt;from Tkinter import *&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;root = Tk()&lt;/div&gt;&lt;div&gt;CheckVar1 = IntVar()&lt;/div&gt;&lt;div&gt;CheckVar2 = IntVar()&lt;/div&gt;&lt;div&gt;c1 = Checkbutton(root, text=&quot;Music&quot;, variable=CheckVar1)&lt;/div&gt;&lt;div&gt;c2 = Checkbutton(root, text=&quot;Video&quot;, variable=CheckVar2)&lt;/div&gt;&lt;div&gt;c1.pack()&lt;/div&gt;&lt;div&gt;c2.pack()&lt;/div&gt;&lt;div&gt;root.mainloop()&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://github.com/hwangyoungjae/study/blob/master/python_tkinter_004.py&quot;&gt;https://github.com/hwangyoungjae/study/blob/master/python_tkinter_004.py&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;margin: 0cm 0cm 0pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;실행화면&lt;/div&gt;&lt;/div&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 132px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/264BE43A5881A80104&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F264BE43A5881A80104&quot; width=&quot;132&quot; height=&quot;88&quot; filename=&quot;python_tkinter_004.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;python_tkinter_004.png&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;font-size: 12pt;&quot;&gt;&amp;gt;&amp;gt; Checkbutton&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;의 상태값&lt;span &gt;&amp;nbsp;&amp;lt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;normal :&amp;nbsp;&lt;/span&gt;보통의 상태&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;disabled :&amp;nbsp;&lt;/span&gt;체크버튼위젯을 사용할수 없는 비활성화 상태&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;active :&amp;nbsp;&lt;/span&gt;체크버튼위젯이 눌려있는 상태&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;font-size: 12pt;&quot;&gt;&amp;gt;&amp;gt; Checkbutton&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;에서 사용되는&amp;nbsp;&lt;span &gt;parameter &amp;lt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;parameter&lt;/span&gt;를 설명하기에 앞서&amp;nbsp;&lt;span &gt;parameter&lt;/span&gt;값에 사용되는 값 또는 단위에 대하여 아래의&lt;span &gt;&amp;nbsp;URL&lt;/span&gt;을 참조하여 보길 바람&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&lt;a href=&quot;http://blog.naver.com/dudwo567890/130167555486&quot; style=&quot;text-decoration: none; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;&lt;font color=&quot;#0000FF&quot;&gt;http://blog.naver.com/dudwo567890/130167555486&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. activebackground&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:'SystemButtonFace'] :&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span  style=&quot;color: rgb(112, 48, 160);&quot;&gt;color&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯이&lt;span &gt;&amp;nbsp;active&lt;/span&gt;상태일때 위젯의 배경색&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. activeforeground&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:'SystemWindowText'] :&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span  style=&quot;color: rgb(112, 48, 160);&quot;&gt;color&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯이&lt;span &gt;&amp;nbsp;active&lt;/span&gt;상태일때 위젯의 문자열색&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. anchor&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:'center']&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯 안의 아이템&lt;span &gt;(&lt;/span&gt;문자열&lt;span &gt;,&lt;/span&gt;이미지&lt;span &gt;)&lt;/span&gt;위치&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;값&lt;span &gt;&amp;nbsp;: 'nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'center'&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. background = bg&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span &gt;[default value:'SystemButtonFace'] :&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span  style=&quot;color: rgb(112, 48, 160);&quot;&gt;color&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯의 배경색&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. bitmap&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:'']&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯에 들어갈 이미지를&lt;span &gt;&amp;nbsp;bitmap&lt;/span&gt;으로 지정한다&lt;span &gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;값&lt;span &gt;&amp;nbsp;: 'error', 'gray75', 'gray50', 'gray25', 'gray12', 'hourglass', 'info', 'questhead', 'question', 'warring'&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. borderwidth = bd&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span &gt;[default value:'2'] :&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span  style=&quot;color: rgb(112, 48, 160);&quot;&gt;mm/pixel&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯의 테두리두께&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. command&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:''] :&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯이&lt;span &gt;&amp;nbsp;active&lt;/span&gt;상태가 될때 발생하는 프로시저를 지정&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;명령어묶기에 대한 자세한 내용은 아래의&lt;span &gt;&amp;nbsp;URL&lt;/span&gt;을 확인하길 바람&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&lt;a href=&quot;http://blog.naver.com/dudwo567890/130167555308&quot; style=&quot;text-decoration: none; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;&lt;font color=&quot;#0000FF&quot;&gt;http://blog.naver.com/dudwo567890/130167555308&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. compound&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:'none']&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯에 문자열과 이미지를 동시에 표시할때 사용&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;값은 문자열에 대한 이미지의 상대위치이다&lt;span &gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;값&lt;span &gt;&amp;nbsp;: 'bottom', 'center', 'left', 'none', 'right', 'top'&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. cursor&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:'']&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯의 마우스커서모양&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;값&lt;span &gt;&amp;nbsp;: &quot;arrow&quot;, &quot;circle&quot;, &quot;clock&quot;, &quot;cross&quot;, &quot;dotbox&quot;, &quot;exchange&quot;, &quot;fleur&quot;, &quot;heart&quot;, &quot;heart&quot;, &quot;man&quot;, &quot;mouse&quot;, &quot;pirate&quot;, &quot;plus&quot;, &quot;shuttle&quot;, &quot;sizing&quot;, &quot;spider&quot;, &quot;spraycan&quot;, &quot;star&quot;, &quot;target&quot;, &quot;tcross&quot;, &quot;trek&quot;, &quot;watch&quot;&amp;nbsp;&lt;/span&gt;등등&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. disabledforeground&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:'SystemDisabledText'] :&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span  style=&quot;color: rgb(112, 48, 160);&quot;&gt;color&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯이&lt;span &gt;&amp;nbsp;disabled&lt;/span&gt;상태일때 위젯의 문자열색&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. font&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:'TkDefaultFont'] :&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span  style=&quot;color: rgb(112, 48, 160);&quot;&gt;font&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯에 표시할 문자열의 글꼴&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;값으로는&lt;span &gt;&amp;nbsp;font&lt;/span&gt;객체가 사용되며&lt;span &gt;,&amp;nbsp;&lt;/span&gt;글꼴객체생성방법은 아래&lt;span &gt;&amp;nbsp;URL&lt;/span&gt;을 참조하길 바란다&lt;span &gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&lt;a href=&quot;http://blog.naver.com/dudwo567890/130167555486&quot; style=&quot;text-decoration: none; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;&lt;font color=&quot;#0000FF&quot;&gt;http://blog.naver.com/dudwo567890/130167555486&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. foreground = fg&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:'SystemWindowText'] :&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span  style=&quot;color: rgb(112, 48, 160);&quot;&gt;color&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯의 문자열색&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. height&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:0] :&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span  style=&quot;color: rgb(112, 48, 160);&quot;&gt;number of characters&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯의 세로크기&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;위젯에&lt;span &gt;&amp;nbsp;image&lt;/span&gt;가 표시될경우&lt;span &gt;, parameter&lt;/span&gt;값의 단위는 문자의 갯수가 아닌&lt;span &gt;&amp;nbsp;pixel&lt;/span&gt;이 된다&lt;span &gt;.(mm/pixel&lt;/span&gt;사용가능&lt;span &gt;)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. highlightbackground&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:'SystemButtonFace'] :&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span  style=&quot;color: rgb(112, 48, 160);&quot;&gt;color&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯이 선택되지 않았을때의 하이라이트색&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. highlightcolor&lt;/span&gt;&lt;/b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;[default value:'SystemWindowFrame'] :&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span  style=&quot;color: rgb(112, 48, 160);&quot;&gt;color&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯이 선택되었을때의 하이라이트색&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. highlightthickness&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:'1'] :&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span  style=&quot;color: rgb(112, 48, 160);&quot;&gt;mm/pixel&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯이 선택되었을때와 선택되지 않았을때를 구분하는 하이라이트의 두께&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. image&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:''] :&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span  style=&quot;color: rgb(112, 48, 160);&quot;&gt;image&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯에 이미지객체를 이용하여 이미지를 표시한다&lt;span &gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;이미지객체 생성방법은 아래&lt;span &gt;&amp;nbsp;URL&lt;/span&gt;을 참조하길 바란다&lt;span &gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&lt;a href=&quot;http://blog.naver.com/dudwo567890/130167555486&quot; style=&quot;text-decoration: none; word-wrap: break-word;&quot; target=&quot;_blank&quot;&gt;&lt;font color=&quot;#0000FF&quot;&gt;http://blog.naver.com/dudwo567890/130167555486&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. indicatoron&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:1] :&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span  style=&quot;color: rgb(112, 48, 160);&quot;&gt;boolean&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯의&lt;span &gt;&amp;nbsp;indicator&lt;/span&gt;형태의 여부&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. justify&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:'center']&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯에 표시된문자가 여러행일경우 문자열의 정렬방법&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;값&amp;nbsp;&lt;span &gt;: 'center', 'left', 'right'&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: rgb(192, 0, 0);&quot;&gt;-. offrelief&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:'raised']&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. offvalue&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:'0'] :&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯의 체크박스가 해제될경우 연결된변수의 값은&lt;span &gt;&amp;nbsp;0&lt;/span&gt;이 된다&lt;span &gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;이&lt;span &gt;&amp;nbsp;parameter&lt;/span&gt;를 이용하면&lt;span &gt;&amp;nbsp;0&lt;/span&gt;대신 들어갈 값을 지정할수 있다&lt;span &gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. onvalue&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:'1'] :&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯의 체크박스가 체크될경우 연결된변수의 값은&lt;span &gt;&amp;nbsp;1&lt;/span&gt;이 된다&lt;span &gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;이&lt;span &gt;&amp;nbsp;parameter&lt;/span&gt;를 이용하면&lt;span &gt;&amp;nbsp;1&lt;/span&gt;대신 들어갈 값을 지정할수 있다&lt;span &gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. overrelief&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:'']&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯위에 마우스를 올렸을때 이&lt;span &gt;&amp;nbsp;parameter&lt;/span&gt;에 지정한 값으로 테두리모양이 변한다&lt;span &gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;값&lt;span &gt;&amp;nbsp;: &quot;flat&quot;, &quot;groove&quot;, &quot;raised&quot;, &quot;ridge&quot;, &quot;solid&quot;, &quot;sunken&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. padx&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:'1'] :&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span  style=&quot;color: rgb(112, 48, 160);&quot;&gt;mm/pixel&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯의 테두리와 내용사이의 가로여백&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. pady&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:'1'] :&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span  style=&quot;color: rgb(112, 48, 160);&quot;&gt;mm/pixel&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯의 테두리와 내용사이의 세로여백&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. relief&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:'flat']&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯의 테두리모양&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;값&lt;span &gt;&amp;nbsp;: &quot;flat&quot;, &quot;groove&quot;, &quot;raised&quot;, &quot;ridge&quot;, &quot;solid&quot;, &quot;sunken&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. selectcolor&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:'SystemWindow'] :&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span  style=&quot;color: rgb(112, 48, 160);&quot;&gt;color&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯의 체크박스의 배경색상&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: rgb(192, 0, 0);&quot;&gt;-. selectimage&lt;/span&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span &gt;[default value:'']&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. state&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:'normal']&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯의 상태값&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;값&lt;span &gt;&amp;nbsp;: 'active', 'disabled', 'normal'&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: rgb(192, 0, 0);&quot;&gt;-. takefocus&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:'']&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. text&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:''] :&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯에 표시할 문자열&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. textvariable&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:''] :&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯에 표시할 문자열을 가져올&lt;span &gt;&amp;nbsp;Tk&lt;/span&gt;변수&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: rgb(192, 0, 0);&quot;&gt;-. tristateimage&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:'']&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: rgb(192, 0, 0);&quot;&gt;-. tristatevalue&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:'']&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. underline&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:-1] :&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯에 표시된 문자열중 특정문자에 밑줄표시하기&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;값은&lt;span &gt;&amp;nbsp;Button&lt;/span&gt;위젯에 표시된 문자열의&lt;span &gt;&amp;nbsp;index&lt;/span&gt;값이며&lt;span &gt;,&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;이&lt;span &gt;&amp;nbsp;index&lt;/span&gt;위치에 밑줄을 표시한다&lt;span &gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;예를들어&lt;span &gt;&amp;nbsp;underline&lt;/span&gt;의 값이&lt;span &gt;&amp;nbsp;0&lt;/span&gt;일경우 표시된문자열의 첫문자에 밑줄을 표시한다&lt;span &gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. variable&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:''] :&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯의 현재상태를 추적하는 제어변수&lt;span &gt;(Tk&lt;/span&gt;변수&lt;span &gt;),&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;일반적으로 제어변수는&lt;span &gt;&amp;nbsp;IntVar&lt;/span&gt;이며&lt;span &gt;,&amp;nbsp;&lt;/span&gt;값이&lt;span &gt;&amp;nbsp;0&lt;/span&gt;일땐 해제&lt;span &gt;, 1&lt;/span&gt;일땐 설정을 의미한다&lt;span &gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;offvalue&lt;/span&gt;와&lt;span &gt;&amp;nbsp;onvalue&lt;/span&gt;를 이용하면&lt;span &gt;&amp;nbsp;value&lt;/span&gt;값을 변경할수 있다&lt;span &gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. width&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:0] :&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span  style=&quot;color: rgb(112, 48, 160);&quot;&gt;number of characters&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯의 가로크기&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;위젯에&lt;span &gt;&amp;nbsp;image&lt;/span&gt;가 표시될경우&lt;span &gt;, parameter&lt;/span&gt;값의 단위는 문자의 갯수가 아닌&lt;span &gt;&amp;nbsp;pixel&lt;/span&gt;이 된다&lt;span &gt;.(mm/pixel&lt;/span&gt;사용가능&lt;span &gt;)&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 9pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;b&gt;&lt;span  style=&quot;color: blue;&quot;&gt;-. wraplength&lt;/span&gt;&lt;/b&gt;&lt;span &gt;&amp;nbsp;[default value:'0'] :&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span  style=&quot;color: rgb(112, 48, 160);&quot;&gt;mm/pixel&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span &gt;Checkbutton&lt;/span&gt;위젯의 문자열을 자동줄내림할 너비&lt;/p&gt;&lt;p style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;값은 텍스트를 표시할 가로크기이며&lt;span &gt;,&lt;/span&gt;&lt;/p&gt;&lt;div style=&quot;margin: 0cm 0cm 0pt 18pt; padding: 0px; color: rgb(61, 68, 68); font-family: 돋움; font-size: 12px; font-style: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);&quot;&gt;이 값에 맞춰서 표시된 문자열을 자동줄내림함&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Python/tkinter</category>
      <category>activebackground</category>
      <category>activeforeground</category>
      <category>Anchor</category>
      <category>Background</category>
      <category>Bitmap</category>
      <category>borderwidth</category>
      <category>checkbutton</category>
      <category>command</category>
      <category>compound</category>
      <category>cursor</category>
      <category>disabledforeground</category>
      <category>font</category>
      <category>foreground</category>
      <category>height</category>
      <category>highlightbackground</category>
      <category>highLightColor</category>
      <category>highlightthickness</category>
      <category>IMAGE</category>
      <category>indicatoron</category>
      <category>Python</category>
      <category>tkinter</category>
      <category>width</category>
      <author>hwangyoungjae</author>
      <guid isPermaLink="true">https://hwangyoungjae.tistory.com/140</guid>
      <comments>https://hwangyoungjae.tistory.com/140#entry140comment</comments>
      <pubDate>Fri, 20 Jan 2017 15:04:04 +0900</pubDate>
    </item>
  </channel>
</rss>