<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>codebag</title>
    <link>https://codebag.tistory.com/</link>
    <description>각종 프로그래밍 정보를 다루는 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Wed, 17 Jun 2026 19:03:00 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>codebag</managingEditor>
    <item>
      <title>쿼리에서 START WITH로 시퀀스 만들기</title>
      <link>https://codebag.tistory.com/796</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;쿼리에서 START WITH로 시퀀스 만들기&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;START WITH 값이 쿼리에서 나오는 시퀀스를 만들려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이런 식으로 노력하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt; CREATE SEQUENCE &quot;Seq&quot; INCREMENT BY 1 START WITH (SELECT MAX(&quot;ID&quot;) FROM &quot;Table&quot;); &lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 ORA-01722 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;START WITH CLAUSE는 정수를 받아들입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;Create sequence&quot; 문을 동적으로 작성한 다음 execute immediate를 사용하여 이를 달성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;declare
    l_new_seq INTEGER;
begin
   select max(id) + 1
   into   l_new_seq
   from   test_table;

    execute immediate 'Create sequence test_seq_2
                       start with ' || l_new_seq ||
                       ' increment by 1';
end;
/
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 링크들을 확인해보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://download.oracle.com/docs/cd/B14117_01/server.101/b10759/statements_6014.htm&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://download.oracle.com/docs/cd/B14117_01/server.101/b10759/statements_6014.htm&lt;/font&gt;&lt;/a&gt;&lt;br&gt; &lt;a href=&quot;http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/executeimmediate_statement.htm&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/executeimmediate_statement.htm&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;잘 작동하는 예제가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;declare
 ex number;
begin
  select MAX(MAX_FK_ID)  + 1 into ex from TABLE;
  If ex &amp;gt; 0 then
    begin
            execute immediate 'DROP SEQUENCE SQ_NAME';
      exception when others then
        null;
    end;
    execute immediate 'CREATE SEQUENCE SQ_NAME INCREMENT BY 1 START WITH ' || ex || ' NOCYCLE CACHE 20 NOORDER';
  end if;
end;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/3461267/create-a-sequence-with-start-with-from-query&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>oracle</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/796</guid>
      <comments>https://codebag.tistory.com/796#entry796comment</comments>
      <pubDate>Sat, 4 Nov 2023 10:40:01 +0900</pubDate>
    </item>
    <item>
      <title>우커머스 체크아웃 ax 콜백</title>
      <link>https://codebag.tistory.com/795</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;우커머스 체크아웃 ax 콜백&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;우커머스 체크아웃에서 (배송변경시) ajax 액션에 대한 javascript 콜백이 있나요?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 콜백은 어떻게 연결하죠?&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;jQuery( document ).on( 'updated_checkout', function() {

    console.log( 'here goes a action' );

} );
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/33172630/woocommerce-checkout-ajax-callback&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>wordpress</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/795</guid>
      <comments>https://codebag.tistory.com/795#entry795comment</comments>
      <pubDate>Sat, 4 Nov 2023 10:39:54 +0900</pubDate>
    </item>
    <item>
      <title>차이에서 &amp;quot;주장&amp;quot;, &amp;quot;기대&amp;quot;, &amp;quot;해야 한다&amp;quot;의 차이는 무엇입니까?</title>
      <link>https://codebag.tistory.com/794</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;차이에서 &quot;주장&quot;, &quot;기대&quot;, &quot;해야 한다&quot;의 차이는 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사이의 차이점은 무엇입니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;assert&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;expect&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;should&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;? 언제 무엇을 사용해야 합니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;assert.equal(3, '3', '== coerces values to strings');
    
var foo = 'bar';
    
expect(foo).to.equal('bar');
    
foo.should.equal('bar');
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;차이점은 &lt;a href=&quot;http://chaijs.com/guide/styles/#differences&quot; rel=&quot;noreferrer&quot;&gt;거기에 기록&lt;/a&gt;되어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;세 인터페이스는 서로 다른 방식으로 주장을 수행합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;궁극적으로 그들은 같은 일을 수행합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일부 사용자는 다른 스타일보다 한 스타일을 선호합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이와 같이 다음과 같은 몇 가지 기술적 고려 사항도 강조할 가치가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;assert&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;expect&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인터페이스가 수정되지 않음&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Object.prototype&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,반면에.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;should&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇다. 그래서 그들은 당신이 변화할 수 없거나 원하지 않는 환경에서 더 나은 선택입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Object.prototype&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;assert&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;expect&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인터페이스는 거의 모든 곳에서 사용자 지정 메시지를 지원합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt; assert.isTrue(foo, &quot;foo should be true&quot;);
 expect(foo, &quot;foo should be true&quot;).to.be.true;
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어설션이 실패하면 실패한 어설션과 함께 &quot;foo would true&quot; 메시지가 출력됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자 지정 메시지를 설정할 수 있는 기회가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;should&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인터페이스.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(역사적 참고: 오랫동안 이 답변은 사용자 지정 메시지를 받기 위해 다음과 같이 언급했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;expect&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 당신은 해결책을 사용해야 할 겁니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/users/294918/aur%c3%a9lien-ribon&quot;&gt;Aurelien Ribon&lt;/a&gt;이 나에게 알려준 것은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;expect&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 번째 매개 변수가 작동합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 해결책이 필요하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떤 버전의 Mocha가 이 메시지를 지원하기 시작했는지, 어떤 버전의 문서가 처음으로 그것을 문서화했는지를 찾을 수 없었습니다.)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참고:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;assert.isTrue(foo)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;expect(foo).to.be.true&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;foo.should.be.true&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자 지정 메시지를 사용하지 않을 경우 all은 다음을 출력합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;foo === 1&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-none prettyprint-override&quot;&gt;&lt;code&gt;    AssertionError: expected 1 to be true
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 그 동안에.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;expect&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;should&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인터페이스는 &lt;em&gt;읽기&lt;/em&gt;에 더 좋으며, 어설션이 실패했을 때 하나의 인터페이스가 다른 인터페이스보다 자연스럽게 더 유익한 것은 아닙니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;세 인터페이스 모두 동일한 이 메시지는 테스트 중이던 것이 정확히 &lt;em&gt;무엇&lt;/em&gt;인지 알려주지 않고, 단지 당신이 얻은 값이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 당신은 원했잖나&lt;/font&gt;&lt;/font&gt;&lt;code&gt;true&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 무엇을 테스트하고 있었는지 알고 싶다면 메시지를 추가해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 간단한 예들이 그들의 차이점을 명확하게 해주기를 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;주장하다&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var assert = require('chai').assert
const foo = 'bar'
const beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };

assert.typeOf(foo, 'string'); // without optional message
assert.typeOf(foo, 'string', 'foo is a string'); // with optional message
assert.equal(foo, 'bar', 'foo equal `bar`');
assert.lengthOf(foo, 3, 'foo`s value has a length of 3');
assert.lengthOf(beverages.tea, 3, 'beverages has 3 types of tea');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 경우 assert 스타일을 사용하면 assert 문의 마지막 매개변수로 선택적 메시지를 포함할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이러한 내용은 주장이 전달되지 않을 경우 오류 메시지에 포함됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;메모&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt; &lt;code&gt;expect&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;should&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 주장을 구성하기 위해 체인 가능한 언어를 사용하지만 처음 주장을 구성하는 방식이 다릅니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;의 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;should&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 또한 약간의 주의사항들과 그 주의사항들을 극복하기 위한 추가적인 도구들이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기대하다&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var expect = require('chai').expect
const foo = 'bar'
const beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };
expect(foo).to.be.a('string');
expect(foo).to.equal('bar');
expect(foo).to.have.lengthOf(3);
expect(beverages).to.have.property('tea').with.lengthOf(3);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;expect&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;발생할 수 있는 실패한 주장에 추가하기 위해 임의 메시지를 포함할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var answer = 43;

// AssertionError: expected 43 to equal 42.
expect(answer).to.equal(42);

// AssertionError: topic [answer]: expected 43 to equal 42.
expect(answer, 'topic [answer]').to.equal(42);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;부울 또는 숫자와 같은 설명이 없는 주제와 함께 사용할 때 유용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;할까&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;should&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;style은 기대 인터페이스와 동일한 체인 가능한 주장을 허용하지만, 체인을 시작하기 위해 should 속성을 가진 각 객체를 확장합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 스타일은 Internet Explorer와 함께 사용할 때 몇 가지 문제가 있으므로 브라우저 호환성에 유의해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var should = require('chai').should() //actually call the function
const foo = 'bar'
const beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };

foo.should.be.a('string');
foo.should.equal('bar');
foo.should.have.lengthOf(3);
beverages.should.have.property('tea').with.lengthOf(3);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기대와 기대 사이의 차이&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;우선, 주목할 것은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;expect&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요구는 단지 에 대한 언급일 뿐입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;expect&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기능은, 반면에.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;should&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;require, 함수가 실행되고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var chai = require('chai')
const expect = chai.expect
const should = chai.should();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;기대&lt;/strong&gt; 인터페이스는 언어 주장을 연결하는 출발점으로서의 기능을 제공합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;node.js 및 모든 브라우저에서 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;should&lt;/strong&gt; 인터페이스는 Object.prototype을 확장하여 언어 주장의 시작점으로 단일 게터를 제공합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;node.js 및 Internet Explorer를 제외한 모든 최신 브라우저에서 작동합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 틀렸다면 고쳐주세요. 하지만 코드 실행 행동에 있어서도 주장과 기대 사이에는 큰 차이가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Assert는 오류 시 프로그램을 중지하도록 되어 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기대는 그렇지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/21396524/what-is-the-difference-between-assert-expect-and-should-in-chai&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>javascript</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/794</guid>
      <comments>https://codebag.tistory.com/794#entry794comment</comments>
      <pubDate>Sat, 4 Nov 2023 10:39:48 +0900</pubDate>
    </item>
    <item>
      <title>Powershell 스크립트에서 반환 값을 잡는 방법</title>
      <link>https://codebag.tistory.com/793</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Powershell 스크립트에서 반환 값을 잡는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;반환 값이 있는 &lt;strong&gt;다른 파워셸 스크립트를 실행&lt;/strong&gt;하는 파워셸 스크립트(.ps1)가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 명령을 사용하여 스크립트를 호출합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$result = Invoke-Expression -Command &quot;.\check.ps1 $fileCommon&quot;

Write-Output $result
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;출력은 단지&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Write-Ouput&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 스크립트를 가지고 있지만 반환 값은 가지고 있지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$true&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$false&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 대본에서 돌아오는 것을 어떻게 잡을 수 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;뒤에 있는 표현은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;return&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PowerShell의 statement는 다른 모든 식과 마찬가지로 평가됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;출력이 발생하면 stdout으로 적습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;$ 결과는 스크립트에 의해 stdout으로 작성된 것을 모두 받습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;stdout에 둘 이상의 것이 쓰여지면, 이런 것들이 배열됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 check.ps1의 경우 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Write-Output &quot;$args[0]&quot;
return $false
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 당신은 그것을.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$result = &amp;amp;&quot;.\check.ps1&quot; xxx
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고나서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$result&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;값 &quot;xxx&quot;( 문자열) 및 &quot;False&quot;(boole)가 있는 크기 2의 객체 배열이 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;반환 값만 stdout(가장 깨끗한 방법)에 쓰도록 스크립트를 변경할 수 없는 경우 마지막 값을 제외한 모든 것을 무시할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$result = &amp;amp;&quot;.\check.ps1&quot; xxx | select -Last 1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지금이다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$result&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;부울 값으로 &quot;False&quot;만 포함됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스크립트를 변경할 수 있는 경우, 변수 이름을 전달하여 스크립트에 설정하는 것도 방법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;통화:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;amp;&quot;.\check.ps1&quot; $fileCommon &quot;result&quot;
if ($result) {
    # Do things
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스크립트:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;param($file,$parentvariable)
# Do things
Set-Variable -Name $parentvariable -Value $false -Scope 1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-Scope 1&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 상위(caller) 범위를 나타내므로 호출 코드에서 읽기만 하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스크립트 함수에서 값을 반환하는 확실한 방법은 변수를 설정하는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;출력 위치에 의존하는 것은 예를 들어 누군가가 스트림에 새로운 출력을 추가하는 경우 미래에 손상될 가능성이 있습니다. Write-Output/Write-Warning/Write-Verbose 등...&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;리턴&lt;/strong&gt;은 다른 언어와 달리 스크립트 기능에서 너무 오해의 소지가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파워셸에서 클래스+기능을 사용하는 또 다른 메커니즘을 보았지만, 당신이 찾고 있는 것이 아닌지 의심됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function Test-Result{
            Param(
                $ResultVariableName
            )
 try{
     Write-Verbose &quot;Returning value&quot;
     Set-Variable -Name $ResultVariableName -Value $false -Scope 1
     Write-Verbose &quot;Returned value&quot;
     return $value # Will not be the last output
    }
    catch{
     Write-Error &quot;Some Error&quot;
    }
    finally{
     Write-Output &quot;finalizing&quot;
     Write-Verbose &quot;really finalizing&quot;
    }

#Try these cases 

$VerbosePreference=Continue

Test-Result 

$MyResultArray=Test-Result *&amp;gt;&amp;amp;1; $MyResultArray[-1] # last object in the array

Test-Result &quot;MyResult&quot; *&amp;gt;&amp;amp;1; $MyResult
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/50578510/how-catch-return-value-in-a-powershell-script&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>PowerShell</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/793</guid>
      <comments>https://codebag.tistory.com/793#entry793comment</comments>
      <pubDate>Sat, 4 Nov 2023 10:39:41 +0900</pubDate>
    </item>
    <item>
      <title>쿼리를 하나의 레코드로 제한하면 성능이 향상됩니까?</title>
      <link>https://codebag.tistory.com/792</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;쿼리를 하나의 레코드로 제한하면 성능이 향상됩니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테이블에 일치하는 결과가 하나만 있는 경우 쿼리를 하나의 결과 레코드로 제한하고 큰 MySQL 테이블의 성능을 향상시킬 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를들면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; select * from people where name = &quot;Re0sless&quot; limit 1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 이름을 가진 기록이 하나뿐이라면?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;name&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본 키가 고유하게 설정되었습니까? 쿼리를 업데이트할 가치가 있습니까? 아니면 이득이 최소입니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;열이 있는 경우&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;고유 지수: 아니,&lt;/strong&gt; 더 이상 빠르지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;비unique&lt;/strong&gt; 인덱스: 아마도&lt;strong&gt;,&lt;/strong&gt; 만약 존재한다면, 그것은 첫번째 일치된 행을 초과하는 추가적인 행을 보내지 못하게 하기 때문일 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;no index:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;하나&lt;/strong&gt; 이상의 행이 쿼리와 일치하는 경우, 첫 번째 행이 일치하면 전체 테이블 검색이 중지되므로 예.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;쿼리와 일치하는 행이 없으면 전체 &lt;strong&gt;테이블&lt;/strong&gt; 검색을 완료해야 하기 때문에 없습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하나 이상의 조인과 함께 약간 더 복잡한 쿼리가 있는 경우 LIMIT 절은 옵티마이저에 추가 정보를 제공합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 개의 테이블과 일치하고 모든 행을 반환할 것으로 예상되는 경우 일반적으로 &lt;a href=&quot;http://en.wikipedia.org/wiki/Hash_join&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;해시 조인&quot; papago-attr-id=&quot;3&quot;&gt;해시 조인&lt;/a&gt;이 최적입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;해시 조인은 많은 양의 매칭에 최적화된 조인 유형입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 옵티마이저가 사용자가 LIMIT 1을 통과했다는 것을 알게 되면 대량의 데이터를 처리하지 못할 것이라는 것을 알게 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Nested_loop_join&quot; rel=&quot;nofollow noreferrer&quot; title=&quot;루프조인&quot; papago-attr-id=&quot;4&quot;&gt;루프 조인&lt;/a&gt;으로 되돌릴 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데이터베이스(그리고 심지어는 데이터베이스 버전)에 따라 성능에 엄청난 영향을 미칠 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;질문에 순서대로 답하기: 1) 예, 이름에 색인이 없는 경우.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;쿼리는 첫 번째 레코드를 찾는 즉시 종료됩니다. 제한을 해제하고 매번 전체 테이블 스캔을 수행해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;2) 아니요. 기본/unique 키는 고유하게 보장됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;쿼리가 행을 찾자마자 실행을 중지해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;LIMIT는 데이터 세트를 찾고 결과 세트를 구축한 후에 수행하는 작업이라 생각하기 때문에 아무런 차이가 없을 것 같습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본 키의 이름을 지정하면 열에 대한 인덱스가 만들어지기 때문에 상당한 긍정적인 효과가 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;표에서 &quot;이름&quot;이 고유한 경우에도 쿼리에 제한 제약 조건을 적용하여 성능이 (매우 최소) 향상될 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이름이 기본 키라면 아무 것도 없을 가능성이 높습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;네, 데이터를 처리할 때 성능 차이가 발생합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하나의 레코드가 여러 개의 레코드보다 공간을 적게 차지합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;많은 행을 처리하지 않는 한 큰 차이는 없지만 일단 쿼리를 실행하면 데이터가 다시 사용자에게 표시되어야 하므로 비용이 많이 들거나 프로그래밍 방식으로 처리해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어느 쪽이든, 한 개의 레코드가 여러 개의 레코드보다 쉽습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/34488/does-limiting-a-query-to-one-record-improve-performance&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>mysql</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/792</guid>
      <comments>https://codebag.tistory.com/792#entry792comment</comments>
      <pubDate>Sat, 4 Nov 2023 10:39:34 +0900</pubDate>
    </item>
    <item>
      <title>jQuery.live()와 .on()의 차이점은 무엇입니까?</title>
      <link>https://codebag.tistory.com/791</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery.live()와 .on()의 차이점은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새로운 방법이 있겠군요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.on()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대신하는 jQuery 1.7에서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.live()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이전 버전에서는&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 그들 사이의 차이점과 이 새로운 방법을 사용함으로써 얻을 수 있는 이점이 무엇인지 알고 싶습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;라이브를 사용하고 싶지 않은 이유가 &lt;a href=&quot;http://api.jquery.com/live/&quot; rel=&quot;noreferrer&quot;&gt;문서&lt;/a&gt;에 꽤 분명합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;펠릭스가 언급한 것처럼&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.on&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보다 효율적으로 이벤트를 첨부할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery의 최신 버전에서는 단점이 없는 더 나은 메서드를 제공하므로 .live() 메서드를 사용하지 않는 것이 좋습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;특히 .live()를 사용할 경우 다음과 같은 문제가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery는 선택자가 지정한 요소를 불러오기 전에 검색을 시도합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.live()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대용량 문서에서 시간이 많이 걸릴 수 있는 메서드입니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;체인 방식은 지원되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를들면,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(&quot;a&quot;).find(&quot;.offsite, .external&quot;).live( ... ); &lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;유효하지 &lt;em&gt;않으며&lt;/em&gt; 예상대로 작동하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모쪼록&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.live()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이벤트가 첨부됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;document&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요소, 이벤트가 처리되기 전에 가능한 가장 길고 느린 경로를 선택합니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이벤트 핸들러 호출은 문서의 하위에 첨부된 이벤트 핸들러를 중지하는 데 효과적이지 않습니다. 이벤트는 이미 다음으로 전파되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;document&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.live()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;메소드는 놀랄 수 있는 방법으로 다른 이벤트 메소드와 상호작용합니다. 예를 들어,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(document).unbind(&quot;click&quot;)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;호출에 의해 연결된 모든 클릭 핸들러를 제거합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.live()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;!&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/blockquote&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사람들이 이사할 때 우연히 발견되는 한가지 차이점&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.live()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.on()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것이 그들을 위한 매개변수인가요?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.on()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이벤트를 DOM에 동적으로 추가된 요소에 바인딩할 때는 약간 다릅니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 우리가 사용했던 구문의 예가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.live()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;방법:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('button').live('click', doSomething);

function doSomething() {
    // do something
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 와 함께&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.live()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery 버전 1.7에서 더 이상 사용되지 않고 버전 1.9에서 제거된 당신은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.on()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;방법.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음은 다음을 사용한 동등한 예입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.on()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;방법:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).on('click', 'button', doSomething);

function doSomething() {
    // do something
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;버튼 자체보다는 문서에 불리하게 전화를 드리는 &lt;/em&gt;점 &lt;em&gt;참고 부탁드립니다&lt;/em&gt;.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 번째 매개 변수에서 듣고 있는 이벤트의 요소에 대한 선택기를 지정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위의 예에서, 제가 전화한 것은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.on()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 문서에서는 선택기에 가까운 요소를 사용하면 성능이 향상됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;호출하기 전에 페이지에 존재하는 한 모든 상위 요소가 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.on()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://api.jquery.com/on#direct-and-delegated-events&quot; rel=&quot;noreferrer&quot;&gt;이것은 여기&lt;/a&gt; 설명서에 설명되어 있지만 놓치기 쉽습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://blog.jquery.com/2011/11/03/jquery-1-7-released/&quot;&gt;공식 블로그&lt;/a&gt; 보기&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;[..]새로운 .on() 및 .off() API는 jQuery의 문서에 이벤트를 첨부하는 모든 방법을 통합합니다. 입력하기에 더 짧습니다![...]&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;pre&gt;&lt;code&gt;.live()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 메서드는 현재 및 미래의 선택기와 일치하는 모든 요소에 대한 이벤트 핸들러를 첨부하는 데 사용됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$( &quot;#someid&quot; ).live( &quot;click&quot;, function() {
  console.log(&quot;live event.&quot;);
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.on()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 방법은 아래 선택한 요소에 하나 이상의 이벤트에 대한 이벤트 핸들러 함수를 첨부하는 데 사용됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$( &quot;#someid&quot; ).on( &quot;click&quot;, function() {
  console.log(&quot;on event.&quot;);
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&quot;http://www.jquery4u.com/jquery-functions/on-vs-live-review/#.UEbZwIogdRM&quot; rel=&quot;nofollow&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;온 대 라이브의 차이에 대한 좋은 튜토리얼&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위 링크에서 인용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.live()에 무슨 문제가 있습니까?&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery의 최신 버전에서는 단점이 없는 더 나은 메서드를 제공하므로 .live() 메서드를 사용하지 않는 것이 좋습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;특히 .live()를 사용할 경우 다음과 같은 문제가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;ol&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery는 .live() 메서드를 호출하기 전에 선택자가 지정한 요소를 검색하려고 시도하므로 큰 문서에서 시간이 많이 걸릴 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;체인 방식은 지원되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 $(&quot;a&quot;).find(.offsite, .external&quot;).live( … );가 올바르지 않으며 예상대로 작동하지 않습니다.&lt;/font&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 .live() 이벤트는 문서 요소에 첨부되므로 이벤트를 처리하기 전에 가능한 가장 길고 느린 경로를 선택합니다.&lt;/font&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이벤트 핸들러에서 event.stopPropagation()을 호출하는 것은 문서의 하위에 첨부된 이벤트 핸들러를 중지하는 데 효과적이지 않으며, 이벤트는 이미 문서로 전파되었습니다.&lt;/font&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.live() 메서드는 $(문서)와 같은 놀라운 방법으로 다른 이벤트 메서드와 상호 작용합니다.unbind(&quot;click&quot;)는 .live()!에 대한 호출에 의해 연결된 모든 클릭 핸들러를 제거합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;/ol&gt; 
&lt;/blockquote&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;더 자세한 정보는 확인해보세요&lt;a href=&quot;http://api.jquery.com/live/&quot; rel=&quot;nofollow&quot;&gt;..&lt;/a&gt; &lt;a href=&quot;http://api.jquery.com/on/&quot; rel=&quot;nofollow&quot;&gt;라이브 &lt;/a&gt;()와 .on.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.라이브 () 방식은 컨텐츠의 동적 생성을 다룰 때 사용됩니다...&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Jquery Slider의 값을 변경할 때 탭을 추가하는 프로그램에서 만든 것처럼 모든 탭에 닫기 버튼 기능을 추가하고 싶습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내가 시도한 코드는..&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var tabs = $('#tabs').tabs();
                                        // live() methos attaches an event handler for all
                                        //elements which matches the curren selector
        $( &quot;#tabs span.ui-icon-close&quot; ).live( &quot;click&quot;, function() {


            // fetches the panelId attribute aria-control which is like tab1 or vice versa
            var panelId = $( this  ).closest( &quot;li&quot; ).remove().attr( &quot;aria-controls&quot; );
            $( &quot;#&quot; + panelId ).remove();
            tabs.tabs( &quot;refresh&quot; );
        });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 꽤 멋지게 작동합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 jQuery를 사용하는 Chrome extension &quot;&lt;a href=&quot;https://chrome.google.com/webstore/detail/comment-save/ndmcbhmmonjkclhmeidccodfhlifmmco&quot; rel=&quot;nofollow&quot;&gt;Comment Save&quot;&lt;/a&gt;의 저자입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.live()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 확장자가 작동하는 방법은 를 사용하는 모든 텍스트 영역에 리스너를 부착하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;live()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;- 문서가 변경될 때마다 청취자를 모든 새로운 텍스트 영역에 부착하기 때문에 이것은 잘 작동했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이사했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.on()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 그것도 잘 안 돼요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문서가 변경될 때마다 수신기가 연결되지 않으므로 다시 사용하기로 되돌아갔습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.live()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 그것은 내가 추측하는 버그입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.on()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 조심하세요.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;브라우저 마감 이벤트를 확인해야 하는 요구사항이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;조사를 마치고 jQuery 1.8.3을 사용하여 다음과 같이 하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하이퍼링크를 클릭하면 다음 jQuery를 사용하여 플래그 켜기&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;$('a').라이브 (' 클릭', 함수 () {cleanSession = false;});&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제출의 입력 버튼 유형을 클릭할 때 다음 jQuery를 사용하여 플래그 켜기&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;$(&quot;input[type=submit]&quot;.라이브 (' 클릭&quot;, 함수 () {alert(' 입력 버튼 클릭'; cleanSession=false;}))&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;양식 제출이 발생하면 다음 jQuery를 사용하여 플래그 켜기&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;$('form').라이브 ('submit', 함수 () {cleanSession = false;};&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;중요한 것은 .live 대신 .on을 사용하는 경우에만 솔루션이 작동합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.on을 사용하면 폼 제출 후 이벤트가 발생하고 너무 늦습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;javascript call (document.form.submit)을 사용하여 양식을 제출하는 경우가 많습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 .live와 .on 사이에는 핵심적인 차이점이 있습니다.live를 사용하면 이벤트가 즉시 꺼지지만 .on으로 전환하면 제때 꺼지지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/8042576/whats-the-difference-between-jquery-live-and-on&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>jQuery</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/791</guid>
      <comments>https://codebag.tistory.com/791#entry791comment</comments>
      <pubDate>Sat, 4 Nov 2023 10:39:27 +0900</pubDate>
    </item>
    <item>
      <title>Android studio에서 대소문자를 내릴 수 없습니다.</title>
      <link>https://codebag.tistory.com/790</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Android studio에서 대소문자를 내릴 수 없습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아까부터 저를 괴롭히던 사소한 질문이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구글에 검색해 보았지만 저와 같은 문제가 있거나 문제로 보지 않는 사람은 없는 것 같습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;activity_my.xml의 레이아웃 아래 버튼을 만들 때&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; &amp;lt;Button
    android:layout_width=&quot;wrap_content&quot;
    android:layout_height=&quot;wrap_content&quot;
    android:text=&quot;@string/button_1_name&quot;
    android:id=&quot;@+id/button2&quot;
    android:layout_marginTop=&quot;140dp&quot;
    android:layout_below=&quot;@+id/textView&quot;
    android:layout_centerHorizontal=&quot;true&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;버튼이 하나 잡혔어요.&lt;/font&gt;&lt;/font&gt;&lt;img src=&quot;https://i.stack.imgur.com/zJNv1.png&quot; alt=&quot;this][Imgur&quot;&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내 스트링 코드가:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;resources&amp;gt;

&amp;lt;string name=&quot;app_name&quot;&amp;gt;HelloWorld&amp;lt;/string&amp;gt;
&amp;lt;string name=&quot;hello_world&quot;&amp;gt;Hello world!&amp;lt;/string&amp;gt;
&amp;lt;string name=&quot;action_settings&quot;&amp;gt;Settings&amp;lt;/string&amp;gt;
&amp;lt;string name=&quot;button_1_name&quot;&amp;gt;BuTtOn 1&amp;lt;/string&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 여기서 작은 것을 놓치고 있는 것은 확실하지만, 버튼 텍스트에서 소문자/윗글이 작동하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;감사합니다!&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;추가할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;android:textAllCaps=&quot;false&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;단추로&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;버튼 텍스트는 모든 버튼에 적용되는 앱의 테마에 따라 대문자로 변환될 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;속성 설정을 위해 테마/스타일 파일 확인&lt;/font&gt;&lt;/font&gt;&lt;code&gt;android:textAllCaps&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;style name=&quot;AppTheme&quot; parent=&quot;AppBaseTheme&quot;&amp;gt;
    &amp;lt;item name=&quot;android:buttonStyle&quot;&amp;gt;@style/Button&amp;lt;/item&amp;gt;
&amp;lt;/style&amp;gt;

&amp;lt;style name=&quot;Button&quot; parent=&quot;Widget.AppCompat.Button&quot;&amp;gt;
    &amp;lt;item name=&quot;android:textAllCaps&quot;&amp;gt;false&amp;lt;/item&amp;gt;
&amp;lt;/style&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;activity_main.xml&lt;/strong&gt;에서 보기 내부의 다음 코드를 사용하여 쉽게 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;android:textAllCaps=&quot;false&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;고객님의 경우 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; &amp;lt;Button
android:layout_width=&quot;wrap_content&quot;
android:layout_height=&quot;wrap_content&quot;
android:text=&quot;@string/button_1_name&quot;
android:id=&quot;@+id/button2&quot;
android:layout_marginTop=&quot;140dp&quot;
android:layout_below=&quot;@+id/textView&quot;
android:layout_centerHorizontal=&quot;true&quot;
android:textAllCaps=&quot;false&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;스타일/themes.xml&lt;/strong&gt;에 추가하여 앱의 모든 버튼에 대해 변경할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;style name=&quot;AppTheme&quot; parent=&quot;AppBaseTheme&quot;&amp;gt;
&amp;lt;item name=&quot;android:buttonStyle&quot;&amp;gt;@style/Button&amp;lt;/item&amp;gt;
&amp;lt;/style&amp;gt;

&amp;lt;style name=&quot;Button&quot; parent=&quot;Widget.AppCompat.Button&quot;&amp;gt;
&amp;lt;item name=&quot;android:textAllCaps&quot;&amp;gt;false&amp;lt;/item&amp;gt;
&amp;lt;/style&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;mainActivity.kt&lt;/strong&gt; 또는&lt;strong&gt; mainActivity.java&lt;/strong&gt;에서 다음을 사용하여 Programmatic으로 설정할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Button btn = (Button) findViewById(R.id.button2);
btn.setAllCaps(false);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이는 응용 프로그램 코드에서 버튼의 TransformationMethod null을 설정하여 수정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mButton.setTransformationMethod(null);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;더하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;android:textAllCaps=&quot;false&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;xml button 이 문제는 사실입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;3가지 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1.style.xml에 다음 행을 추가하여 전체 응용 프로그램을 변경합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;item name=&quot;android:textAllCaps&quot;&amp;gt;false&amp;lt;/item&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;2.사용&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;android:textAllCaps=&quot;false&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;layout-v21&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mButton.setTransformationMethod(null);
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;3&quot;&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;xml의 요소(버튼 또는 텍스트 편집) 아래에 이 줄 추가)&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;안드로이드:textAllCaps=&quot;false&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;안부 전해요&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 설정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;button.setAllCaps(false);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;계획적으로&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;단추 내의 .xml 파일에 이 줄을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;android:textAllCaps=&quot;false&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;안드로이드&lt;/strong&gt;에는 속성이 &lt;strong&gt;있습니다.textAllCaps&lt;/strong&gt;=&quot;false&quot;는 자신의 스몰과 캡에 원하는 캐릭터를 만드는 것입니다&lt;strong&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본적으로 &lt;strong&gt;True&lt;/strong&gt;가 되었으므로 이 코드를 작성하고 텍스트를 &lt;strong&gt;작성&lt;/strong&gt;합니다.AllCaps= false 그러면 필요에 따라 버튼에 텍스트를 작고 캡스 문자로 작성할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;우리의 요구에 따라 글자를 쓸 수 있는 버튼의 코드를 완성합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; &amp;lt;Button
            android:layout_width=&quot;match_parent&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:id=&quot;@+id/btnLogin&quot;
            android:text=&quot;Login for Chat&quot;
            android:textAllCaps=&quot;false&quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;XML 코드로&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 행을 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;android:textAllCaps=&quot;false&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;벨로우 코드처럼&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; &amp;lt;Button
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;@string/button_1_name&quot;
        android:id=&quot;@+id/button2&quot;
        android:layout_marginTop=&quot;140dp&quot;
        android:layout_below=&quot;@+id/textView&quot;
        android:layout_centerHorizontal=&quot;true&quot;
       ** android:textAllCaps=&quot;false&quot; ** /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자바 코드로 (&lt;strong&gt;프로그래밍&lt;/strong&gt; 방식으로)&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;단추에 이 줄을 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setAllCaps(false)&lt;/code&gt; &lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Button btn = (Button) findViewById(R.id.button2);
btn.setAllCaps(false);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;TextView에서 이 문제에 직면했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;난 시도했다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;android:textAllCaps=&quot;false&quot;, 
mbutton.setAllCaps(false);   
&amp;lt;item name=&quot;android:textAllCaps&quot;&amp;gt;false&amp;lt;/item&amp;gt; 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 중 어떤 것도 저에게 효과가 없었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;드디어 진절머리가 나서 코드화된 텍스트가 있는데, 효과가 &lt;strong&gt;있습니다.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;tv.setText(&quot;Mytext&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;TV는 TextView의 객체입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 코딩 표준에 따르면, 그것은 나쁜 관행입니다.&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;XML: 안드로이드:textAllCaps=&quot;false&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로그래밍 방식:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;m단추&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 캡(허수)을 설정합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/24880388/cannot-lower-case-button-text-in-android-studio&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>Android</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/790</guid>
      <comments>https://codebag.tistory.com/790#entry790comment</comments>
      <pubDate>Sat, 4 Nov 2023 10:39:20 +0900</pubDate>
    </item>
    <item>
      <title>이미 64비트 Oracle Database Server를 실행 중인 윈도우즈 Server에 Oracle 32비트 클라이언트 설치</title>
      <link>https://codebag.tistory.com/789</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이미 64비트 Oracle Database Server를 실행 중인 윈도우즈 Server에 Oracle 32비트 클라이언트 설치&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Windows 2008 R2에 64비트 Oracle Database Server(11.2.0.3)가 설치되어 있는데 자연스럽게 64비트 클라이언트가 자동으로 설치됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;32비트 서버에 32비트 Oracle 클라이언트가 필요한 애플리케이션을 설치해야 합니다. (묻지마 - 64비트 버전의 이 앱을 설치할 수도 없고 64비트 클라이언트에서도 작동하지 않으며 다른 서버에 설치할 수도 없습니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 32비트 클라이언트를 다른 물리적 폴더에 설치해보고 설치할 때 Oracle Base 및 Software Location에 대해 다른 값을 선택했는데 잘 설치되었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 32비트 클라이언트 설치의 BIN 폴더를 PATH statemtn 맨 앞에 놓았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 32비트 버전으로 &quot;SQLplus system/system&quot;을 실행하려고 하면 &quot;ORA-12560: TNS:protocol adapter 오류&quot;라는 메시지가 나타납니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;64비트 sqlplus로 폴더에 들어가면.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;exe 및 실행(PATH를 통하지 않고 직접 실행), &quot;시스템/시스템&quot; 자격 증명이 정상적으로 작동했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;TNSNames 폴더를 Oracle Server의 NETWORK/admin 폴더에서 Oracle Client의 NETWORK/admin 폴더로 복사하고 서버를 재부팅했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;결과는 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 Oracle에 대한 문제 해결 지식의 범위입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;32비트 클라이언트를 64비트 오라클 서버와 동일한 서버에서 실행하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;리눅스/유닉스에서는 lib32 폴더를 64비트 클라이언트 폴더에 넣고 몇 가지 환경 변수를 설정하기만 하면 되지만, 윈도우에서는 그렇게 간단하지 않을 것이라고 확신합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;방법이 있다면 단계별로 설명이 필요하니 답변해주시기 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;미리 감사드립니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음은 32비트 및 64비트 Oracle Client를 한 시스템에 설치하는 방법입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지시대로 하면 효과가 있을 겁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가정:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;Oracle Home의 이름은 11gR2이고 클라이언트 버전은 11gR2입니다.&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 Oracle x86 Client를 다운로드하여 설치합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\Oracle\11.2\Client_x86&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Oracle x64 Client를 다운로드하여 다른 폴더에 설치합니다(예:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\Oracle\11.2\Client_x64&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;명령줄 도구 열기, 폴더로 이동&lt;/font&gt;&lt;/font&gt;&lt;code&gt;%WINDIR%\System32&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,일반적으로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\Windows\System32&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;상징적인 연결고리를 만들고,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ora112&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;폴더로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\Oracle\11.2\Client_x64&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(아래 명령 섹션 참조)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;폴더로 변경&lt;/font&gt;&lt;/font&gt;&lt;code&gt;%WINDIR%\SysWOW64&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,일반적으로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\Windows\SysWOW64&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;상징적인 연결고리를 만들고,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ora112&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;폴더로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\Oracle\11.2\Client_x86&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, (아래 참조)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;수정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PATH&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;environment variable, 다음과 같이 모든 항목 바꾸기&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\Oracle\11.2\Client_x86&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\Oracle\11.2\Client_x64&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;타고&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\Windows\System32\ora112&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 그들 각자의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;\bin&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하위 폴더&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참고:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\Windows\SysWOW64\ora112&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PATH 환경에 있으면 안 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;필요한 경우 설정&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ORACLE_HOME&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;환경 변수:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\Windows\System32\ora112&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;레지스트리 편집기를 엽니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;레지스트리 값 설정&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HKLM\Software\ORACLE\KEY_OraClient11g_home1\ORACLE_HOME&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\Windows\System32\ora112&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\Oracle\11.2\Client_x64&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;역시 효과가 있을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;레지스트리 값 설정&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HKLM\Software\Wow6432Node\ORACLE\KEY_OraClient11g_home1\ORACLE_HOME&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\Windows\System32\ora112&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(아니오)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\Windows\SysWOW64\ora112&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\Oracle\11.2\Client_x86&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;역시 효과가 있을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신은 해냈어요!&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 x86과 x64 Oracle 클라이언트를 원활하게 함께 사용할 수 있습니다. 즉, x86 응용 프로그램이 x86 라이브러리를 로드하고, x64 응용 프로그램이 시스템을 더 이상 수정하지 않고도 x64 라이브러리를 로드합니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아마도 당신의 컴퓨터를 설정하는 것이 현명한 생각일 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;TNS_ADMIN&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;환경 변수(resp).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;TNS_ADMIN&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Registry)의 항목을 공통 위치로(예:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;TNS_ADMIN=C:\Oracle\Common\network\admin&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;심볼릭 링크를 만드는 명령:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cd C:\Windows\System32
mklink /d ora112 C:\Oracle\11.2\Client_x64
cd C:\Windows\SysWOW64
mklink /d ora112 C:\Oracle\11.2\Client_x86
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;주의:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 두 심볼 링크의 이름이 같아야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ora112&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이름 폴더에도 불구하고&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\Windows\System32&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 x64 라이브러리를 포함하는 반면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\Windows\SysWOW64&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에는 x86(32비트) 라이브러리가 들어 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;헷갈리지 마세요.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배경 정보, 작동 이유: &lt;a href=&quot;https://learn.microsoft.com/en-us/windows/win32/winprog64/registry-redirector?redirectedfrom=MSDN&quot; rel=&quot;nofollow noreferrer&quot;&gt;레지스트리&lt;/a&gt; 리디렉션 및 파일 &lt;a href=&quot;https://learn.microsoft.com/en-us/windows/win32/winprog64/file-system-redirector?redirectedfrom=MSDN&quot; rel=&quot;nofollow noreferrer&quot;&gt;시스템 리디렉션&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저도 같은 문제가 있었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;동일한 Windows 10 컴퓨터(별도의 폴더)와 32비트 앱에 설치된 32비트 및 64비트 ORA 클라이언트가 모두 작동을 멈췄습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;시스템 환경 변수를 편집하고 ORACLE_HOME 항목을 삭제한 다음 다시 부팅하면 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나머지는 레지스트리 항목을 기반으로 Windows/Oracle이 수행합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;tnsnames.ora를 두 설치 모두에 복사하기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/25216290/installing-oracle-32-bit-client-on-windows-server-already-running-64-bit-oracle&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>oracle</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/789</guid>
      <comments>https://codebag.tistory.com/789#entry789comment</comments>
      <pubDate>Sat, 4 Nov 2023 10:39:11 +0900</pubDate>
    </item>
    <item>
      <title>char*str={&amp;quot;foo&amp;quot;,...의 차이점은 무엇입니까?} 그리고 charstr[5]={&amp;quot;foo&amp;quot;,...} 배열 정의?</title>
      <link>https://codebag.tistory.com/788</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;char*str={&quot;foo&quot;,...의 차이점은 무엇입니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;} 그리고 charstr[5]={&quot;foo&quot;,...&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;} 배열 정의?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;사례 1:&lt;/strong&gt; 글을 쓸 때&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char*str={&quot;what&quot;,&quot;is&quot;,&quot;this&quot;};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고나서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i]=&quot;newstring&quot;;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;반면에 유효합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i][j]='j';&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;유효하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;사례 2:&lt;/strong&gt; 글을 쓸 때&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char str[][5]={&quot;what&quot;,&quot;is&quot;,&quot;this&quot;};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고나서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i]=&quot;newstring&quot;;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;반면에 유효하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i][j]='J';&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;유효합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 왜 그럴까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 이미 다른 답을 읽고 많이 혼란스러워 하는 초보자입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;우선&lt;/em&gt;: 제안: &lt;strong&gt;&lt;a href=&quot;http://c-faq.com/aryptr/&quot; rel=&quot;noreferrer&quot;&gt;배열은 포인터가 아니며&lt;/a&gt;&lt;/strong&gt; 그 &lt;strong&gt;&lt;a href=&quot;http://c-faq.com/aryptr/&quot; rel=&quot;noreferrer&quot;&gt;반대&lt;/a&gt;&lt;/strong&gt;도 마찬가지입니다&lt;strong&gt;!!&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그건 그렇지만, 이 특정한 시나리오를 깨우치기 위해서는&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;첫번째 경우에는&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;char*str={&quot;what&quot;,&quot;is&quot;,&quot;this&quot;};
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 생각하는 것처럼 행동하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이는 §6.7.9/P2장에 따라 C 구현에 적합한 진단을 요구하는 제약 조건 위반입니다.&lt;/font&gt;&lt;/p&gt; 
  &lt;blockquote&gt; 
   &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;초기화자는 초기화 중인 엔티티 내에 포함되지 않은 개체에 대한 값을 제공하려고 시도해서는 안 됩니다.&lt;/font&gt;&lt;/p&gt; 
  &lt;/blockquote&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;경고를 활성화하면 (&lt;em&gt;적어도&lt;/em&gt;)&lt;/font&gt;&lt;/p&gt; 
  &lt;blockquote&gt; 
   &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;경고: 스칼라 이니셜라이저의 요소 초과&lt;/font&gt;&lt;/p&gt; 
   &lt;pre&gt;&lt;code&gt;  char*str={&quot;what&quot;,&quot;is&quot;,&quot;this&quot;};
&lt;/code&gt;&lt;/pre&gt; 
  &lt;/blockquote&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 엄격한 호환성이 설정된 컴파일러는 코드 컴파일을 거부해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;컴파일러가 바이너리 컴파일과 생성을 선택한 경우, 동작은 C 언어의 정의 범위에 있지 않고 컴파일러 구현에 달려 있습니다.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 경우 컴파일러는 이 문장을 기능적으로만 동일하게 만들기로 결정했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char*str= &quot;what&quot;;&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자, 자, 여기.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;A를 가리키는 포인터입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, &lt;em&gt;문자열 리터럴&lt;/em&gt;을 가리킵니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;포인터에 다시 할당할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;str=&quot;newstring&quot;;  //this is valid
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만, 이런 식의 진술.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt; str[i]=&quot;newstring&quot;;
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;유효&lt;/em&gt;하지 않습니다. 여기서 포인터 유형을 변환하여 저장하려고 시도합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;type(유형이 호환되지 않는 경우).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;컴파일러는 이 경우 잘못된 변환에 대한 경고를 던져야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 후에 다음과 같은 진술이.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;str[i][j]='J'; // compiler error
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열 구독을 사용하는 경우 구문적으로 유효하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;개체 유형을 완료할 pointer&quot;가 아닌 것에 연산자를 지정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;str[i][j] = ...
      ^^^------------------- cannot use this
^^^^^^ --------------------- str[i] is of type 'char', 
                             not a pointer to be used as the operand for [] operator.
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;반면에 &lt;/strong&gt;두 &lt;strong&gt;번째 경우에는&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 배열의 배열입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;개별 배열 요소를 변경할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt; str[i][j]='J'; // change individual element, good to go.
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열에 할당할 수 없습니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt; str[i]=&quot;newstring&quot;;  // nopes, array type is not an lvalue!!
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마침내.&lt;/font&gt;&lt;/strong&gt; &lt;a href=&quot;https://stackoverflow.com/questions/48315523/what-is-the-difference-between-charstr-foo-and-char-str5-foo#comment83622540_48315523&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(댓글에서 볼 수 있듯이) 당신이 글을 쓰려고 했던 것을 고려할 때.&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;char* str[ ] ={&quot;what&quot;,&quot;is&quot;,&quot;this&quot;};
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;첫 번째 경우에는 어레이 홀드에 대한 논리가 동일합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이거는.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;한 줄 한 줄의 포인터&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열 구성원들은 할당이 가능합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;str[i]=&quot;newstring&quot;;  // just overwrites the previous pointer
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;완벽하게 괜찮습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 배열 멤버로 저장된 포인터는 &lt;em&gt;문자열 리터럴&lt;/em&gt;에 대한 포인터이므로 위에서 언급한 것과 같은 이유로 문자열 리터럴에 속하는 메모리의 요소 중 하나를 수정하려는 경우 &lt;a href=&quot;https://en.wikipedia.org/wiki/Undefined_behavior&quot; rel=&quot;noreferrer&quot;&gt;정의&lt;/a&gt;되지 않은 &lt;a href=&quot;https://en.wikipedia.org/wiki/Undefined_behavior&quot; rel=&quot;noreferrer&quot;&gt;동작&lt;/a&gt;을 호출합니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt; str[i][j]='j';   //still invalid, as above.
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;메모리 레이아웃이 다릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char* str[] = {&quot;what&quot;, &quot;is&quot;, &quot;this&quot;};

    str
+--------+      +-----+
| pointer| ---&amp;gt; |what0|
+--------+      +-----+   +---+
| pointer| -------------&amp;gt; |is0|
+--------+                +---+    +-----+
| pointer| ----------------------&amp;gt; |this0|
+--------+                         +-----+
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 메모리 레이아웃에서,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 개별 문자열에 대한 포인터의 배열입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일반적으로 이러한 개별 문자열은 정적 저장소에 상주하며, 문자열을 수정하려고 하면 오류가 발생합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래픽에서 제가.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;종료 Null 바이트를 나타냅니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char str[][5] = {&quot;what&quot;, &quot;is&quot;, &quot;this&quot;};

  str
+-----+
|what0|
+-----+
|is000|
+-----+
|this0|
+-----+
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 경우에는.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 스택에 위치한 연속된 2D 문자 배열입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열을 초기화할 때 문자열이 이 메모리 영역에 복사되고 개별 문자열은 0바이트로 패딩되어 배열에 규칙적인 모양을 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 두 메모리 레이아웃은 근본적으로 서로 호환되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;포인터가 다른 함수에 연결될 것으로 예상되는 함수는 둘 중 하나를 전달할 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 개별 문자열에 대한 액세스는 호환됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 글을 쓸때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[1]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 당신은.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char*&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;바이트를 포함하는 메모리 영역의 첫 번째 문자로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;is0&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, C열&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;첫 번째 경우에는 이 포인터가 단순히 메모리에서 로드된 것임이 분명합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 번째 경우에는 배열-포인터-디케이를 통해 포인터가 생성됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[1]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실제로는 정확히 5바이트의 배열을 나타냅니다. (&lt;/font&gt;&lt;/font&gt;&lt;code&gt;is000&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;), 거의 모든 컨텍스트에서 첫 번째 요소에 대한 포인터로 즉시 디코딩됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 배열-포인터-디케이에 대한 완전한 설명은 이 답변의 범위를 벗어난다고 생각합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;궁금하다면 구글 배열 포인터 붕괴.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;처음으로 당신은 a에 대한 포인터인 변수를 정의합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 보통 &lt;em&gt;하나의 끈&lt;/em&gt;으로 사용됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열 리터럴을 가리키도록 포인터를 초기화합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;what&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 컴파일러는 목록에 이니셜이 너무 많다고 불평해야 &lt;em&gt;합니다&lt;/em&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 번째 정의는 다음을 만듭니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다섯 개씩 세 줄로 늘어선 배열.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 즉, 세 개의 다섯 글자로 이루어진 문자열의 배열입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;조금 다르게 보면 다음과 같은 것을 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;첫 번째 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;font papago-translate=&quot;translated&quot;&gt;+-----+     +--------+&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;| str | --&amp;gt; | &quot;뭐&quot; |&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;+-----+     +--------+&lt;/font&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 잠시동안 당신은&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;font papago-translate=&quot;translated&quot;&gt;+--------+--------+--------+&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;| &quot;What&quot; | &quot;is&quot; | &quot;this&quot; |&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;+--------+--------+--------+&lt;/font&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 첫 번째 버전의 경우 단일 문자열에 대한 포인터를 사용하면 식이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i] = &quot;newstring&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;&lt;em&gt;또한&lt;/em&gt;&lt;/strong&gt; 단일 &lt;strong&gt;&lt;em&gt;요소&lt;/em&gt;&lt;/strong&gt;에 포인터를 할당하려고 할 때 경고로 이어져야 합니다.&lt;/font&gt;&lt;/font&gt; &lt;code&gt;str[i]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 할당은 두 번째 버전에서도 유효하지 않지만 다음과 같은 또 다른 이유로 유효하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 배열(5개의 배열)입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;elements)을(를) 할당할 수 없으며 배열에 복사만 할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 네가 &lt;em&gt;해볼&lt;/em&gt; 수 있게,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;strcpy(str[i], &quot;newstring&quot;)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;컴파일러는 불평하지 않을 겁니다&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 10자(터미네이터 기억)를 5자 배열로 복사하려고 하면 범위를 벗어나서 &lt;em&gt;정의&lt;/em&gt;되지 않은 &lt;em&gt;동작&lt;/em&gt;으로 이어지기 때문에 &lt;em&gt;잘못된&lt;/em&gt; 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;첫번째 선언에서&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;char *str={&quot;what&quot;,&quot;is&quot;,&quot;this&quot;}; 
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;선언합니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;의 지시자.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스칼라입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;표준은 다음과 같이 말합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;6.7.9 초기화 (p11):&lt;/font&gt;&lt;/p&gt; 
  &lt;blockquote&gt; 
   &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스칼라의 이니셜라이저는 &lt;strong&gt;선택적&lt;/strong&gt;으로 괄호로 &lt;strong&gt;둘러싸인 단일 식&lt;/strong&gt;이어야 합니다. [...]&lt;/font&gt;&lt;/p&gt; 
  &lt;/blockquote&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 스칼라 유형이 하나의 식으로 묶은 초기화기를 가질 수 있지만 다음과 같은 경우에&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;char *str = {&quot;what&quot;,&quot;is&quot;,&quot;this&quot;}; // three expressions in brace enclosed initializer
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것을 어떻게 처리할지는 컴파일러들에게 달려있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나머지 이니셜라이저에 발생하는 문제는 &lt;a href=&quot;https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=684635&quot; rel=&quot;nofollow noreferrer&quot;&gt;버그&lt;/a&gt;입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;컨펌 컴플라이어는 진단 메시지를 제공해야 합니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;[Warning] excess elements in scalar initializer   
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;5.1.1.3 진단(P1):&lt;/font&gt;&lt;/p&gt; 
  &lt;blockquote&gt; 
   &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;동작 또한 명시적으로 정의되지 않았거나 구현이 정의된 것으로 명시적으로 지정된 경우에도, 사전 처리 번역 유닛 또는 번역 유닛이 어떤 구문 규칙 또는 제약 조건의 위반을 포함하는 경우, 적합한 구현은 (구현이 정의된 방식으로 식별된) 적어도 하나의 진단 메시지를 생성해야 합니다.&lt;/font&gt;&lt;/p&gt; 
  &lt;/blockquote&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;&lt;em&gt;&lt;code&gt;str[i]=&quot;newstring&quot;;&lt;/code&gt;&lt;/em&gt;는&lt;em&gt; 유효&lt;/em&gt;하지만 &quot;는 유효하지 않습니다&lt;em&gt;.&quot;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;str[i]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;타이핑하고 a만 보유할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자료형.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;할당중&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;newstring&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(이 중 어느 것에 해당합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char *&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;)이(가) 잘못되었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;성명서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i][j]='j';&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;첨자 연산자는 배열 또는 포인터 데이터 형식에만 적용할 수 있으므로 잘못되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만들 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i]=&quot;newstring&quot;;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;선언을 통해 작업&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다수의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char *&lt;/code&gt; &lt;/p&gt; &lt;pre&gt;&lt;code&gt;char *str[] = {&quot;what&quot;,&quot;is&quot;,&quot;this&quot;};
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char *&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;type 및 문자열 리터럴을 할당할 수 있지만 문자열 리터럴을 수정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가 정의되지 않은 동작을 호출합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신은 할 수 없다고 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[0][0] = 'W'&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;토막글&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;char str[][5]={&quot;what&quot;,&quot;is&quot;,&quot;this&quot;};
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;선언하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다양한 정보를 제공할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;s.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 사실 배열이고 배열은 수정할 수 없는 l 값이므로 할당 연산자의 왼쪽 피연산자로 사용할 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이거는.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i]=&quot;newstring&quot;;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;무효한.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하는 동안에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i][j]='J';&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열의 요소를 수정할 수 있기 때문에 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 다른 대답들이 나를 혼란스럽게 한다고 말한 것만으로, 더 간단한 예를 들어 어떤 일이 일어나고 있는지 먼저 알아보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char *ptr = &quot;somestring&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;somestring&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 메모리의 &lt;strong&gt;읽기 전용 데이터 섹션&lt;/strong&gt;에 저장되는 &lt;em&gt;문자열 리터럴&lt;/em&gt;입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ptr&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 할당된 메모리의 첫 번째 바이트를 가리키는 포인터(같은 코드 섹션의 다른 변수와 마찬가지로 allocated)입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 이 두 진술을 고려하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char *ptr2 = ptr; //statement 1 OK
ptr[1] = 'a';     //statement 2 error
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문 1은 완벽하게 유효한 작업(1개의 포인터를 다른 포인터에 할당)을 수행하고 있지만 문 2는 유효한 작업(읽기 전용 위치에 쓰기 시도)이 아닙니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;반면에 다음과 같은 글을 쓴다면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char ptr[] = &quot;somestring&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서 ptr은 실제로는 포인터가 아니라 배열의 이름입니다(포인터와 달리 메모리에 추가 공간을 차지하지 않습니다).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;필요에 따라 동일한 바이트 수를 할당합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;somestring&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(읽을 뿐만 아니라) 그게 다입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 동일한 두 문장과 하나의 추가 문장을 고려합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char *ptr2 = ptr; //statement 1 OK
ptr[1] = 'a';     //statement 2 OK
ptr = &quot;someotherstring&quot; //statement 3 error
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문 1은 완벽하게 유효한 작업을 수행하고 있습니다(포인터에 배열 이름을 할당하고 배열 이름은 첫 번째 바이트의 주소를 반환합니다). 문 2도 메모리가 읽기 전용이 아니기 때문에 유효합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문 3은 포인터가 아니므로 유효한 작업이 아니며 다른 메모리 위치를 가리킬 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 이 코드에서,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char **str={&quot;what&quot;,&quot;is&quot;,&quot;this&quot;};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;*str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 포인터(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;와 같은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;*(str+i)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 이 코드에서는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char str[][] = {&quot;what&quot;, &quot;is&quot;, &quot;this&quot;};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;str[i]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 포인터가 아닙니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열의 이름입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위와 같은 것은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt;&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;우선은&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;char*str={&quot;what&quot;,&quot;is&quot;,&quot;this&quot;};
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;유효한 &lt;/strong&gt;C&lt;strong&gt; 코드도 아니기 때문에 논의하는 것은 &lt;/strong&gt;큰 &lt;strong&gt;의미가 없습니다.&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떤 이유에서인지, gcc 컴파일러는 경고만으로 이 코드를 통과시킵니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;컴파일러 경고를 무시하지 마십시오.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;gcc를 사용할 때는 항상 다음을 사용하여 컴파일해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-std=c11 -pedantic-errors -Wall -Wextra&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;gcc가 이 비표준 코드를 만났을 때 하는 일은 마치 당신이 작성한 것처럼 처리하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char*str={&quot;what&quot;};&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 그리고 그 다음은 다음과 같은 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char*str=&quot;what&quot;;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 이것은 결코 C 언어로 보장되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;code&gt;str[i][j]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;은 포인터의 간접화 수준이 한 단계밖에 없는데도 두 번 간접화를 시도하므로 컴파일러 오류가 발생합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;타자를 치는 것만큼 말이 안 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;int array [3] = {1,2,3}; int x = array[0][0];&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사이의 차이점에 관해서는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char* str = ...&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char str[] = ...&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, &lt;a href=&quot;https://stackoverflow.com/questions/1704407/what-is-the-difference-between-char-s-and-char-s&quot;&gt;FAQ&lt;/a&gt; 참조:&lt;a href=&quot;https://stackoverflow.com/questions/1704407/what-is-the-difference-between-char-s-and-char-s&quot;&gt; char[]와 char*s의 차이점은 무엇입니까?&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;관련하여&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char str[][5]={&quot;what&quot;,&quot;is&quot;,&quot;this&quot;};&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;경우 배열(2D 배열)을 만듭니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로그래머가 제공한 초기화 수에 따라 최내측 치수는 5로 설정되고 최외측 치수는 컴파일러에 의해 자동으로 설정됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 경우 3의 코드는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char[3][5]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;code&gt;str[i]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열 번호를 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;i&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열된 배열로 말입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C의 배열은 언어가 그렇게 설계되어 있기 때문에 할당할 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 문자열에 대해서는 잘못된 것입니다. &lt;a href=&quot;https://stackoverflow.com/questions/3131319/how-to-correctly-assign-a-new-string-value&quot;&gt;FAQ:&lt;/a&gt; 새 &lt;a href=&quot;https://stackoverflow.com/questions/3131319/how-to-correctly-assign-a-new-string-value&quot;&gt;문자열 값을 올바르게 할당하는 방법&lt;/a&gt;은 무엇입니까&lt;a href=&quot;https://stackoverflow.com/questions/3131319/how-to-correctly-assign-a-new-string-value&quot;&gt;?&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;sup&gt;1)&lt;/sup&gt; 이는 C116.7.9/2의 제약 조건 위반입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;6.7.9/11 참조.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;혼란을 없애기 위해서는 포인터, 배열 및 이니셜라이저를 제대로 이해해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C 프로그래밍 초보자들 사이에서 흔한 오해는 배열이 포인터와 같다는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열은 동일한 유형의 항목 모음입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음의 선언을 고려합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char arr[10];
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 배열은 각각의 유형에 따라 10개의 요소를 포함합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이니셜라이저 리스트는 어레이를 편리한 방식으로 초기화하기 위해 사용될 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음은 배열 요소를 이니셜라이저 목록의 해당 값으로 초기화합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char array[10] = {'a','b','c','d','e','f','g','h','i','\0'};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열은 할당할 수 없으므로 배열 선언 시에만 이니셜라이저 목록을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char array[10];
array = {'a','b','c','d','e','f','g','h','i','\0'}; // Invalid...
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;pre&gt;&lt;code&gt;char array1[10];
char array2[10] = {'a','b','c','d','e','f','g','h','i','\0'};
array1 = array2; // Invalid...; You cannot copy array2 to array1 in this manner.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열을 선언한 후 배열 구성원에 대한 할당은 배열 인덱싱 연산자 또는 그와 동등한 연산자를 통해 수행해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char array[10];
array[0] = 'a';
array[1] = 'b';
.
.
.
array[9] = 'i';
array[10] = '\0';
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;루프는 배열 구성원에게 값을 할당하는 일반적이고 편리한 방법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char array[10];
int index = 0;
for(char val = 'a'; val &amp;lt;= 'i'; val++) {
    array[index] = val;
    index++;
}
array[index] = '\0';
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열은 상수 null terminal인 문자열 리터럴을 통해 초기화될 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char array[10] = &quot;abcdefghi&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 다음은 유효하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char array[10];
array = &quot;abcdefghi&quot;; // As mentioned before, arrays are not assignable
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자, 이제 우리가 포인터를...&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;포인터는 일반적으로 같은 유형의 다른 변수의 주소를 저장할 수 있는 변수입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같은 선언을 생각해 봅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char *ptr;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 유형의 변수를 선언합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char *&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,a&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;포인팅합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉, A를 가리킬 수 있는 포인터가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;변수.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열과 달리 포인터는 할당할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 다음이 유효합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char var;
char *ptr;
ptr = &amp;amp;var; // Perfectly Valid...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;포인터가 배열이 아니기 때문에 포인터에는 단일 값만 할당될 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char var;
char *ptr = &amp;amp;var; // The address of the variable `var` is stored as a value of the pointer `ptr`
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;포인터에 단일 값을 할당해야 하므로 초기화기 수가 1개 이상이므로 다음은 유효하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char *ptr = {'a','b','c','d','\0'};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이는 제약 조건 위반이지만 컴파일러가 다음을 할당할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'a'&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ptr&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나머지는 무시하고 있어요&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 그 때에도 컴파일러는 경고를 할 것입니다. 왜냐하면 다음과 같은 문자 리터럴은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'a'&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;갖고 있다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본적으로 type을 입력하고 다음 유형과 호환되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ptr&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어느 것이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char *&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 포인터가 런타임에 역참조된 경우 잘못된 메모리에 액세스하는 런타임 오류가 발생하여 프로그램이 중단됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예에서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char *str = {&quot;what&quot;, &quot;is&quot;, &quot;this&quot;};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다시 말하지만, 이것은 제약 위반이지만, 당신의 컴파일러는 문자열을 할당할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;what&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나머지는 무시하고 경고만 표시합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;code&gt;warning: excess elements in scalar initializer&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음은 포인터와 배열에 관한 혼란을 제거하는 방법입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일부 컨텍스트에서 배열은 배열의 첫 번째 요소에 대한 포인터로 붕괴될 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 다음이 유효합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char arr[10];
char *ptr = arr;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열 이름을 사용하여&lt;/font&gt;&lt;/font&gt;&lt;code&gt;arr&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;라는 과제 표현으로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rvalue&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 배열은 첫 번째 요소에 대한 포인터로 붕괴되며, 앞의 식은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char *ptr = &amp;amp;arr[0];
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 것을 기억하라.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;arr[0]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;유형의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;amp;arr[0]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것의 주소는 유형입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char *&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 변수와 호환되는 값입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ptr&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열 리터럴이 상수 null 종결임을 기억하십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt; &lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;arrays&lt;/strong&gt;, 따라서 다음 식도 유효합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char *ptr = &quot;abcdefghi&quot;; // the array &quot;abcdefghi&quot; decays to a pointer to the first element 'a'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자, 당신의 경우엔&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char str[][5] = {&quot;what&quot;,&quot;is&quot;,&quot;this&quot;};&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 각각 5개의 요소를 포함하는 3개의 배열입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열은 할당할 수 없으므로,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i] = &quot;newstring&quot;;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같이 유효하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열이지만,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i][j] = 'j';&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음부터 유효합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i][j]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 자체적으로 배열이 &lt;strong&gt;아니며&lt;/strong&gt; 할당 가능한 배열 요소입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사례 1:&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내가 글을 쓸때&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char*str={&quot;what&quot;,&quot;is&quot;,&quot;this&quot;};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고나서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i]=&quot;newstring&quot;;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;반면에 유효합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i][j]='j';&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;유효하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파트 I.I&lt;/font&gt;&lt;/strong&gt;&lt;br&gt; &lt;strong&gt;&lt;code&gt;&amp;gt;&amp;gt; char*str={&quot;what&quot;,&quot;is&quot;,&quot;this&quot;};&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 진술서에서,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에 대한 포인터입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;type. 컴파일할 때 다음 문장에 대한 &lt;strong&gt;경고 메시지&lt;/strong&gt;가 표시되어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;warning: excess elements in scalar initializer
        char*str={&quot;what&quot;,&quot;is&quot;,&quot;this&quot;};
                         ^
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;경고의 이유는 - 스칼라에 둘 이상의 이니셜라이저를 제공하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;[&lt;em&gt;산술형과 포인터형을 총칭하여 스칼라형이라고 합니다.]&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 스칼라이며 C &lt;a href=&quot;http://port70.net/%7Ensz/c/c11/n1570.html#6.7.9p11&quot; rel=&quot;nofollow noreferrer&quot;&gt;Standards#6.7.9p11&lt;/a&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스칼라의 이니셜라이저는 선택적으로 괄호 안에 포함된 단일 식을 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 스칼라에 둘 이상의 이니셜라이저를 주는 것은 &lt;a href=&quot;https://en.wikipedia.org/wiki/Undefined_behavior&quot; rel=&quot;nofollow noreferrer&quot;&gt;정의&lt;/a&gt;되지 않은 &lt;a href=&quot;https://en.wikipedia.org/wiki/Undefined_behavior&quot; rel=&quot;nofollow noreferrer&quot;&gt;동작&lt;/a&gt;입니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://port70.net/%7Ensz/c/c11/n1570.html#J.2&quot; rel=&quot;nofollow noreferrer&quot;&gt;From&lt;/a&gt; C &lt;a href=&quot;http://port70.net/%7Ensz/c/c11/n1570.html#J.2&quot; rel=&quot;nofollow noreferrer&quot;&gt;Standards#J.2 정의&lt;/a&gt;되지 않은 &lt;a href=&quot;http://port70.net/%7Ensz/c/c11/n1570.html#J.2&quot; rel=&quot;nofollow noreferrer&quot;&gt;동작&lt;/a&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스칼라의 이니셜라이저는 단일 식도 아니고 괄호 안에 포함된 단일 식도 아닙니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;표준에 따라 정의되지 않은 행동이기 때문&lt;/strong&gt;에 더 &lt;strong&gt;이상 논의할 필요가 없습니다.&lt;/strong&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;제1부&lt;/em&gt;에 대한 토론 중&lt;em&gt;.&lt;/em&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;2부&lt;/em&gt;와 &lt;em&gt;1부.&lt;/em&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;III&lt;/em&gt; 가정하에 -&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char *str=&quot;somestring&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 더 잘 이해하기 위해서만&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char *&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;유형.&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;font papago-translate=&quot;splitted&quot;&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열에 대한 포인터 배열을 만들려는 것 같습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 두 경우에 대해 이야기한 후 아래에 문자열에 대한 포인터 배열에 대한 간략한 내용을 추가했습니다.&lt;/font&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파트 2&lt;/font&gt;&lt;/strong&gt;&lt;br&gt; &lt;strong&gt;&lt;code&gt;&amp;gt;&amp;gt; then str[i]=&quot;newstring&quot;; is valid&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;아니&lt;/strong&gt;요, 이건 &lt;strong&gt;유효하지 않습니다&lt;/strong&gt;.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;호환되지 않는 변환 때문에 컴파일러가 이 문에 &lt;strong&gt;경고 메시지&lt;/strong&gt;를 주고 있음에 틀림없습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;부터&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에 대한 포인터입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;활자. 그러므로,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에 등장인물입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;i&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가리킨 대상을 지난 장소들&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;[&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i] --&amp;gt; *(str + i)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;].&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;&quot;newstring&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 문자열 리터럴이고 문자열 리터럴은 포인터로 붕괴됩니다. 단, 배열을 초기화하는 데 사용되는 경우는 제외하고, 유형은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char *&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 여기서 당신은 그것을 a에 할당하려고 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;type. 따라서 컴파일러는 경고로 보고합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제1부&lt;/font&gt;&lt;/strong&gt;&lt;br&gt; &lt;strong&gt;&lt;code&gt;&amp;gt;&amp;gt; whereas str[i][j]='j'; is invalid.&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예, 이것은 유효하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(subscript 연산자)는 배열 또는 포인터 피연산자와 함께 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;code&gt;str[i]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;캐릭터와.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i][j]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용 중임을 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;잘못된 피연산자입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 컴파일러가 오류로 보고합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사례 2:&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내가 글을 쓸때&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char str[][5]={&quot;what&quot;,&quot;is&quot;,&quot;this&quot;};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고나서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i]=&quot;newstring&quot;;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;반면에 유효하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i][j]='J';&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;유효합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제2부&lt;/font&gt;&lt;/strong&gt;&lt;br&gt; &lt;strong&gt;&lt;code&gt;&amp;gt;&amp;gt; char str[][5]={&quot;what&quot;,&quot;is&quot;,&quot;this&quot;};&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 전적으로 옳습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;2D 배열입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;컴파일러는 초기화자 수에 따라 첫 번째 차원을 자동으로 설정합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인메모리 뷰(in-memory view)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[][5]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 이 경우는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;         str
         +-+-+-+-+-+
  str[0] |w|h|a|t|0|
         +-+-+-+-+-+
  str[1] |i|s|0|0|0|
         +-+-+-+-+-+
  str[2] |t|h|i|s|0|
         +-+-+-+-+-+
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Initializer 목록에 따라 2D-array의 각 요소가 초기화되고 나머지 요소는 다음과 같이 설정됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제2부&lt;/font&gt;&lt;/strong&gt;&lt;br&gt; &lt;strong&gt;&lt;code&gt;&amp;gt;&amp;gt; then str[i]=&quot;newstring&quot;; is not valid&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예, 이것은 유효하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;code&gt;str[i]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 1차원 배열입니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C 표준에 따르면 배열은 수정 가능한 l 값이 아닙니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C &lt;a href=&quot;http://port70.net/%7Ensz/c/c11/n1570.html#6.3.2.1p1&quot; rel=&quot;nofollow noreferrer&quot;&gt;표준#6.3.2.1p1&lt;/a&gt;에서:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;lvalue는 개체를 지정할 가능성이 있는 (공백이 아닌 개체 유형이 있는) 표현입니다. 64) 평가할 때 lvalue가 개체를 지정하지 않으면 동작이 정의되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;개체가 특정 유형을 가지고 있다고 할 때 유형은 개체를 지정하는 데 사용되는 l 값으로 지정됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;수정 가능한 l 값은 배열 유형이 없고, 불완전한 유형이 없으며, 정수된 유형이 없으며, 구조 또는 조합인 경우 정수된 유형이 있는 구성원(모든 포함된 집합 또는 조합의 구성원 또는 요소 포함)이 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 배열 이름은 연산자 크기의 피연산자인 _Align of operator 또는 unary &amp;amp; operator인 경우를 제외하고 배열 개체의 초기 요소를 가리키는 포인터로 변환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C &lt;a href=&quot;http://port70.net/%7Ensz/c/c11/n1570.html#6.3.2.1p3&quot; rel=&quot;nofollow noreferrer&quot;&gt;표준#6.3.2.1p3&lt;/a&gt;에서:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;연산자 크기의 피연산자, _Align of operator 또는 unary &amp;amp; operator가 배열을 초기화하는 데 사용되는 문자열 리터럴인 경우를 제외하고, &quot;array of type&quot; 유형을 가진 식을 배열 개체의 초기 요소를 가리키며 l 값이 아닌 &quot;pointer to type&quot; 유형을 가진 식으로 변환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;부터&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이미 초기화되어 있고 다른 문자열 리터럴을 할당할 때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;i&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;sup&gt;th&lt;/sup&gt; 한 무리의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 문자열 리터럴을 포인터로 변환합니다. 이 포인터는 l 값의 유형을 가지고 있기 때문에 할당이 호환되지 않게 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;유형의 배열 및 r값&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char *&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 따라서 컴파일러가 오류로 보고합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파트 II.III&lt;/font&gt;&lt;/strong&gt;&lt;br&gt; &lt;strong&gt;&lt;code&gt;&amp;gt;&amp;gt; whereas str[i][j]='J'; is valid.&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예, 이것은 다음과 같은 조건에서 유효합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;i&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;j&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;주어진 배열에 유효한 값입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;str[i][j]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;유형의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 캐릭터를 지정할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C는 배열 경계를 확인하지 않으며 배열에 액세스하는 것은 다음을 포함하는 정의되지 않은 동작입니다. 이는 프로그래머가 의도한 대로 또는 분할 오류를 정확히 수행하거나 자동으로 잘못된 결과를 생성하거나 어떤 일이 발생할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;Case 1&lt;/strong&gt;에서 문자열에 대한 포인터 배열을 만들겠다고 가정합니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char *str[]={&quot;what&quot;,&quot;is&quot;,&quot;this&quot;};
         ^^
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;인메모리 뷰(in-memory view)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같은 일이 될 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;      str
        +----+    +-+-+-+-+--+
  str[0]|    |---&amp;gt;|w|h|a|t|\0|
        |    |    +-+-+-+-+--+
        +----+    +-+-+--+
  str[1]|    |---&amp;gt;|i|s|\0|
        |    |    +-+-+--+
        +----+    +-+-+-+-+--+
  str[2]|    |---&amp;gt;|t|h|i|s|\0|
        |    |    +-+-+-+-+--+
        +----+
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;&quot;what&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;is&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;this&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열 리터럴 입니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;code&gt;str[0]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[1]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[2]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 각각의 문자열 리터럴에 대한 포인터이며 다른 문자열을 가리킬 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러니, 이건 완벽하게 괜찮습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;str[i]=&quot;newstring&quot;; 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가정하에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;i&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1이니깐&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[1]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;포인터가 이제 문자열 리터럴을 가리킵니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;newstring&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;        +----+    +-+-+-+-+-+-+-+-+-+--+
  str[1]|    |---&amp;gt;|n|e|w|s|t|r|i|n|g|\0|
        |    |    +-+-+-+-+-+-+-+-+-+--+
        +----+
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 &lt;strong&gt;이렇게 해서&lt;/strong&gt;는 안됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;str[i][j]='j';
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;()&lt;/font&gt;&lt;/font&gt;&lt;code&gt;i=1&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;j=0&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,그렇게&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i][j]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 번째 문자열의 첫 번째 문자입니다.)&lt;/font&gt;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;표준에 따르면 문자열 리터럴을 수정하려고 하면 읽기 전용 저장소에 저장되거나 다른 문자열 리터럴과 결합될 수 있기 때문에 정의되지 않은 동작이 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C &lt;a href=&quot;http://port70.net/%7Ensz/c/c11/n1570.html#6.4.5p7&quot; rel=&quot;nofollow noreferrer&quot;&gt;표준 #6.4.5p7&lt;/a&gt;부터:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이러한 배열의 요소가 적절한 값을 갖는 경우 이들 배열이 구별되는지 여부는 지정되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로그램이 이러한 배열을 수정하려고 하면 동작이 정의되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;hr&gt; 
&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;추가:&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C 언어에는 네이티브 문자열 유형이 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C 언어에서 문자열은 &lt;a href=&quot;https://en.wikipedia.org/wiki/Null-terminated_string&quot; rel=&quot;nofollow noreferrer&quot;&gt;null-terminated&lt;/a&gt; 문자 &lt;a href=&quot;https://en.wikipedia.org/wiki/Null-terminated_string&quot; rel=&quot;nofollow noreferrer&quot;&gt;배열&lt;/a&gt;입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열과 포인터의 차이를 알아야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어레이, 포인터, 어레이 초기화에 대한 이해를 높이기 위해 다음을 읽어보시기 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열 초기화, &lt;a href=&quot;https://www.eskimo.com/%7Escs/cclass/notes/sx4aa.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;확인&lt;/a&gt;합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;포인터와 배열의 등가성, &lt;a href=&quot;http://c-faq.com/aryptr/aryptrequiv.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;이것&lt;/a&gt;과 &lt;a href=&quot;https://www.eskimo.com/%7Escs/cclass/notes/sx10e.html&quot; rel=&quot;nofollow noreferrer&quot;&gt;이것&lt;/a&gt;을 확인하세요.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;case 1 :&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char*str={&quot;what&quot;,&quot;is&quot;,&quot;this&quot;};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;먼저 위의 문장은 &lt;strong&gt;유효하지 않습니다&lt;/strong&gt;. 경고를 제대로 읽으십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 단일 포인터이며, 다음을 가리킬 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;single&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지 않을 때 한 번에 char 배열&lt;/font&gt;&lt;/font&gt;&lt;code&gt;multiple&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자 배열&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;bounity.c:3:2: warning: scalar initializer의 초과 요소 [기본적으로 활성화]&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char pointer&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 그것은 저장되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;section&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;RAM의 섹션이지만.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;contents&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에 저장됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;code(Can't modify the content&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;RAM의 섹션은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로 초기화됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;string(in GCC/linux)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;str[i&lt;/em&gt;]=&lt;em&gt;&quot;newstring&quot;;은 유효한 반면 str[i][j&lt;/em&gt;]='j';은&lt;em&gt; 유효&lt;/em&gt;하지 않습니다&lt;em&gt;.&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;str= &quot;new string&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;코드/읽기&lt;/strong&gt; 전용 섹션을 수정하지 않습니다. 여기서는 단순히 할당합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;new address&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇기 때문에 유효하지만.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;*str='j'&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[0][0]='j'&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;여기서 읽기&lt;/strong&gt; 전용 섹션을 수정하고 다음의 첫 글자를 변경하려고 &lt;strong&gt;하므로&lt;/strong&gt; 유효하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사례 2:&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;char str[][5]={&quot;what&quot;,&quot;is&quot;,&quot;this&quot;};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;2D&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열, 즉&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[0],str[1],str[2]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 자체가 저장됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;stack section&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RAM&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 말은 당신이 각각을 바꿀 수 있다는 것을 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[i]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내용물.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;str[i][j]='w';&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가능한 섹션 내용을 쌓기 위해 노력하고 있기 때문에 유효합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;str[i]= &quot;new string&quot;;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그건 불가능해요 왜냐하면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str[0]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열과 &lt;strong&gt;배열&lt;/strong&gt; 자체가 &lt;strong&gt;상수 포인터(주소를 변경할 &lt;/strong&gt;수 &lt;strong&gt;없음)&lt;/strong&gt;이므로 새 주소를 할당할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;단순히 &lt;strong&gt;첫번째 경우에&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt; &lt;code&gt;str=&quot;new string&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;valid&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;왜냐면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pointer&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 조금도 아닌&lt;/font&gt;&lt;/font&gt;&lt;code&gt;array&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 &lt;strong&gt;두번째 경우에는&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt; &lt;code&gt;str[0]=&quot;new string&quot;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;not valid&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;왜냐면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;array&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;한푼도&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pointer&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도움이 되었으면 좋겠습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/48315523/what-is-the-difference-between-charstr-foo-and-char-str5-foo&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>C</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/788</guid>
      <comments>https://codebag.tistory.com/788#entry788comment</comments>
      <pubDate>Sat, 4 Nov 2023 10:39:05 +0900</pubDate>
    </item>
    <item>
      <title>AngularJS - 경로를 기반으로 한 외부 JS의 동적 로딩</title>
      <link>https://codebag.tistory.com/787</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;AngularJS - 경로를 기반으로 한 외부 JS의 동적 로딩&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 여러 개의 보기와 각 보기를 제어할 수 있는 넥스트\백 버튼이 있는 간단한 한 페이지 모바일 앱을 만들려고 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 Angular Mobile UI 라이브러리를 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본 모형은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;link rel=&quot;stylesheet&quot; href=&quot;mobile-angular-ui/dist/css/mobile-angular-ui-base.min.css&quot;&amp;gt;
        &amp;lt;link rel=&quot;stylesheet&quot; href=&quot;mobile-angular-ui/dist/css/mobile-angular-ui-desktop.min.css&quot;&amp;gt;

        &amp;lt;script src=&quot;js/angular/angular.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
        &amp;lt;script src=&quot;js/angular/angular-route.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
        &amp;lt;script src=&quot;mobile-angular-ui/dist/js/mobile-angular-ui.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;

        &amp;lt;script src=&quot;app/app.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
        &amp;lt;script src=&quot;app/firstController.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
        &amp;lt;script src=&quot;app/secondController.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
        &amp;lt;script src=&quot;app/thirdController.js&quot;&amp;gt;&amp;lt;/script&amp;gt;

    &amp;lt;/head&amp;gt;

    &amp;lt;body ng-app=&quot;demo-app&quot;&amp;gt;
        &amp;lt;div ng-view&amp;gt;&amp;lt;/div&amp;gt;

        &amp;lt;div ng-controller=&quot;nextBackController&quot; class=&quot;navbar navbar-app navbar-absolute-bottom&quot;&amp;gt;
            &amp;lt;div class=&quot;btn-group justified&quot;&amp;gt;
              &amp;lt;a href=&quot;#/&quot; class=&quot;btn btn-navbar btn-icon-only&quot;&amp;gt;&amp;lt;i class=&quot;fa fa-home fa-navbar&quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;
              &amp;lt;a href=&quot;#/second&quot; class=&quot;btn btn-navbar btn-icon-only&quot;&amp;gt;&amp;lt;i class=&quot;fa fa-list fa-navbar&quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;
            &amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;

    &amp;lt;/body&amp;gt;


&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;App.js는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var app = angular.module('demo-app', [
  &quot;ngRoute&quot;,
  &quot;mobile-angular-ui&quot;
]);

app.config(function($routeProvider) {
  $routeProvider.when('/', { controller: &quot;firstController&quot;,
                             templateUrl: &quot;views/first.html&quot;});
  $routeProvider.when('/', { controller: &quot;secondController&quot;,
                             templateUrl: &quot;views/first.html&quot;});
  $routeProvider.when('/', { controller: &quot;thirdController&quot;,
                             templateUrl: &quot;views/first.html&quot;});
});

controllers = {};

controllers.nextBackController = function($scope, $rootScope) {
    //Simple controller for the next, back buttons so we just put it in app.js
};

app.controller(controllers);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;firstController.js에는 다음과 유사한 내용이 포함됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;controllers.firstController = function($scope) {
    //Do our logic here!!!
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제는 HTML 페이지 상단에 보시면 컨트롤러를 모두 로드해야 한다는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 확장성이 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용자가 해당 컨트롤러를 필요로 하지 않을 수도 있기 때문에 각 컨트롤러가 자체 JS 파일에 있고 각 컨트롤러를 정적으로 로드할 필요가 없기를 바랍니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;루트 전환 시 실제 JS 파일을 동적으로 로드할 수 있는 방법이 있습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면 제 &quot;first.html&quot;, &quot;second.html&quot; 등의 상단에 스크립트 태그를 붙여도 될까요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제대로 이해했다면 각 보기에 대한 특정 스크립트를 로드해야 합니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;주문 시 모듈을 로드하는 &lt;a href=&quot;https://github.com/ocombe/ocLazyLoad&quot; rel=&quot;nofollow noreferrer&quot;&gt;ocLazyLoader&lt;/a&gt; 플러그인을 사용하는 개인 프로젝트의 이 스니펫을 공유합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var myApp = angular.module(&quot;myApp&quot;, [
&quot;ui.router&quot;, 
&quot;oc.lazyLoad&quot;,  
]); 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 라우팅에서 동적 JS/CSS 파일을 그에 맞게 로드할 수 있습니다. 이 예에서는 UI Select 플러그인 의존성을 로드하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;myApp.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) {

$stateProvider

  // State
    .state('demo', {
        url: &quot;/demo.html&quot;,
        templateUrl: &quot;views/demo.html&quot;,
        data: {pageTitle: 'demo page title'},
        controller: &quot;GeneralController&quot;,
        resolve: {
            deps: ['$ocLazyLoad', function($ocLazyLoad) {
                return $ocLazyLoad.load([{
                    name: 'ui.select',
 // add UI select css / js for this state
                    files: [
                        'css/ui-select/select.min.css', 
                        'js/ui-select/select.min.js'
                    ] 
                }, {
                    name: 'myApp',
                    files: [
                        'js/controllers/GeneralController.js'
                    ] 
                }]);
            }]
        }
    })
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그룬트를 잘 알고 있다면:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/ericclemmons/grunt-angular-templates&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://github.com/ericclemmons/grunt-angular-templates&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 보기에서 하나의 .js를 만들려면 Grunt와 위 빌드 작업을 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;보기 디렉토리의 모든 html 파일 위에 watch task listener를 포함합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;부분 보기를 변경할 때마다 파일의 모든 html과 캐시 별칭을 지정하는 URL로 &quot;$templateCache&quot; 항목이 만들어집니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;경로는 동일한 방식으로 부분 보기를 가리키지만 HTML 파일이 존재할 필요는 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;템플릿이 있는 .js 파일만 해당됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것의 장점은 한 번 로드되고 전체 세션 동안 클라이언트 측에서 사용할 수 있다는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 http 호출이 줄어드므로 트래픽이 웹 서비스 호출로만 줄어들 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위의 github 링크의 템플릿 예는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;angular.module('app').run([&quot;$templateCache&quot;, function($templateCache) {
$templateCache.put(&quot;home.html&quot;,
// contents for home.html ...
);
...
$templateCache.put(&quot;src/app/templates/button.html&quot;,
// contents for button.html
);
}]);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그룬트를 잘 모르시면&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것을 확인해 보세요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;빌드, 소형화, 연결, 트랜스파일링 등을 자동화하는 데 매우 유용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://gruntjs.com/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://gruntjs.com/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의 앱이 &lt;strong&gt;&lt;em&gt;방대&lt;/em&gt;&lt;/strong&gt;하지 않다면, 당신은 작은 js 파일을 개별적으로 제공하는 것을 정말로 피해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 문제에서 제안한 대로 필요에 따라 파일을 가져오는 방법을 생각해 내더라도 앱 속도가 현저하게 느려집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;훨씬 더 나은 방법(그리고 Angular에서 사용하고 제안하는 방법)&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JS 팀)은 빌드 프로세스를 수행해야 합니다(사용해야 함).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;grunt&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이를 위해) 모든 javascript 파일을 연결하고 단일 app.js 파일로 제공합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 원하는 만큼의 작은 js 파일로 구성된 코드 베이스를 유지하면서 스크립트 가져오기를 단일 요청으로 줄일 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;OCLazyLoad 설치 방법&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1. ocLazyLoad.js 다운로드&lt;/font&gt;&lt;/strong&gt; &lt;a href=&quot;https://oclazyload.readme.io/docs&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;git 저장소의 'dist' 폴더에서 확인할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;를 사용하여 설치할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;bower install oclazyload&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm install oclazyload&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;2. oc.lazyLoad 모듈을 응용 프로그램에 추가합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;var myApp = angular.module(&quot;MyApp&quot;, [&quot;oc.lazyLoad&quot;]);&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;3. JS 파일을 경로에 따라 필요에 따라 로드합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    myApp.controller(&quot;MyCtrl&quot;, function($ocLazyLoad){
       $ocLazyLoad.load('testModule.js');
    }});`
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;와 함께&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$ocLazyLoad&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각도 모듈을 로드할 수 있지만 새 모듈을 정의하지 않고도 구성 요소(컨트롤러/서비스/필터/...)를 로드하려는 경우 완전히 가능합니다(기존 모듈 내에서 이 구성 요소를 정의했는지 확인하십시오).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용 방법은 여러 가지가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$ocLazyLoad&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일을 로드하려면 원하는 파일을 선택하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 시작하고 싶지만 문서가 충분하지 않다면 '예' 폴더의 예를 참조하십시오!&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://oclazyload.readme.io/docs&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;빠른 시작&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://requirejs.org&quot; rel=&quot;nofollow&quot;&gt;RequireJS&lt;/a&gt;는 이 경우에 매우 유용할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Require를 사용하여 JS 파일의 종속성을 선언할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JS.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 &lt;a href=&quot;http://javascriptplayground.com/blog/2012/07/requirejs-amd-tutorial-introduction/&quot; rel=&quot;nofollow&quot;&gt;간단한&lt;/a&gt; 자습서를 참고할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서 언급한 것처럼 &lt;a href=&quot;http://requirejs.org/&quot; rel=&quot;nofollow noreferrer&quot;&gt;RequireJS&lt;/a&gt;를 사용하는 것이 가장 좋은 방법이라고 생각합니다. &lt;a href=&quot;https://stackoverflow.com/questions/12529083/does-it-make-sense-to-use-require-js-with-angular-js&quot;&gt;Require.js를 Angular.js와 함께 사용하는 것이 말&lt;/a&gt;이 됩니까&lt;a href=&quot;https://stackoverflow.com/questions/12529083/does-it-make-sense-to-use-require-js-with-angular-js&quot;&gt;?&lt;/a&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 완전히 허용된 것이고 여러분이 시도하고 있는 것에 도달할 수 있게 해 줄 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 코드 예시가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/tnajdek/angular-requirejs-seed&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://github.com/tnajdek/angular-requirejs-seed&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;표준 각도에서 어떻게 작동하는지 잘 모르겠지만 angular-ui-router를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;컨트롤러는 필요에 따라 인스턴스화됩니다. 즉, 사용자가 URL을 통해 수동으로 상태로 이동할 때 $stateProvider가 올바른 템플릿을 뷰에 로드한 다음 컨트롤러를 템플릿의 범위에 바인딩합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/angular-ui/ui-router/wiki&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://github.com/angular-ui/ui-router/wiki&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/23656231/angularjs-dynamic-loading-of-external-js-based-on-routes&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>AngularJS</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/787</guid>
      <comments>https://codebag.tistory.com/787#entry787comment</comments>
      <pubDate>Sat, 4 Nov 2023 10:38:52 +0900</pubDate>
    </item>
    <item>
      <title>요소 텍스트를 기반으로 한 CSS 선택기?</title>
      <link>https://codebag.tistory.com/786</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요소 텍스트를 기반으로 한 CSS 선택기?&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;이 질문에는 이미 다음&lt;/b&gt;과 같은 &lt;b&gt;답변이 있습니다&lt;/b&gt;.&lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/1520429/is-there-a-css-selector-for-elements-containing-certain-text&quot; dir=&quot;ltr&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;특정 텍스트를 포함하는 요소에 대한 CSS 셀렉터가 있습니까?&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(21개 답변)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;닫힘&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;span class=&quot;relativetime&quot; title=&quot;2020-01-310 07:09:52Z&quot; papago-attr-id=&quot;1&quot;&gt;3년 전&lt;/span&gt;에.&lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요소 텍스트를 기반으로 CSS에서 요소를 선택하는 방법이 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;li[text=*foo]

&amp;lt;li&amp;gt;foo&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;bar&amp;lt;/li&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그건 아마 효과가 없을 겁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;편집: Chrome만 지원하면 됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 찾는 것이 정확하지 않다는 것을 알지만, 아마 당신에게 도움이 될 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery selector를 사용하고 클래스를 추가한 다음 클래스에 대해 일반 스타일을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CSS를 직접 사용하는 것이 아니라 내부 내용을 기반으로 자바스크립트를 통해 CSS 속성을 설정할 수 있지만 결국 CSS의 정의에 따라 동작해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아마 논의되었을 것입니다만, CSS3에서는 필요한 것과 같은 것이 없습니다(특정 &lt;a href=&quot;https://stackoverflow.com/questions/1520429/css-3-content-selector&quot;&gt;텍스트를 포함하는 요소에 대한 CSS 셀렉터가 있습니까&lt;/a&gt;?).&lt;a href=&quot;https://stackoverflow.com/questions/1520429/css-3-content-selector&quot;&gt;&lt;/a&gt;&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같이 추가 마크업을 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;li&amp;gt;&amp;lt;span class=&quot;foo&quot;&amp;gt;some text&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;some other text&amp;lt;/li&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그럼 통상적인 방법을 참고하세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;li &amp;gt; span.foo {...}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/5441680/css-selector-based-on-element-text&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>css</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/786</guid>
      <comments>https://codebag.tistory.com/786#entry786comment</comments>
      <pubDate>Sat, 4 Nov 2023 10:38:44 +0900</pubDate>
    </item>
    <item>
      <title>jQuery parent(), parent() 및 가장 가까운() 함수 간의 차이</title>
      <link>https://codebag.tistory.com/785</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery parent(), parent() 및 가장 가까운() 함수 간의 차이&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 한동안 jQuery를 사용했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 그것을 사용하고 싶었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;parent()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;선택자&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저도 생각해냈습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;closest()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;선택자&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;둘 사이의 차이를 찾을 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;있나요?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;만약 그렇다면, 뭐?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사이의 차이점은 무엇입니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;parent()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;parents()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;closest()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://api.jquery.com/closest/ 에서&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;.parent()&lt;/strong&gt; 및 &lt;strong&gt;.close()&lt;/strong&gt; 메서드는 둘 다 DOM 트리를 이동한다는 점에서 유사합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 둘 사이의 차이점은 미묘하기는 하지만 중요합니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.closest()&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 요소로 시작합니다.&lt;/font&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제공된 선택기와 일치하는 선택기를 찾을 때까지 DOM 트리 위로 이동합니다.&lt;/font&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;반환된 jQuery 개체에 0개 또는 하나의 요소가 포함되어 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;부모님들&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;상위 요소로 시작합니다.&lt;/font&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;DOM 트리를 문서의 루트 요소로 이동하여 각 상위 요소를 임시 컬렉션에 추가한 다음, 선택기를 기준으로 해당 컬렉션을 필터링합니다.&lt;/font&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;반환된 jQuery 개체에 0개, 1개 또는 여러 개의 요소가 포함되어 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.부모님&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;DOM 요소 집합을 나타내는 jQuery 객체가 주어지면 .parent() 메서드를 사용하면 DOM 트리에서 이러한 요소의 상위를 검색하고 일치하는 요소로부터 새로운 jQuery 객체를 구성할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참고:&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt; &lt;em&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.parent() 및 .parent() 메서드는 DOM 트리 위의 한 단계만 이동한다는 점을 제외하고는 비슷합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 $(&quot;html&quot;).parent() 메서드는 문서를 포함하는 집합을 반환하고 $(&quot;html&quot;).parent() 메서드는 빈 집합을 반환합니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;관련 스레드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/8975985/whats-the-difference-between-closest-and-parentsselector&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.close()와 .parent('selector')의 차이점은 무엇입니까?&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/a/2200805/149206&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://stackoverflow.com/a/2200805/149206&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt;&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://api.jquery.com/closest/&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;closest()&lt;/code&gt;&lt;/a&gt; 선택기와 일치하는 첫 번째 요소를 DOM 트리에서 위로 선택합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 요소에서 시작하여 위로 이동합니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://api.jquery.com/parent/&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;parent()&lt;/code&gt;&lt;/a&gt; DOM 트리에서 한 개의 요소(단일 레벨 업)를 선택합니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://api.jquery.com/parents/&quot; rel=&quot;noreferrer&quot;&gt;&lt;code&gt;parents()&lt;/code&gt;&lt;/a&gt; 메서드는 DOM 트리 위의 모든 일치 요소와 유사하지만 선택합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;상위 요소에서 시작하여 위로 이동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 둘 사이의 차이점은 미묘하기는 하지만 중요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;a href=&quot;http://api.jquery.com/closest/&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.closest()&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 요소로 시작합니다.&lt;/font&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제공된 선택기와 일치하는 선택기를 찾을 때까지 DOM 트리 위로 이동합니다.&lt;/font&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;반환된 jQuery 개체에 0개 또는 하나의 요소가 포함되어 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;a href=&quot;http://api.jquery.com/parents/&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;부모님들&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;상위 요소로 시작합니다.&lt;/font&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;DOM 트리를 문서의 루트 요소로 이동하여 각 상위 요소를 임시 컬렉션에 추가한 다음, 선택기를 기준으로 해당 컬렉션을 필터링합니다.&lt;/font&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;반환된 jQuery 개체에 0개, 1개 또는 여러 개의 요소가 포함되어 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery &lt;a href=&quot;http://api.jquery.com/closest/&quot; rel=&quot;noreferrer&quot;&gt;문서&lt;/a&gt;에서 온 문서&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;둘 다 차이가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(this).closest('div')&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(this).parents('div').eq(0)&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본적으로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;closest&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;현재 요소에서 일치 요소를 시작합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;parents&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;상위 요소에서 일치 요소 시작(현재 요소보다 한 단계 위)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://jsfiddle.net/imrankabir/c1jhocre/1/ 참조&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;$(this).closest('div')&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;와 같은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(this).parents('div').eq(0)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;parent()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;method는 선택한 요소의 직접 부모 요소를 반환합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 메서드는 DOM 트리 위의 &lt;strong&gt;단일&lt;/strong&gt; 레벨에서만 이동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;parents()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;메서드를 사용하면 DOM 트리에서 &lt;strong&gt;이러한&lt;/strong&gt; 요소의 조상을 검색할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;주어진 셀렉터에서 시작하여 위로 이동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;The **.parents()** and **.parent()** methods are almost similar, except that the latter only travels a single level up the DOM tree. Also, **$( &quot;html&quot; ).parent()** method returns a set containing document whereas **$( &quot;html&quot; ).parents()** returns an empty set.

[closest()][3]method returns the first ancestor of the selected element.An ancestor is a parent, grandparent, great-grandparent, and so on.

This method traverse upwards from the current element, all the way up to the document's root element (&amp;lt;html&amp;gt;), to find the first ancestor of DOM elements.

According to docs:

**closest()** method is similar to **parents()**, in that they both traverse up the DOM tree. The differences are as follows:

**closest()**

Begins with the current element
Travels up the DOM tree and returns the first (single) ancestor that matches the passed expression
The returned jQuery object contains zero or one element

**parents()**

Begins with the parent element
Travels up the DOM tree and returns all ancestors that matches the passed expression
The returned jQuery object contains zero or more than one element





 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/9193212/difference-between-jquery-parent-parents-and-closest-functions&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>jQuery</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/785</guid>
      <comments>https://codebag.tistory.com/785#entry785comment</comments>
      <pubDate>Sat, 4 Nov 2023 10:38:37 +0900</pubDate>
    </item>
    <item>
      <title>이전 커밋이 아닌 커밋 수정</title>
      <link>https://codebag.tistory.com/784</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이전 커밋이 아닌 커밋 수정&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;이 질문에는 이미 다음&lt;/b&gt;과 같은 &lt;b&gt;답변이 있습니다&lt;/b&gt;.&lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/1186535/how-do-i-modify-a-specific-commit&quot; dir=&quot;ltr&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;특정 커밋을 수정하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(19개 답변)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;닫힘&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;span class=&quot;relativetime&quot; title=&quot;2014-08-05 06:00:10Z&quot; papago-attr-id=&quot;1&quot;&gt;9년 전&lt;/span&gt;에.&lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;종종 다음과 같은 워크플로우를 경험하게 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일 그룹에 변경사항 커밋&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 파일 그룹에 변경 커밋&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;첫 번째 커밋에 포함된 몇 가지 변경 사항을 놓쳤음을 깨닫습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저주&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;못쓰겠어요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git commit --amend&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내가 바꿀 필요가 있는 가장 최근의 약속이 아니기 때문입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 &lt;strong&gt;번째 커밋을 터치하지 않고&lt;/strong&gt; 첫 번째 커밋에 변경 사항을 추가하는 가장 좋은 방법은 무엇입니까&lt;strong&gt;?&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용가능&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git rebase&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 문제를 해결하기 위해서요&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git rebase -i sha1~1&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서 sha1은 변경하려는 것의 커밋 해시입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;변경할 커밋을 찾은 후, 기본 편집기의 주석에 설명된 대로 &quot;pick&quot;을 &quot;edit&quot;으로 바꿉니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서 계속 진행하면 해당 커밋을 편집할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 해당 커밋의 sha1과 모든 하위 항목이 변경됩니다. 즉, 해당 시점 이후부터 기록을 다시 작성합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 저장소가 깨질 수 있지만, 밀어주지 않았다면 별 문제가 아닙니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/3926768/amend-a-commit-that-wasnt-the-previous-commit&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>GIT</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/784</guid>
      <comments>https://codebag.tistory.com/784#entry784comment</comments>
      <pubDate>Sat, 4 Nov 2023 10:38:30 +0900</pubDate>
    </item>
    <item>
      <title>C에서 런타임에 매크로 변경</title>
      <link>https://codebag.tistory.com/783</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C에서 런타임에 매크로 변경&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;매크로를 정의했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 이 값은 조건에 따라 런 타임에 변경해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떻게 구현할 수 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;매크로는 소스 파일이 컴파일하기도 전에 값에 따라 전처리기로 대체됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실행 시 매크로 값을 변경할 수 있는 방법은 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여러분이 이루고자 하는 목표에 대해 조금만 더 설명해 주신다면 틀림없이 매크로를 포함하지 않은 다른 문제 해결 방법이 있을 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;매크로 자체를 변경할 수는 없지만 매크로를 포함하는 &lt;em&gt;식&lt;/em&gt;의 값을 변경할 수도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아주 어리석은 예를 들자면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;

#define UNCHANGEABLE_VALUE 5
#define CHANGEABLE_VALUE foo

int foo = 5;

int main() {
    printf(&quot;%d %d\n&quot;, UNCHANGEABLE_VALUE, CHANGEABLE_VALUE);
    CHANGEABLE_VALUE = 10;
    printf(&quot;%d %d\n&quot;, UNCHANGEABLE_VALUE, CHANGEABLE_VALUE);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 질문에 대한 답은 매크로를 사용하는 코드에 변경 내용이 어떤 영향을 미치기를 원하느냐에 따라 달라집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;물론이야.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;5&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;는 컴파일 시간 상수인 반면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;foo&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇지 않아요, 그러니 당신이 사용할 계획이라면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CHANGEABLE_VALUE&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;case&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;라벨이든 뭐든.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C 소스 번역에는 두 단계(사실 더 많은)가 있다는 것을 기억하세요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;처음에는 매크로가 확장됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 모든 것이 끝나면, 프로그램은 5.1.1.2/2의 표현대로 &quot;동사적으로 그리고 의미적으로 분석&quot;됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 두 단계는 종종 &quot;사전 처리&quot;와 &quot;컴플리케이션&quot;이라고 불립니다. (모호하게도 번역의 전체 과정은 종종 &quot;컴플리케이션&quot;이라고도 합니다.)&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 작업을 수행하기 전에 &quot;컴파일러&quot;가 필요에 따라 &quot;프리프로세서&quot;를 실행하는 별도의 프로그램으로 구현할 수도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 런타임은 매크로의 확장 범위를 변경하기에는 너무 늦습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그럴수는 없어요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;매크로는 코드가 컴파일되기도 전에 발생하는 &lt;a href=&quot;http://en.wikipedia.org/wiki/C_preprocessor&quot;&gt;Preprocessor&lt;/a&gt;에 의해 확장됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 순수하게 텍스트로 대체된 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;런타임에 변경해야 할 사항이 있으면 매크로를 실제 함수 호출로 대체하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그럴수는 없어요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;매크로는 컴파일 자체 전에 전처리기에 의해 해결되므로, 매크로 내용은 사용자가 사용하는 곳에 직접 복사됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래도 매개변수를 사용하여 원하는 조건문을 삽입하거나 호출 범위 접근 가능 변수를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;단일 값을 변경하려면 글로벌 스코프 변수를 사용하는 것이 좋습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(macro의 집중적인 사용으로)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하고 싶은 일에 따라 여러 가지 방법으로 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;매크로 대신 전역 변수&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// someincludefile.h
extern static int foo;

// someincludefile.c
static int foo = 5;

// someotherfile.c
#include &quot;someincludefile.h&quot;
printf(&quot;%d\n&quot;, foo); // &amp;gt;&amp;gt; 5
foo = -5;
printf(&quot;%d\n&quot;, foo); // &amp;gt;&amp;gt; -5
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;토글할 수 있는 조건&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// someincludefile.h
extern static int condition;
#define FOO1 (5)
#define FOO2 (-5)
#define FOO (condition ? (FOO1) : (FOO2))

// someincludefile.c
static int condition = 1;

// someotherfile.c
#include &quot;someincludefile.h&quot;
printf(&quot;%d\n&quot;, FOO); // &amp;gt;&amp;gt; 5
condition = 0;
printf(&quot;%d\n&quot;, FOO); // &amp;gt;&amp;gt; -5
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로컬 및 동적으로 평가되는 상태&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// someincludefile.h
#define CONDITION (bar &amp;gt;= 0)
#define FOO1 (5)
#define FOO2 (-5)
#define FOO ((CONDITION) ? (FOO1) : (FOO2))

// someotherfile.c
#include &quot;someincludefile.h&quot;
int bar = 1;
printf(&quot;%d\n&quot;, FOO); // &amp;gt;&amp;gt; 5
bar = -1;
printf(&quot;%d\n&quot;, FOO); // &amp;gt;&amp;gt; -5
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마지막 하나에서는 코드가 로컬 범위에 있는 것처럼 조건이 평가되므로 로컬 변수 및/또는 매개 변수를 사용할 수 있지만 원하는 경우 전역 변수를 사용할 수도 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/7572872/changing-a-macro-at-runtime-in-c&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>C</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/783</guid>
      <comments>https://codebag.tistory.com/783#entry783comment</comments>
      <pubDate>Sat, 4 Nov 2023 10:38:24 +0900</pubDate>
    </item>
    <item>
      <title>&amp;quot;WARn Can't can't decision-length of response body&amp;quot;는 무엇을 의미하며 어떻게 제거해야 합니까?</title>
      <link>https://codebag.tistory.com/782</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;WARn Can't can't decision-length of response body&quot;는 무엇을 의미하며 어떻게 제거해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Rails 3.1로 업그레이드한 후 개발 로그에 다음과 같은 경고 메시지가 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;경고 응답 본문의 내용 길이를 확인할 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;응답 또는 집합의 내용 길이 설정&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Response#chunked = true&lt;/code&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 무엇을 의미하며 어떻게 제거할 수 있습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그게 문제야?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Rails-Core의 멤버 중 한 명에게도 같은 질문을 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://twitter.com/luislavena/status/108998968859566080&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://twitter.com/luislavena/status/108998968859566080&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 대답은:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://twitter.com/tenderlove/status/108999110136303617&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;https://twitter.com/tenderlove/status/108999110136303617&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;네, 괜찮습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;치워야 하는데 다친 데는 없어요.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;다음 패치&lt;/strong&gt;를 통해 제 &lt;strong&gt;경우의 문제&lt;/strong&gt;가 해결되었습니다. 더 이상 경고는 하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://bugs.ruby-lang.org/attachments/2300/204_304_keep_alive.patch&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;204_ 304_ alive 유지&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위의 링크와 같이 205번 줄에서 httpresponse.rb 파일을 편집하면 됩니다. 실제로 링크는 향후 Ruby 릴리스에 대한 수정 사항을 보여줍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;RVM을 통해 설치된 루비 1.9.3-p0의 레일 3.2.0을 단일 사용자로 사용하고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그럼 제 사건의 위치는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;~/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpresponse.rb
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;변경할 파일의 위치는 설치 유형, RVM 여부 또는 다중 사용자 또는 단일 사용자에 따라 다르므로 마지막 부분만 설명합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.../ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpresponse.rb
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 이것이 누군가에게 도움이 될 수 있기를 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;편집: 루비 프로젝트의 트렁크 브랜치에서 문제의 행을 변경한 커밋에 대한 &lt;a href=&quot;https://github.com/ruby/ruby/commit/0cbec6027cfb755972f80aab57920008d50fe842&quot; rel=&quot;noreferrer&quot;&gt;링크&lt;/a&gt;입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;젬 파일에 젬을 명시적으로 추가하기만 해도 경고 메시지가 사라졌습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;group :development do
  gem 'webrick', '~&amp;gt; 1.3.1'
end
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본 Webrick 대신 Thin을 사용할 수도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;추가할 위치&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Gemfile&lt;/code&gt; &lt;code&gt; gem 'thin' &lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고나서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rails s thin&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;얇은 두께를 사용하고 경고는 사라집니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.rvm을 사용하는 경우 이 작업을 수행하여 수정합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;주앙 소아레스&lt;/em&gt;가 언급한 바와 같이, 모두 그의 공로입니다. 이것은 개발에 대한 경고를 없애고 싶지 않다면 할 수 있는 일입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즐겨찾기 편집기를 사용하여 이 파일을 엽니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;~/.rvm/rubies/&amp;lt;ruby-version&amp;gt;/lib/ruby/1.9.1/webrick/httpresponse.rb
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 내용이 포함된 줄로 이동합니다(나에게는 정말 206 줄이었습니다).&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;if chunked? || @header['content-length']
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://bugs.ruby-lang.org/attachments/2300/204_304_keep_alive.patch&quot; rel=&quot;noreferrer&quot;&gt;이 패치&lt;/a&gt;에서 가져온 것을 다음으로 변경합니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;if chunked? || @header['content-length'] || @status == 304 || @status == 204
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일을 저장한 후 레일 서버를 다시 시작합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 문제는 webbrick에 대한 이 &lt;a href=&quot;https://github.com/ruby/ruby/commit/0cbec6027cfb755972f80aab57920008d50fe842&quot; rel=&quot;nofollow&quot;&gt;커밋&lt;/a&gt;으로 Ruby의 트렁크 지점에서 해결되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;설정에서 이 특정 webbrick 파일을 유사하게 편집할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대략적인 위치는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;gem which webrick
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일을 실제로 편집하려면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;nano \`ruby -e&quot;print %x{gem which webrick}.chomp %Q{.rb\n}&quot;\`/httpresponse.rb
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(또는 nano 대신 좋아하는 편집기를 사용합니다.)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JRuby 버전:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.rvm을 사용하는 경우 이 작업을 수행하여 수정합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;em&gt;Jooo Soares&lt;/em&gt;와 &lt;em&gt;Kjellski&lt;/em&gt;가 언급한 것처럼, 이것은 개발에 대한 이 경고를 없애고 싶고 JRuby를 사용하고 있다면 할 수 있는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즐겨찾기 편집기를 사용하여 이 파일을 엽니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;~/.rvm/rubies/jruby-&amp;lt;version&amp;gt;/lib/ruby/&amp;lt;1.8 or 1.9&amp;gt;/webrick/httpresponse.rb
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 내용이 포함된 줄로 이동(저는 205번 줄이었습니다):&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;if chunked? || @header['content-length']
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://bugs.ruby-lang.org/attachments/2300/204_304_keep_alive.patch&quot;&gt;이 패치&lt;/a&gt;에서 가져온 것을 다음으로 변경합니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;if chunked? || @header['content-length'] || @status == 304 || @status == 204
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일을 저장한 후 레일 서버를 다시 시작합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위브릭에서 불쾌감을 주는 라인을 제거하는 또 다른 해결책입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;별로 유용하지 않을 뿐입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cd `which ruby`/../../lib/ruby/1.9.1/webrick/ &amp;amp;&amp;amp; sed -i '.bak' -e'/logger.warn/d' httpresponse.rb
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(필요할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sudo&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;더하다&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;config.middleware.use Rack::ContentLength
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신에게&lt;/font&gt;&lt;/font&gt;&lt;code&gt;application.rb&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일을 작성하면 경고는 webbrick을 사용해도 사라집니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것 또한 설정됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Content-Length&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;json 또는 text response를 렌더링할 때 적절하게 제작 중입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/7082364/what-does-warn-could-not-determine-content-length-of-response-body-mean-and-h&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>ruby</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/782</guid>
      <comments>https://codebag.tistory.com/782#entry782comment</comments>
      <pubDate>Sat, 4 Nov 2023 10:38:16 +0900</pubDate>
    </item>
    <item>
      <title>전원 셸 및 오류 ConvertTo-SecureString : 키가 지정된 상태에서 사용할 수 없도록 유효하지 않음을 사용하여 재사용을 위한 자격 증명 저장</title>
      <link>https://codebag.tistory.com/781</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전원 셸 및 오류 ConvertTo-SecureString : 키가 지정된 상태에서 사용할 수 없도록 유효하지 않음을 사용하여 재사용을 위한 자격 증명 저장&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Invoke-command: http://blogs.technet.com/b/robcost/archive/2008/05/01/powershell-tip-storing-and-using-password-credentials.aspx 을 통해 원격 PS 스크립트를 실행하기 위해 자동화된 프로세스가 사용할 수 있도록 보안 파일에 자격 증명을 저장하기 위해 이 게시물에 설명된 것과 같은 작업을 수행하고 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;암호화된 파일에서 암호가 읽혀지고 Invoke-command로 전달되며 모든 것이 정상입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크립트가 황금 시간대에 준비되었을 때, 자동화된 프로세스에서 사용할 Windows 계정으로 스크립트를 실행하려고 시도했지만 스크립트가 파일에서 보안 암호를 읽으려고 하는 동안 아래와 같은 오류가 발생했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ConvertTo-SecureString : Key not valid for use in specified state.
At \\remoted\script.ps1:210 char:87
+ $password = get-content $PathToFolderWithCredentials\pass.txt | convertto-sec
urestring &amp;lt;&amp;lt;&amp;lt;&amp;lt;
    + CategoryInfo          : InvalidArgument: (:) [ConvertTo-SecureString], C
   ryptographicException
    + FullyQualifiedErrorId : ImportSecureString_InvalidArgument_Cryptographic
   Error,Microsoft.PowerShell.Commands.ConvertToSecureStringCommand
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 동료에게 계정으로 실행해달라고 요청했는데도 같은 오류가 발생했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자격 증명을 저장하기 위해 사용하는 코드입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$PathToFolderWithCredentials = &quot;\\path\removed&quot;

write-host &quot;Enter login as domain\login:&quot;
read-host | out-file $PathToFolderWithCredentials\login.txt

write-host &quot;Enter password:&quot;
read-host -assecurestring | convertfrom-securestring | out-file $PathToFolderWithCredentials\pass.txt

write-host &quot;*** Credentials have been saved to $pathtofolder ***&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Invoke-command에서 사용할 스크립트를 읽기 위해 자동화된 프로세스에 의해 실행되는 스크립트의 코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$login= get-content $PathToFolderWithCredentials\login.txt
$password = get-content $PathToFolderWithCredentials\pass.txt | convertto-securestring
$credentials = new-object -typename System.Management.Automation.PSCredential -argumentlist $login,$password
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;$password = get-content $PathToFolderWithCredentials\pass에서 오류가 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;txt | 보안 문자열로 변환&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;무슨 생각 있어요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동일한 컴퓨터에 암호 문자열을 만들고 이 문자열을 실행하는 데 사용할 로그인을 사용해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;ConvertFrom-SecureString&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Key&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(그리고&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SecureKey&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;) 파라미터.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;암호화된 표준 문자열을 저장할 키를 지정한 다음 키를 다시 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ConvertTo-SecureString&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 계정에 관계없이 보안 문자열을 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://technet.microsoft.com/en-us/library/dd315356.aspx&quot; rel=&quot;noreferrer&quot; papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://technet.microsoft.com/en-us/library/dd315356.aspx&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트에서, 나는 사람들이 공개 키를 사용하여 비밀번호를 암호화하고 자동화 프로세스는 비밀번호를 해독하는 개인 키를 가지는 비대칭 암호화를 구현했습니다: &lt;a href=&quot;https://stackoverflow.com/q/6133988/526535&quot; papago-id=&quot;15-1&quot;&gt;자동 배포를 위해 프로덕션 구성에서 비밀번호 처리&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래에서는 자격 증명을 파일로 저장한 다음 다른 사용자가 원격으로 실행 중인 다른 스크립트에서 해당 자격 증명을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드는 데이비드 리가 제작한 훌륭한 기사에서 가져온 것으로, 제 자신으로부터 약간의 수정만 받은 것입니다. https://blog.kloud.com.au/2016/04/21/using-saved-credentials-securely-in-powershell-scripts/&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 단계는 AES를 사용하여 파일에 보안 암호를 저장하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 독립 실행형 스크립트로 실행됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;            # Prompt you to enter the username and password
            $credObject = Get-Credential

            # The credObject now holds the password in a ‘securestring’ format
            $passwordSecureString = $credObject.password

            # Define a location to store the AESKey
            $AESKeyFilePath = “aeskey.txt”
            # Define a location to store the file that hosts the encrypted password
            $credentialFilePath = “credpassword.txt”

            # Generate a random AES Encryption Key.
            $AESKey = New-Object Byte[] 32
            [Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($AESKey)

            # Store the AESKey into a file. This file should be protected! (e.g. ACL on the file to allow only select people to read)

            Set-Content $AESKeyFilePath $AESKey # Any existing AES Key file will be overwritten

            $password = $passwordSecureString | ConvertFrom-SecureString -Key $AESKey

            Add-Content $credentialFilePath $password
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 자격 증명을 사용해야 하는 스크립트에서 다음을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;            #set up path and user variables
            $AESKeyFilePath = “aeskey.txt” # location of the AESKey                
            $SecurePwdFilePath = “credpassword.txt” # location of the file that hosts the encrypted password                
            $userUPN = &quot;domain\userName&quot; # User account login 

            #use key and password to create local secure password
            $AESKey = Get-Content -Path $AESKeyFilePath 
            $pwdTxt = Get-Content -Path $SecurePwdFilePath
            $securePass = $pwdTxt | ConvertTo-SecureString -Key $AESKey

            #crete a new psCredential object with required username and password
            $adminCreds = New-Object System.Management.Automation.PSCredential($userUPN, $securePass)

            #use the $adminCreds for some task
            some-Task-that-needs-credentials -Credential $adminCreds
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 비밀번호 파일과 키 파일에 접근할 수 있다면 사용자의 비밀번호를 해독할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 다른 접근 방식은 ConvertFrom-SecureString에서 사용되는 'CurrentUser' 대신 스코프 'LocalMachine'을 사용하여 데이터를 보호하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static string Protect(SecureString input, DataProtectionScope dataProtectionScope = DataProtectionScope.CurrentUser, byte[] optionalEntropy = null)
{
    byte[] data = SecureStringToByteArray(input);
    byte[] data2 = ProtectedData.Protect(data, optionalEntropy, dataProtectionScope);
    for (int i = 0; i &amp;lt; data.Length; i++)
    {
        data[i] = 0;
    }

    return ByteArrayToString(data2);
}
private static byte[] SecureStringToByteArray(SecureString s)
{
    var array = new byte[s.Length * 2];
    if (s.Length &amp;gt; 0)
    {
        IntPtr intPtr = Marshal.SecureStringToGlobalAllocUnicode(s);
        try
        {
            Marshal.Copy(intPtr, array, 0, array.Length);
        }
        finally
        {
            Marshal.FreeHGlobal(intPtr);
        }
    }

    return array;
}
private static string ByteArrayToString(byte[] data)
{
    var stringBuilder = new StringBuilder();
    for (int i = 0; i &amp;lt; data.Length; i++)
    {
        stringBuilder.Append(data[i].ToString(&quot;x2&quot;, CultureInfo.InvariantCulture));
    }

    return stringBuilder.ToString();
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;암호화된 문자열은 스코프 'CurrentUser'를 사용하는 ConvertTo-SecureString에서 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자격 증명을 사용할 N명의 사용자(예: 한 개발자)의 알려진 목록이 있다고 가정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;userMe&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템/서비스 사용자&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;userSys&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(해당 사용자에게) N개의 복사본을 만들 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pass.txt&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일: 각 사용자마다 하나씩.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 비밀번호가.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;userX&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 들어 2어 2가 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;*.pass.txt&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;userX.userMe.pass.txt&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;userX.userSys.pass.txt&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;userMe가 읽은 크레딧을 원할 때&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;userX.userMe.pass.txt&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;타&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/7109958/saving-credentials-for-reuse-by-powershell-and-error-convertto-securestring-ke&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>PowerShell</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/781</guid>
      <comments>https://codebag.tistory.com/781#entry781comment</comments>
      <pubDate>Mon, 30 Oct 2023 20:58:32 +0900</pubDate>
    </item>
    <item>
      <title>C의 함수명은 어떤 타입입니까?</title>
      <link>https://codebag.tistory.com/780</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C의 함수명은 어떤 타입입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;이 질문에는 이미 다음&lt;/b&gt;과 같은 &lt;b papago-id=&quot;1-1&quot;&gt;답변이 있습니다&lt;/b&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/12259101/why-is-the-size-of-a-function-in-c-always-1-byte&quot; dir=&quot;ltr&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C의 함수 크기가 항상 1바이트인 이유는 무엇입니까?&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(4개 답변)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;닫힘&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;4-1&quot; title=&quot;2013-09-16 11:34:00Z&quot; papago-attr-id=&quot;1&quot;&gt;9년 전&lt;/span&gt;에.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;   &lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C에서는 항상 이해했어요&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;func&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;amp;func&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동등했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘 다 제 Win64 시스템에서 8바이트인 타입 포인터여야 한다고 생각합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 저는 그냥 이것을 시도해 보았습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;

int func(int x, int y)
{
    printf(&quot;hello\n&quot;);
}

int main()
{
    printf(&quot;%d, %d\n&quot;, sizeof(&amp;amp;func), sizeof(func));
    return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 그 결과를 기대하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;8, 8&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것을 받고 놀랐습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;8, 1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜 이러한가?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;정확히 어떤 &lt;em papago-id=&quot;11-1&quot;&gt;유형&lt;/em&gt;이.&lt;/font&gt;&lt;/font&gt; &lt;code&gt;func&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;? 그것은 타입인 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;혹은 그에 상응하는 것.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이게 무슨 일입니까?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 정리를 해봤습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gcc -std=c99&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변화가 생긴다면요&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p&gt;&lt;em papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C의 함수명은 어떤 타입입니까?&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수 이름 또는 &lt;em papago-id=&quot;18-1&quot;&gt;함수 지정자&lt;/em&gt;가 함수 유형을 갖습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;식에 사용되는 경우, 피연산자인 경우를 제외하고&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;amp;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;연산자, &quot;함수 &lt;em papago-id=&quot;20-1&quot;&gt;복귀형&lt;/em&gt;&quot;에서 &quot;함수 복귀형&quot;으로 변환됩니다. (이는 C99, 6.3.2.1p4에 명시되어 있습니다.)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금이다&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;sizeof(func)&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유효하지 않은 CAS&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수 유형의 피연산자에서는 사용할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 의 제약 조건에 명시되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;연산자:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(C99, 6.5.3.4p1 제약 조건) &quot;연산자의 크기는 함수형 또는 불완전한 형식을 갖는 표현, 그러한 형식의 괄호가 쳐진 이름 또는 비트 필드 멤버를 지정하는 표현에 적용되지 않아야 합니다.&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지만&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;sizeof(func)&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 GNUC에서 허용됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; C  는 GNU  GNU  는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수 유형 수율의 피연산자로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;6.23 빈 점과 함수 점의 산술&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[...] 크기는 void 및 함수 유형에서도 허용되며 1을 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;a href=&quot;http://gcc.gnu.org/onlinedocs/gcc/Pointer-Arith.html&quot; papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://gcc.gnu.org/onlinedocs/gcc/Pointer-Arith.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주어진:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int func(int x, int y) { /* ... */ }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어투, 어투, 어법&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;func&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 함수형입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구체적으로 말하자면, 그 유형은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int(int, int)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 이것은 타입 &quot;함수&quot;에 대한 C의 구문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매개 변수 반환&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 구문은 볼 수 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; (함수 유형을 직접 참조하는 것은 일반적이지 않기 때문에 해당 구문은 자주 볼 수 없습니다.)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;40-1&quot;&gt;대부분&lt;/em&gt;의 컨텍스트에서 함수 유형의 표현은 함수에 대한 포인터로 암묵적으로 변환됩니다. 이 경우 포인터는 유형입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int(*)(int, int)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 암묵적 변환이 &lt;em papago-id=&quot;42-1&quot;&gt;발생&lt;/em&gt;하지 않는 컨텍스트는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;식이 단항의 피연산자일 때&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;amp;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;; 그 경우에는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;amp;func&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 함수의 주소를 산출합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;func&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 자체로는 보통 &lt;em papago-id=&quot;31-1&quot;&gt;그렇습니다&lt;/em&gt;); 그리고&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;표현이 다음의 피연산자일 때&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 이 예외를 제외하면,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof func&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수 포인터의 크기를 산출합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 &lt;em papago-id=&quot;34-1&quot;&gt;제약&lt;/em&gt; 조건 &lt;em papago-id=&quot;34-1&quot;&gt;위반&lt;/em&gt;이므로 컴파일러의 진단이 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;(&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;: &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt; 호출에 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;될 때 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 변환은 함수 이름이 함수 호출에 사용될 때 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;operator&quot; (표준에서는 그렇게 부르지 않음)는 포인터-투-함수 타입의 접두사를 필요로 합니다.)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;gcc에는 비표준 확장자가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 함수 포인터와 유형에 대한 포인터 산술을 허용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;void*&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 포인터 산술처럼 행동하기&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char*&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포인터(즉, 바이트 단위로 동작함).&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안타깝게도 IMHO, gcc는 kludge를 통해 함수의 종류와 종류를 설정하여 이 작업을 하였습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;void&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 얻는 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof func == 1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;; 표준 적합 모드 중 하나를 활성화하는 경우(예:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gcc -std=c99 -pedantic&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;), 경고를 받습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부수적으로, 사용하지 마십시오.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;%d&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과를 인쇄하다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유형의 결과를 가져옵니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;size_t&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 구현에서 지원하는 경우(C99 이상),&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;%zu&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;; 그렇지 않다면, 당신은 명시적으로 변환하기 위해 깁스를 사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;size_t&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인쇄할 수 있는 가치가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;printf(&quot;%lu\n&quot;, (unsigned long)sizeof &amp;amp;func);
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt; 
 &lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C의 함수명은 어떤 타입입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;66-1&quot;&gt;기능적&lt;/strong&gt;인 타입입니다&lt;strong papago-id=&quot;66-1&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C에서는 항상 이해했어요&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;func&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;51&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;amp;func&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동치였습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;글쎄, 그것들은 &quot;동등한&quot; 것이 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 함수는 포인터 대 함수로 &lt;strong papago-id=&quot;70-1&quot;&gt;붕괴&lt;/strong&gt;됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 사람이 모두 포인터 타입이어야 한다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 잘못된 가정입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 출력을 8로 예상하고 8을 1로 예상하고는 깜짝 놀랐습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜 이러한가?&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜냐하면 1. 컴파일을 하면 UB이기 때문이고 2. 애초에 컴파일을 해서는 안되며 따라서 당신의 프로그램은 무엇이든 자유롭게 할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이름에 C에 형식이 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 종류의 이름은 유형의 ef 이름, 개체 또는 함수와 같이 유형이 있는 개체를 나타냅니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 종류의 이름은 전처리기 기호나 같은 종류가 없는 개체를 나타냅니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;goto&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;표식들&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 다른 종류의 이름들은 단순히 유형들 그 자체를 나타냅니다, 즉.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;typedef&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;55&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이름들&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;78&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수의 이름은 함수 유형을 가진 개체를 의미합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;해당 함수 유형에는 반환 유형과 매개 변수에 대한 (불완전한) 정보가 포함됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수를 값으로 사용하면 항상 포인터 대 함수 유형으로 조작됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이와 같은 기능은 휴대용 C 프로그램에서는 전달할 수 없지만, 기능에 대한 포인터는 전달할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;56&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;개념적으로, 심지어 직접적인 전화에서도&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;foo()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;57&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 무슨 일이 있냐면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;foo&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;58&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 함수를 나타내는 표현은 평가 시 함수에 대한 포인터 값으로 암묵적으로 변환됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;59&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수 호출 후 수정 연산자는 이 포인터를 통해 함수를 호출합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;60&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수 유형을 가진 식을 사용하여 포인터 값을 생성하는 규칙이 있습니다. 단, 해당 수식이 다음의 피연산자인 경우는 &lt;strong papago-id=&quot;60-1&quot;&gt;예외&lt;/strong&gt;입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;amp;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;61&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; )&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;62&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;교환입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;func&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;63&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;amp;func&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;64&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동일한 값을 산출한다는 점에서만 동등합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;func&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;65&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은(는) 암시적으로 포인터 값을 생성합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;amp;func&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;66&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포인터의 암시적 생성을 억제합니다(&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;func&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;67&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 피연산자입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;amp;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;68&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 변환이 억제됩니다.) 하지만,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;amp;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;69&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주소를 가져옵니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;70&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 볼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof &amp;amp;func&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;71&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof func&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;72&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다릅니다.&lt;/font&gt; &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;포인터의 크기를 사용하고 후자는 함수의 크기를 사용하려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전자는 포인터의 크기를 사용하고 후자는 함수의 크기를 사용하려고 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;73&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수의 크기를 취하는 것은 C의 제약 조건 위반입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 표준을 준수하는 구현에서 진단을 받아야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로그램이 여전히 번역되고 값이 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;74&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행 시 생성되며, 이는 사용자 언어 구현에 특정한 &quot;bonus&quot; 동작입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;표준어로 되어 있지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;99&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/18816907/what-type-is-a-function-name-in-c&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>C</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/780</guid>
      <comments>https://codebag.tistory.com/780#entry780comment</comments>
      <pubDate>Mon, 30 Oct 2023 20:58:24 +0900</pubDate>
    </item>
    <item>
      <title>jQuery에서 숫자에 쉼표를 더합니다.</title>
      <link>https://codebag.tistory.com/779</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery에서 숫자에 쉼표를 더합니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 번호를 가지고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;10999&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;8094&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;456&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 원하는 것은 쉼표가 필요할 경우 적절한 위치에 쉼표를 추가하는 것입니다. 그래서 이렇게 보입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;10,999&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;8,094&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;456&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것들은 모두 이와 같은 ptag 안에 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;p class=&quot;points&quot;&amp;gt;10999&amp;lt;/p&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기타.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;할 수 있을까요?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 게시물 http://jsfiddle.net/pdWTU/1/ 의 도움을 받아 여기서 시도해 보았지만 작동이 되지 않는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제이미&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;갱신하다&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좀 어설프게 굴어서 여기 http://jsfiddle.net/W5jwY/1/ 에서 알아냈습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새로운 Globalization 플러그인을 통해 더 나은 방법을 모색해 보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제이미&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 브라우저에서 작동하며, 필요한 것은 이것뿐입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  function commaSeparateNumber(val){
    while (/(\d+)(\d{3})/.test(val.toString())){
      val = val.toString().replace(/(\d+)(\d{3})/, '$1'+','+'$2');
    }
    return val;
  }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 간결하게 쓰기 위해 썼으며, 요점은 regex 덕분입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 곧은 JS이지만 jQuery에서 다음과 같이 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#elementID').html(commaSeparateNumber(1234567890));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#inputID').val(commaSeparateNumber(1234567890));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 더 깨끗하고 유연한 것이 필요하다면 말입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 코드는 소수점을 올바르게 고정하고 선행 0을 제거하며 무제한으로 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;댓글에 @baacke 감사합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  function commaSeparateNumber(val){
   val = val.toString().replace(/,/g, ''); //remove existing commas first
   var valRZ = val.replace(/^0+/, ''); //remove leading zeros, optional
   var valSplit = valRZ.split('.'); //then separate decimals
    
   while (/(\d+)(\d{3})/.test(valSplit[0].toString())){
    valSplit[0] = valSplit[0].toString().replace(/(\d+)(\d{3})/, '$1'+','+'$2');
   }

   if(valSplit.length == 2){ //if there were decimals
    val = valSplit[0] + &quot;.&quot; + valSplit[1]; //add decimals back
   }else{
    val = valSplit[0]; }

   return val;
  }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery에서는 다음과 같이 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('.your-element').each(function(){
  $(this).html(commaSeparateNumber($(this).html()));
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 &lt;a href=&quot;http://jsfiddle.net/iamurgent/2rqtkuvs/15/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;23-1&quot;&gt;jsFiddle&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;Number(10000).toLocaleString('en');  // &quot;10,000&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Timothy Pirez의 답변은 매우 정확했지만 텍스트 필드의 사용자 유형으로 즉시 숫자를 쉼표로 바꿔야 하는 경우 키업 기능을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;      $('#textfield').live('keyup', function (event) {
        var value=$('#textfield').val();

      if(event.which &amp;gt;= 37 &amp;amp;&amp;amp; event.which &amp;lt;= 40){
          event.preventDefault();
      }
      var newvalue=value.replace(/,/g, '');   
      var valuewithcomma=Number(newvalue).toLocaleString('en');   
      $('#textfield').val(valuewithcomma); 

      });

    &amp;lt;form&amp;gt;&amp;lt;input type=&quot;text&quot; id=&quot;textfield&quot; &amp;gt;&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최근 출시된 마이크로소프트의 jQuery에 대한 &lt;strong papago-id=&quot;25-1&quot;&gt;&lt;a href=&quot;http://blog.jquery.com/2010/10/04/new-official-jquery-plugins-provide-templating-data-linking-and-globalization/&quot; rel=&quot;nofollow&quot; papago-id=&quot;25-1-0&quot;&gt;Globalization 플러그인&lt;/a&gt;&lt;/strong&gt;을 살펴봅니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://adamwdraper.github.com/Numeral-js/&quot; rel=&quot;nofollow&quot; papago-id=&quot;26-1&quot;&gt;Numberal.js&lt;/a&gt;를 보세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;숫자, 통화, 백분율 형식을 지정할 수 있으며 현지화를 지원합니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;    function delimitNumbers(str) {
      return (str + &quot;&quot;).replace(/\b(\d+)((\.\d+)*)\b/g, function(a, b, c) {
        return (b.charAt(0) &amp;gt; 0 &amp;amp;&amp;amp; !(c || &quot;.&quot;).lastIndexOf(&quot;.&quot;) ? b.replace(/(\d)(?=(\d{3})+$)/g, &quot;$1,&quot;) : b) + c;
      });
    }

    alert(delimitNumbers(1234567890));
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현지화 작업을 하고 계신 것 같은데, 이&lt;a href=&quot;http://mattsnider.com/javascript/numbers-and-number-format-function/&quot; rel=&quot;nofollow&quot; papago-id=&quot;27-1&quot;&gt; 대본&lt;/a&gt;을 보세요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;28-0&quot;&gt;를 사용&lt;/strong&gt;하여 &lt;strong papago-id=&quot;28-0&quot;&gt;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString&lt;/strong&gt; 에서 LocaleString 참조&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;false&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;function formatComma(value, sep = 0) {
      return Number(value).toLocaleString(&quot;ja-JP&quot;, { style: &quot;currency&quot;, currency: &quot;JPY&quot;, minimumFractionDigits: sep });
    }
console.log(formatComma(123456789, 2)); // ￥123,456,789.00
console.log(formatComma(123456789, 0)); // ￥123,456,789
console.log(formatComma(1234, 0)); // ￥1,234&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 접근 방식:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function addCommas(nStr)
{
    nStr += '';
    x = nStr.split('.');
    x1 = x[0];
    x2 = x.length &amp;gt; 1 ? '.' + x[1] : '';
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1)) {
        x1 = x1.replace(rgx, '$1' + ',' + '$2');
    }
    return x1 + x2;
}
var a  = addCommas(10000.00);
alert(a);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 다른 놀라운 플러그인: http://www.teamdf.com/web/jquery-number-format/178/&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 다른 방법:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function addCommas(n){
  var s = &quot;&quot;,
      r;

  while (n) {
    r = n % 1000;
    s = r + s;
    n = (n - r)/1000;
    s = (n ? &quot;,&quot; : &quot;&quot;) + s;
  }

  return s;
}

alert(addCommas(12345678));
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 @Timothy Perez에게 댓글로 제공된 @baacke의 fiddle의 커피 스크립트 버전이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class Helpers
    @intComma: (number) -&amp;gt;
        # remove any existing commas
        comma = /,/g
        val = number.toString().replace comma, ''

        # separate the decimals
        valSplit = val.split '.'

        integer = valSplit[0].toString()
        expression = /(\d+)(\d{3})/
        while expression.test(integer)
            withComma = &quot;$1,$2&quot;
            integer = integer.toString().replace expression, withComma

        # recombine with decimals if any
        val = integer
        if valSplit.length == 2
            val = &quot;#{val}.#{valSplit[1]}&quot;

        return val
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3883342/add-commas-to-a-number-in-jquery&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>jQuery</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/779</guid>
      <comments>https://codebag.tistory.com/779#entry779comment</comments>
      <pubDate>Mon, 30 Oct 2023 20:58:17 +0900</pubDate>
    </item>
    <item>
      <title>각 행의 결측/NaN 수 계산</title>
      <link>https://codebag.tistory.com/778</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 행의 결측/NaN 수 계산&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;행 수가 많은 데이터 세트를 가지고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 값은 NaN입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;In [91]: df
Out[91]:
 1    3      1      1      1
 1    3      1      1      1
 2    3      1      1      1
 1    1    NaN    NaN    NaN
 1    3      1      1      1
 1    1      1      1      1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 각 행에 있는 NaN 값의 수를 세고 싶습니다. 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;In [91]: list = &amp;lt;somecode with df&amp;gt;
In [92]: list
    Out[91]:
     [0,
      0,
      0,
      3,
      0,
      0]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 빠르고 좋은 방법은 무엇입니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 먼저 원소가 다음과 같은지 찾을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NaN&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;말든 말든&lt;/font&gt;&lt;/font&gt;&lt;code&gt;isnull()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 다음엔 행을 따라갑니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sum(axis=1)&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;In [195]: df.isnull().sum(axis=1)
Out[195]:
0    0
1    0
2    0
3    3
4    0
5    0
dtype: int64
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 출력을 목록으로 원한다면,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;In [196]: df.isnull().sum(axis=1).tolist()
Out[196]: [0, 0, 0, 3, 0, 0]
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 사용&lt;/font&gt;&lt;/font&gt;&lt;code&gt;count&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;맘에 들다&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;In [130]: df.shape[1] - df.count(axis=1)
Out[130]:
0    0
1    0
2    0
3    3
4    0
5    0
dtype: int64
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 행에서 NaN을 계산하려면&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;cols = ['col1', 'col2']
df['number_of_NaNs'] = df[cols].isna().sum(1)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 위치별로 열을 색인화합니다. 예를 들어 처음 4개의 열에 NaN을 카운트합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;df['number_of_NaNs'] = df.iloc[:, :4].isna().sum(1)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/30059260/counting-the-number-of-missing-nan-in-each-row&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>DataFrame</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/778</guid>
      <comments>https://codebag.tistory.com/778#entry778comment</comments>
      <pubDate>Mon, 30 Oct 2023 20:58:09 +0900</pubDate>
    </item>
    <item>
      <title>사용자 지정 쿼리 루프 제품 woocmerce에서 작동하지 않는 AJAX add to cart 버튼</title>
      <link>https://codebag.tistory.com/777</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 지정 쿼리 루프 제품 woocmerce에서 작동하지 않는 AJAX add to cart 버튼&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 우커머스를 사용하여 사용자 지정 전자 상거래 웹 사이트를 만들고 있는데 &quot;카트에 추가 버튼&quot;을 수정하는 데 문제가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력 상자/수량 상자에 여러 개의 금액을 추가할 때마다 카트에 한 개의 항목만 증가 또는 추가됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 사용자 지정 루프를 생성할 때만 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매장과 단품 페이지에서는 잘 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;10개를 추가하고 카트에 추가 버튼을 누르면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;카트에 정확히 10가지 항목을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 제가 작업해온 템플릿이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?php

/*
* Template Name: Home
*/

get_header(); ?&amp;gt;

&amp;lt;section class=&quot;full-width home-template&quot;&amp;gt;

    &amp;lt;div class=&quot;full-width shop-section&quot;&amp;gt;

        &amp;lt;div class=&quot;container&quot;&amp;gt;

            &amp;lt;?php
            $args = array(
                    'post_type' =&amp;gt; 'product',
                    'meta_query' =&amp;gt; array(
                        array(
                            'key' =&amp;gt; '_stock_status',
                            'value' =&amp;gt; 'instock'
                        )
                    )
            );

            $crate_products = new WP_Query ( $args );
            if ( $crate_products-&amp;gt;have_posts() ) : while ( $crate_products-&amp;gt;have_posts() ) :
              $crate_products-&amp;gt;the_post();

            ?&amp;gt;

            &amp;lt;div id=&quot;post-&amp;lt;?php the_ID() ?&amp;gt;&quot; class=&quot;three columns product-post&quot;&amp;gt;

                &amp;lt;?php // wc_get_template_part('content', 'product'); ?&amp;gt;


                &amp;lt;figure class=&quot;featured-image&quot;&amp;gt;
                    &amp;lt;?php
                    //Display Product Thumbnail
                    $product_thumbnail =  woocommerce_get_product_thumbnail();

                    ?&amp;gt;

                    &amp;lt;a href=&quot;&amp;lt;?php  the_permalink()?&amp;gt;&quot; &amp;gt;&amp;lt;?php echo $product_thumbnail ?&amp;gt;&amp;lt;/a&amp;gt;
                &amp;lt;/figure&amp;gt;


                &amp;lt;h2 class=&quot;product-price&quot;&amp;gt;&amp;lt;a href=&quot;&amp;lt;?php the_permalink(); ?&amp;gt;&quot;&amp;gt;&amp;lt;?php wc_get_template( 'single-product/price.php' ); ?&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;
                &amp;lt;span class=&quot;product-name&quot;&amp;gt;&amp;lt;?php the_title(); ?&amp;gt;&amp;lt;/span&amp;gt;

                &amp;lt;?php // woocommerce_quantity_input(); ?&amp;gt;


                &amp;lt;div class=&quot;add-to-cart-btn&quot;&amp;gt;
                &amp;lt;?php woocommerce_template_loop_add_to_cart( $crate_products-&amp;gt;post, $product ); ?&amp;gt;
                &amp;lt;?php // do_action( 'woocommerce_after_shop_loop_item' ); ?&amp;gt;
                &amp;lt;/div&amp;gt;


            &amp;lt;/div&amp;gt;

            &amp;lt;?php wp_reset_postdata(); ?&amp;gt;

            &amp;lt;?php endwhile; else: ?&amp;gt;

            &amp;lt;?php endif; ?&amp;gt;

            &amp;lt;?php wp_reset_query(); ?&amp;gt;


        &amp;lt;/div&amp;gt;

    &amp;lt;/div&amp;gt;


&amp;lt;/section&amp;gt;


&amp;lt;?php get_footer(); ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 혼란스러운 것은 AJAX 기능이 우커머스의 템플릿인 업셀 템플릿(up-sells.php)에서 작동하며 잘 작동한다는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
/**
 * Single Product Up-Sells
 *
 * This template can be overridden by copying it to yourtheme/woocommerce/single-product/up-sells.php.
 *
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly
}

global $product, $woocommerce_loop;

$upsells = $product-&amp;gt;get_upsells();

if ( sizeof( $upsells ) === 0 ) {
    return;
}

$meta_query = WC()-&amp;gt;query-&amp;gt;get_meta_query();

$args = array(
    'post_type'           =&amp;gt; 'product',
    'ignore_sticky_posts' =&amp;gt; 1,
    'no_found_rows'       =&amp;gt; 1,
    'posts_per_page'      =&amp;gt; $posts_per_page,
    'orderby'             =&amp;gt; $orderby,
    'post__in'            =&amp;gt; $upsells,
    'post__not_in'        =&amp;gt; array( $product-&amp;gt;id ),
    'meta_query'          =&amp;gt; $meta_query
);

$products = new WP_Query( $args );

$woocommerce_loop['columns'] = $columns;

if ( $products-&amp;gt;have_posts() ) : ?&amp;gt;

    &amp;lt;div class=&quot;upsells products&quot;&amp;gt;

        &amp;lt;div class=&quot;twelve columns&quot;&amp;gt;
            &amp;lt;h2&amp;gt;&amp;lt;?php // _e( 'You may also like&amp;amp;hellip;', 'woocommerce' ) ?&amp;gt;&amp;lt;/h2&amp;gt;
      &amp;lt;/div&amp;gt;

        &amp;lt;?php woocommerce_product_loop_start(); ?&amp;gt;

            &amp;lt;?php while ( $products-&amp;gt;have_posts() ) : $products-&amp;gt;the_post(); ?&amp;gt;

                &amp;lt;div id=&quot;post-&amp;lt;?php the_ID() ?&amp;gt;&quot; class=&quot;three columns product-post&quot;&amp;gt;

                    &amp;lt;?php  wc_get_template_part('content', 'product'); ?&amp;gt;





                &amp;lt;/div&amp;gt;

            &amp;lt;?php endwhile; // end of the loop. ?&amp;gt;

        &amp;lt;?php woocommerce_product_loop_end(); ?&amp;gt;

    &amp;lt;/div&amp;gt;

&amp;lt;?php endif;

wp_reset_postdata();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 이 개발자의 솔루션을 적용해 보았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://gist.github.com/claudiosmweb/5114131&quot; papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://gist.github.com/claudiosmweb/5114131&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 이것도&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://gist.github.com/webaware/6260468&quot; papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://gist.github.com/webaware/6260468&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 여전히 같은 생산량을 만들어냅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜 카트에 한 가지 항목만 증가시키는지 정말 모르겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;브라우저 콘솔에 오류가 있는지 확인했으며 기능이 작동하도록 하기 위해 다른 방법이나 옵션을 시도했음을 확인하거나 알려주기 위해 코드의 일부를 주석으로 달았습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 단계를 따릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언코멘트&lt;/font&gt;&lt;/font&gt;&lt;code&gt;woocommerce_quantity_input();&lt;/code&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;콘솔에 오류가 있는지 없는지 브라우저 콘솔에서 확인합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇다면 여기에 오류를 공유해 주시기 바랍니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류가 없으면 교체합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;code&gt;woocommerce_template_loop_add_to_cart( $crate_products-&amp;gt;post, $product );&lt;/code&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 함께&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;code&gt;print_r(woocommerce_template_loop_add_to_cart( $crate_products-&amp;gt;post, $product ));&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터를 반환하는지 여부를 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;댓글 달기도 시도해 봅니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;do_action( 'woocommerce_after_shop_loop_item' );&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 업데이트된 버전이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
/*
* Template Name: Home
*/
get_header(); ?&amp;gt;

&amp;lt;section class=&quot;full-width home-template&quot;&amp;gt;
    &amp;lt;div class=&quot;full-width shop-section&quot;&amp;gt;
        &amp;lt;div class=&quot;container&quot;&amp;gt;

            &amp;lt;?php

            global $product;

            $args = array(
                'post_type' =&amp;gt; 'product',
                'meta_query' =&amp;gt; array(
                    array(
                        'key' =&amp;gt; '_stock_status',
                        'value' =&amp;gt; 'instock'
                    )
                )
            );            

            $posts = get_posts( $args );            
            foreach( $posts as $post ) :
                setup_postdata( $post );
                wc_setup_product_data( $post );
                $product = wc_get_product( $post-&amp;gt;ID ); ?&amp;gt;

                &amp;lt;div id=&quot;post-&amp;lt;?php the_ID() ?&amp;gt;&quot; class=&quot;three columns product-post&quot;&amp;gt;

                    &amp;lt;figure class=&quot;featured-image&quot;&amp;gt;
                        &amp;lt;a href=&quot;&amp;lt;?php  the_permalink()?&amp;gt;&quot; &amp;gt;&amp;lt;?php echo woocommerce_get_product_thumbnail(); ?&amp;gt;&amp;lt;/a&amp;gt;
                    &amp;lt;/figure&amp;gt;

                    &amp;lt;h2 class=&quot;product-price&quot;&amp;gt;&amp;lt;a href=&quot;&amp;lt;?php the_permalink(); ?&amp;gt;&quot;&amp;gt;&amp;lt;?php wc_get_template( 'single-product/price.php' ); ?&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;
                    &amp;lt;span class=&quot;product-name&quot;&amp;gt;&amp;lt;?php the_title(); ?&amp;gt;&amp;lt;/span&amp;gt;

                    &amp;lt;?php woocommerce_quantity_input(); ?&amp;gt;

                    &amp;lt;div class=&quot;add-to-cart-btn&quot;&amp;gt;
                        &amp;lt;?php woocommerce_template_loop_add_to_cart(); ?&amp;gt;                
                    &amp;lt;/div&amp;gt;

                &amp;lt;/div&amp;gt;

            &amp;lt;?php endforeach; ?&amp;gt;

            &amp;lt;script type=&quot;text/javascript&quot;&amp;gt;

                (function($){
                    $(document).ready(function(){
                        $(document).on( &quot;keyup&quot;, &quot;input.qty&quot;, function(){                       
                            $(this).parent().next().find(&quot;a&quot;).attr( &quot;data-quantity&quot;, $(this).val() );
                        });
                    });
                })(jQuery);

            &amp;lt;/script&amp;gt;

        &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/section&amp;gt;

&amp;lt;?php get_footer(); ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt; &amp;lt;?php // woocommerce_quantity_input(); ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래야 한다&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; &amp;lt;?php woocommerce_quantity_input(); ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/36857379/ajax-add-to-cart-button-not-working-on-custom-query-loop-product-woocommerce&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>ajax</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/777</guid>
      <comments>https://codebag.tistory.com/777#entry777comment</comments>
      <pubDate>Mon, 30 Oct 2023 20:58:02 +0900</pubDate>
    </item>
    <item>
      <title>플러그인 및 테마를 설치할 수 없습니다.</title>
      <link>https://codebag.tistory.com/776</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;플러그인 및 테마를 설치할 수 없습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;플러그인을 설치하고 싶지만 표시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Installation failed: Could not create directory.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;wp-config에 코드를 추가하는 해결책이 있다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//* FTP Settings **/
/** wp-content path */

define('FS_METHOD', 'ftpext');
define('FTP_BASE', '/');

define('FTP_CONTENT_DIR', '/wp-content/');
define('FTP_PLUGIN_DIR', '/wp-content/plugins/');
define('FTP_USER', 'ftpuser');
define('FTP_PASS', 'ftppewd');
define('FTP_HOST', 'domain.com');

define('FTP_SSL', false);

define(&quot;FS_METHOD&quot;, &quot;direct&quot;);
define(&quot;FS_CHMOD_DIR&quot;, 0777);
define(&quot;FS_CHMOD_FILE&quot;, 0777);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류 메시지가 다음으로 바뀝니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설치에 실패했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 시스템에 연결할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자격 증명을 확인하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. IIS 8을 사용합니다 ftp 클라이언트를 사용합니다. ftp 계정은 전체 접근 권한을 가집니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;폴더의 소유권을 확인할 수도 있습니다. 시도해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo chown -R www-data:www-data /var/www
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Wordpress를 로컬로 새로 설치한 후 아래 문장을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;define(&quot;FS_METHOD&quot;, &quot;direct&quot;);&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 wp-config. php 파일에 저장합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나중에 wp-content의 소유권과 wp-content 폴더 안의 내용을 웹서버 사용자(_ww)로 변경합니다. 아래 명령어를 사용했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;sudo chown _www:_www wp-content&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;sudo chown _www:_www wp-content/*&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 다음을 사용하여 권한을 재귀적으로 설정할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;sudo chown -R _www:_www wp-content/&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 시스템에 액세스할 수 없는 경우 FTP 자격 증명에 대해 불만을 제기합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 권한이 잘못되었을 가능성이 높습니다(웹 서버에서 디렉토리에 액세스할 수 없음).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹 서버를 실행하는 사용자와 동일한 사용자가 워드프레스 디렉토리를 소유하고 있는지 확인하는 경우 FTP 자격 증명 노트가 사라지고 워드프레스 관리 콘솔을 통해 테마와 플러그인을 설치할 수 있어야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/39064553/cant-install-plugin-and-theme&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>wordpress</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/776</guid>
      <comments>https://codebag.tistory.com/776#entry776comment</comments>
      <pubDate>Mon, 30 Oct 2023 20:57:52 +0900</pubDate>
    </item>
    <item>
      <title>click() 이벤트가 jQuery에서 두 번 호출됩니다.</title>
      <link>https://codebag.tistory.com/775</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;click() 이벤트가 jQuery에서 두 번 호출됩니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;링크 요소를 설정하고 jQuery에서 클릭 이벤트를 호출했는데 클릭 이벤트가 두 번 호출되고 있으니 jQuery의 코드 아래를 참조해주세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#link_button&quot;)
.button()
.click(function () {
   $(&quot;#attachmentForm&quot;).slideToggle(&quot;fast&quot;);
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML 페이지에 실수로 스크립트를 두 번 포함하지 않았는지 확인합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클릭하기 전에 구속을 해제합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#link_button&quot;).unbind('click');
$(&quot;#link_button&quot;)
.button()
.click(function () {
   $(&quot;#attachmentForm&quot;).slideToggle(&quot;fast&quot;);
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 코드에 jquery 스크립트가 두 번 포함되어 있다는 뜻입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 이렇게 해보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#btn&quot;).unbind(&quot;click&quot;).click(function(){

//your code

});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 노력했다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;e.stopImmediatePropagation()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;; 이건 제게 도움이 될 것 같네요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나의 경우 아래 스크립트를 사용하여 문제를 극복하였습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#id').off().on('click',function(){
    //...
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;off()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바인딩된 모든 이벤트의 바인딩을 해제합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#id&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 만약 당신이 오직 구속을 풀고 싶다면,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;click&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이벤트, 그런 다음 사용&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;off('click')&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 번의 클릭 문제에 대한 다소 일반적인 해결책은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;e.stopPropagation()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능이 끝나면(사용하는 assuming)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;function(e)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉).&lt;/font&gt; 그러면 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;두 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;할 수 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 이벤트가 버블링되어 함수가 두 번째로 실행되는 것을 방지할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.on()을 호출하기 직전에 .off()를 호출하기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 모든 이벤트 처리기가 제거됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(element).off().on('click', function() {
// function body
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;등록된 '클릭' 이벤트 핸들러만 제거하려면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(element).off('click').on('click', function() {
// function body
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 같은 문제가 있었는데, 이 코드를 바꿔보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#link_button&quot;)
.button()
.click(function () {
   $(&quot;#attachmentForm&quot;).slideToggle(&quot;fast&quot;);
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 항목에 대해:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#link_button&quot;).button();
$(&quot;#link_button&quot;).unbind(&quot;click&quot;).click(function () {
   $(&quot;#attachmentForm&quot;).slideToggle(&quot;fast&quot;);
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 코드가 문제를 해결해 줬습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 HTML 페이지에 실수로 스크립트를 두 번 포함하지 않도록 주의해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 이 두 가지를 올바르게 하고 있다면 당신의 코드는 올바르게 작동할 것이라고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파이어폭스인데도 이건 확실히 버그입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 위의 답변들을 모두 검색해보았고 결국 SO를 통해 많은 전문가들에 의해 버그로 판명되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 저는 결국 변수를 이렇게 선언함으로써 이 아이디어를 생각해 냈습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var called = false;
$(&quot;#ColorPalete li&quot;).click(function() {
    if(!called)
    {
             called = true;
             setTimeout(function(){ //&amp;lt;-----This can be an ajax request but keep in mind to set called=false when you get response or when the function has successfully executed.
                 alert('I am called');
                 called = false;
             },3000);

    }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 식으로 먼저 함수가 이전에 호출되었는지 여부를 확인합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가하기&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;e.preventDefault();&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 기능을 시작했을 때 나는 효과가 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드 조각에는 나쁜 것이 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;@karim이 말한 것처럼 대본의 또 다른 부분입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 드셔보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#ddlSupervisor').live('change', function (e) {
    if (e.handled !== true) { //this makes event to fire only once
    getEmployeesbySupervisor();
    e.handled = true;
   }
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이유는 잘 모르겠지만 저는 이 문제를 가지고 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).on(&quot;click&quot;, &quot;.my-element&quot;, function (e) { });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 변경했을 때.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;.my-element&quot;).click(function () { });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제가 해결되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 분명히 내 코드에 뭔가 문제가 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 오래된 질문이지만 이벤트 위임을 사용하는 경우 이것이 저에게 발생한 원인입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제거후&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.delegate-two&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행이 두 번 멈췄습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 대표단이 한 페이지에 모이면 이런 일이 발생한다고 생각합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('.delegate-one, .delegate-two').on('click', '.button', function() {
    /* CODE */
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 경우에는 Chrome에서 잘 작동하고 IE에서 전화를 걸었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.click()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 그게 한.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 만약 그것이 당신의 문제라면, 나는 전화를 한 후에, 그것을 반품 false로 고쳤습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.click()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이벤트성&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   $(&quot;#txtChat&quot;).keypress(function(event) {
        if (event.which == 13) {
            $('#btnChat').click();
            $('#txtChat').val('');
            return false;
        }
    });
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부르기&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;unbind&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 문제를 해결했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#btn&quot;).unbind(&quot;click&quot;).click(function() {
    // your code
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 스크립트의 다른 어딘가에서 &quot;클릭&quot; 이벤트가 다른 여러 답변/댓글이 제시하는 것처럼 동일한 요소에 다시 바인딩되고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 비슷한 문제가 있었는데 그것을 확인하기 위해 단순히 a를 추가했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;console.log&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 토막글과 같이 스크립트에 명령합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#link_button&quot;)
    .button()
    .click(function () {
        console.log(&quot;DEBUG: sliding toggle...&quot;);
        $(&quot;#attachmentForm&quot;).slideToggle(&quot;fast&quot;);
    });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;버튼을 클릭하면 브라우저의 개발자 콘솔에서 아래 이미지와 유사한 것을 얻을 수 있습니다(제가 한 것처럼).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;click()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이벤트가 동일한 버튼에 두 번 바인딩되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sa85c.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sa85c.png&quot; alt=&quot;the developer's console&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;빠른 패치가 필요한 경우 다른 의견제출자가 제안한 솔루션은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;off&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메소드()&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;unbind&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이벤트 바인딩이 잘 작동하기 전에 바인딩 해제를 위해 jQuery 3.0) 이후로 권장되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#link_button&quot;)
    .button()
    .off(&quot;click&quot;)
    .click(function () {
        $(&quot;#attachmentForm&quot;).slideToggle(&quot;fast&quot;);
    });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안타깝게도, 이것은 임시 패치일 뿐입니다!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;상사를 행복하게 만드는 문제가 해결되면, 코드를 조금 더 파고들어 &quot;중복 바인딩&quot; 문제를 해결해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제 솔루션은 물론 특정 사용 사례에 따라 달라집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 저의 경우 &quot;맥락&quot;의 문제가 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문서의 특정 부분에 적용된 Ajax 호출의 결과로 내 함수가 호출되고 있었습니다. 전체 문서를 다시 로드하면 실제로 &quot;페이지&quot;와 &quot;요소&quot; 컨텍스트가 모두 다시 로드되어 이벤트가 요소에 두 번 바인딩되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제에 대한 제 해결책은 &lt;a href=&quot;https://api.jquery.com/on/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;48-1&quot;&gt;jQueryone&lt;/a&gt; 함수를 활용하는 것이었습니다. 이 함수는 이벤트가 첫 번째 호출 후 자동으로 바인딩되지 않는다는 예외를 제외하고는 &lt;a href=&quot;https://api.jquery.com/on/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;48-3&quot;&gt;on&lt;/a&gt;과 동일합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 제 사용 사례에는 이상적이었지만, 다른 사용 사례에는 해결책이 되지 않을 수도 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 항목이 일치하는 선택에 속아서 각각 클릭이 되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;:first&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움말:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('.someClass[data-foo=&quot;'+notAlwaysUniqueID+'&quot;]:first').click();
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 FF에서 이 문제가 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 내 꼬리표는 그 다음에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;태그. 그런데.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;태그는 아무데도 가지 않고 더블클릭을 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;교환을 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;꼬리표를 붙입니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;태그 대신 더블클릭 문제가 사라졌습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 대안은 링크가 아무 데도 가지 않을 경우 href 속성을 완전히 제거하는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 이 문제에 직면한 이유는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(elem).click(function(){});&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크립트는 다음으로 설정된 디브에 인라인으로 배치되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;style=&quot;display:none;&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS 디스플레이가 블록으로 전환되면 스크립트는 이벤트 수신기를 두 번째로 추가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크립트를 별도의 .js 파일로 이동했는데 중복 이벤트 수신기가 더 이상 시작되지 않았습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jquery와 함께 로드 페이지에서 이 방법을 사용하면 다음과 같이 적습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$('#obj').off('click');&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클릭 기능을 설정하기 전에 버블이 발생하지 않도록 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저한테는 통합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 간단한 대답은 클릭 바인딩을 함수로 전환하여 요소의 클릭 한 번으로 호출하는 것이었습니다. - 효과가 있었습니다! 그러나 위의 것들 중 어느 것도 효과가 없었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;em papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이벤트가 두 번 또는 세 번, 또는 그 이상 전화하는 경우 도움이 될 수 있습니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이벤트를 트리거하는 데 이와 같은 것을 사용하는 경우...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('.js-someclass').click();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;…그러면 다음의 수에 주목해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.js-someclass&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 번이 아니라 모든 요소에 대한 클릭 이벤트를 트리거하기 때문에 페이지에 있는 요소입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 간단한 수정은 첫 &lt;a href=&quot;https://stackoverflow.com/a/11345480/1717535&quot; papago-id=&quot;68-1&quot;&gt;번째 요소만 선택&lt;/a&gt;하여 클릭을 한 번만 트리거하도록 하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('.js-someclass:first').click();
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;같은 문제가 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이게 내겐 통했어요&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('selector').once().click(function() {});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누군가에게 도움이 되길 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저의 경우 HTML은 다음과 같이 작성되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;share&quot;&amp;gt;
  &amp;lt;div class=&quot;wrapper&quot;&amp;gt;
    &amp;lt;div class=&quot;share&quot;&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 내 jQuery는 이렇습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;jQuery('.share').toggle();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아무 일도 없는 것 같아서 혼란스러웠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제는 내부가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.share&lt;/code&gt;&lt;font papago-translate=&quot;splited&quot;&gt;s &lt;/font&gt;&lt;code&gt;toggle&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바깥쪽을 취소할 겁니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.share&lt;/code&gt;&lt;font papago-translate=&quot;splited&quot;&gt;s &lt;/font&gt;&lt;code&gt;toggle&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 요소 종류를 변경해서 이 문제를 해결했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;버튼 대신 입력을 하는데, 이 문제는 더 발생하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;77&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;button onclick=&quot;doSomthing()&quot;&amp;gt;click me&amp;lt;/button&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;78&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대체 위치:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input onclick=&quot;doSomthing()&quot; value=&quot;click me&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/6731894/click-event-is-calling-twice-in-jquery&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>jQuery</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/775</guid>
      <comments>https://codebag.tistory.com/775#entry775comment</comments>
      <pubDate>Mon, 30 Oct 2023 20:57:46 +0900</pubDate>
    </item>
    <item>
      <title>jQuery와 jQuery Mobile의 차이점은?</title>
      <link>https://codebag.tistory.com/774</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery와 jQuery Mobile의 차이점은?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 모바일 웹 개발이 처음이고, 핸드폰 갭으로 모바일 앱을 만들었고, jQuery를 자주 사용했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 제가 사물을 포맷하는 방식과 테스트하는 모바일 기기 화면에 실제로 나타나는 방식과 관련된 몇 가지 결함이 자연스럽게 존재했고, 이를 해결하기 위해 저는 jQuery 모바일을 사용함으로써 제 자신을 좀 더 쉽게 만들 수 있는 많은 제안들을 우연히 발견했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 혼란스럽군요. jQuery는 포맷에 롤이 없었어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제를 일으킨 것은 모바일 CSS에 대한 초보자 수준의 지식일 뿐입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇다면 jQuery mobile은 정확히 무엇을 하며, 일반 jQuery와 어떻게 다른가요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 제가 jQuery를 이미 알고 있다면, 저는 어떤 점이 새로울까요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;5-0&quot;&gt;jQuery&lt;/strong&gt;는 브라우저 전반에 걸쳐 스크립트를 단순화하고 표준화하기 위해 순수하게 설계되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소 생성, DOM 조작, 속성 관리, HTTP 요청 수행 등 낮은 수준의 작업에 중점을 둡니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;6-0&quot;&gt;jQuery&lt;/strong&gt; UI는 jQuery 위에 구축된 사용자 인터페이스 구성 요소 및 기능의 집합입니다(즉, 작동하려면 jQuery가 필요합니다). 버튼, 대화 상자, 슬라이더, 탭, 고급 애니메이션, 드래그/드롭 기능.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery와 jQueryUI는 둘 다 사용자의 사이트(데스크탑 또는 모바일)에 '추가'되도록 설계되어 있습니다. 특정 기능을 추가하고 싶다면 jQuery 또는 jQueryUI가 도움이 될 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 &lt;strong papago-id=&quot;8-0&quot;&gt;jQuery Mobile&lt;/strong&gt;은 완전한 프레임워크입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 당신의 모바일 사이트의 출발점이 되기 위한 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery가 필요하며, jQuery와 jQuery UI의 기능을 모두 활용하여 모바일 친화적인 사이트 구축을 위한 UI 구성 요소와 API 기능을 모두 제공합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여전히 원하는 만큼 또는 적은 양을 사용할 수 있지만, jQuery Mobile은 허락만 하면 전체 뷰포트를 모바일 친화적인 방식으로 제어할 수 &lt;em papago-id=&quot;8-2&quot;&gt;있습니다&lt;/em&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 다른 주요 차이점은 jQuery와 jQueryUI가 HTML과 CSS 위에 계층화를 목표로 한다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;마크업은 그냥 내버려두고 jQuery로 강화할 수 있어야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 jQuery Mobile은 HTML 단독으로 구성 요소를 표시할 위치를 정의하는 방법을 제공합니다(예: jQuery Mobile 사이트에서).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;ul data-role=&quot;listview&quot; data-inset=&quot;true&quot; data-filter=&quot;true&quot;&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;#&quot;&amp;gt;Acura&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;#&quot;&amp;gt;Audi&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;#&quot;&amp;gt;BMW&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;#&quot;&amp;gt;Cadillac&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;#&quot;&amp;gt;Ferrari&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data-role&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성은 jQuery Mobile에게 이 목록을 모바일 친화적인 UI 구성요소로 바꾸라고 알려줍니다. 그리고&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data-inset&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data-filter&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성은 자바스크립트를 한 줄도 쓰지 않고 속성을 설정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 jQueryUI 구성요소는 일반적으로 DOM에서 구성요소를 인스턴스화하기 위해 자바스크립트를 몇 줄 작성하여 생성됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery mobile이란?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JQM(jQuery mobile)은 jQuery 위에 구축된 휴대폰용 사용자 인터페이스 시스템으로, JQM이 작동하기 위해서는 jQuery가 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JQM은 유사한 다른 휴대전화 프레임워크와 달리 모바일 웹킷 브라우저뿐만 아니라 주요 모바일, 태블릿, 전자 리더 및 데스크톱 플랫폼 모두를 지원합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 프레임워크의 가장 주목할 만한 기능 중 하나는 애니메이션 페이지 전환(매우 멋진)을 사용하는 Ajax 네비게이션 시스템입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신에게 새로운 것은 무엇입니까?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새로운 사용자에게 커브볼을 던지는 JQM의 한 가지는 아약스 내비게이션입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jquery에서 오는 당신은 아마 모든 페이지에 당신의 자바스크립트를 포함시킨 다음 domready()를 사용하는 것에 익숙할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(function(){ ... }&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(document).ready(function(){ .... }&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;재미있는 자바스크립트 활동을 시작합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 JQM은 ajax navigation을 사용하기 때문에 시스템은 다른 페이지를 첫 페이지와 같은 도메인으로 끌어 들이고 스크립트를 로드하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. ajax를 통해 다음 페이지가 로드되면 안에 있는 물건이 눈에 띕니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$(function(){ ...}&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 번째 페이지에서는 작동하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이에 대한 해결책은 pageinit 이벤트에 바인딩되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 예제는 여행을 시작하는 데 도움이 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).on('pageinit', function(){ // this fires for each new page

});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 페이지를 대상으로 하려면 해당 페이지의 ID를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).on('pageinit','#page2', function(){ // this fires for #page2 only 

});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JQM으로 시작할 때 새로운 페이지 이벤트를 이해하는 것이 많은 도움이 될 것입니다. http://jquerymobile.com/demos/1.1.0/docs/api/events.html 행운을 빌어요!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery는 DOM 조작/트래버징 및 AJAX 자바스크립트 프레임워크입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 서로 다른 브라우저들 사이의 많은 복잡성을 자동으로 추상화합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;수많은 작업을 단순화하는 수많은 jQuery 플러그인이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery Mobile은 jQuery 기반의 모바일 애플리케이션에 적합한 UI 프레임워크입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 ming과 UI 구성요소를 가지고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모두 무료입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery를 사용하기 위해 jQuery Mobile을 사용하지 않아도 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 jQuery Mobile을 사용하려면 jQuery를 사용해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위에 언급할 포인트가 충분하지 않으므로 앤디의 두 번째 의존성 질문에 답하기 위해 스레드를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 여러분이 찾으시는 것이 여기 있다고 믿습니다: &lt;a href=&quot;http://demos.jquerymobile.com/1.4.3/pages/&quot; rel=&quot;nofollow&quot; papago-id=&quot;28-1&quot;&gt;jQuery Mobile Demo&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt; 
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;Page Title&amp;lt;/title&amp;gt;
    &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&amp;gt;
    &amp;lt;link rel=&quot;stylesheet&quot; href=&quot;http://code.jquery.com/mobile/[version]/jquery.mobile-    [version].min.css&quot; /&amp;gt;
    &amp;lt;script src=&quot;http://code.jquery.com/jquery-[version].min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script src=&quot;http://code.jquery.com/mobile/[version]/jquery.mobile-[version].min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;

&amp;lt;body&amp;gt;
    ...content goes here...
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/10391856/difference-between-jquery-and-jquery-mobile&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>jQuery</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/774</guid>
      <comments>https://codebag.tistory.com/774#entry774comment</comments>
      <pubDate>Mon, 30 Oct 2023 20:57:37 +0900</pubDate>
    </item>
    <item>
      <title>여러 행을 가져와 하나의 변수에 저장 - ORACLE 저장 프로시저</title>
      <link>https://codebag.tistory.com/773</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 행을 가져와 하나의 변수에 저장 - ORACLE 저장 프로시저&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ORACLE STOREED PROCESS 작업 중인데 의문이 듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1개 이상의 행을 가져오는 쿼리가 있는데 그 3개의 행의 값을 모두 1개의 변수에 저장하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;누가 이것 좀 도와줄 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 쿼리는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;SELECT STUDENT_NAME FROM STUDENT.STUDENT_DETAILS WHERE CLASS_ID= 'C';&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 이 쿼리는 3개의 이름을 가져옵니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;잭,질,버니&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 3개의 이름을 모두 1변수 즉, C_NAMES에 저장하기를 원합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 그 후 저는 절차의 추가 단계에서 그 변수를 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누가 이것 좀 도와줄 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 당신의 시간과 노력에 매우 감사드립니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;미리 감사드립니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;브린다 :)&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;CREATE PROCEDURE a_proc
AS
    CURSOR names_cur IS
        SELECT  student_name
        FROM    student.student_details
        WHERE   class_id = 'C';

    names_t  names_cur%ROWTYPE;
    TYPE names_ntt IS TABLE OF names_t%TYPE; -- must use type
    l_names  names_ntt;
BEGIN
    OPEN  names_cur;
    FETCH names_cur BULK COLLECT INTO l_names;
    CLOSE names_cur;

    FOR indx IN 1..l_names.COUNT LOOP
        DBMS_OUTPUT.PUT_LINE(l_names(indx).student_name);
    END LOOP;
END a_proc;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle 버전(&amp;gt;= 11G(11.2))에 따라 LISTAG:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT LISTAGG(STUDENT_NAME,',')  WITHIN GROUP (ORDER BY STUDENT_NAME)
FROM STUDENT.STUDENT_DETAILS
WHERE CLASS_ID= 'C';
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집: Oracle 버전이 11G(11.2)보다 낮은 경우 여기를 &lt;a href=&quot;http://www.oracle-base.com/articles/misc/string-aggregation-techniques.php&quot; rel=&quot;noreferrer&quot; papago-id=&quot;11-1&quot;&gt;참조&lt;/a&gt;하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안녕하세요. 시간 내주셔서 감사합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그 질문을 해결했고 모든 것은 에더슨 덕분입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결책은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT WM_CONCAT(STUDENT_NAME) 
FROM STUDENT.STUDENT_DETAILS WHERE CLASS_ID= 'C';
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 저장 프로시저 또는 PLSQL에서 이를 사용하는 경우 변수를 생성하여 사용하기만 하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SELECT INTO&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것과 함께 그리고 변수를 인쇄합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드는 여기 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DECLARE

C_NAMES VARCHAR2(100);

BEGIN

   SELECT WM_CONCAT(STUDENT_NAME) INTO C_NAMES
   FROM STUDENT.STUDENT_DETAILS WHERE CLASS_ID= 'C';

  dbms_output.put_line(sname);

END;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도와주신 분들께 다시 한번 감사드립니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업을 위해서는 커서가 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DECLARE
    CURSOR stud_cur IS
    SELECT STUDENT_NAME FROM STUDENT.STUDENT_DETAILS WHERE CLASS_ID= 'C';

    l_stud STUDENT.STUDENT_DETAILS%ROWTYPE;
    BEGIN
      OPEN stud_cur;
      LOOP
        FETCH stud_cur INTO l_stud;
        EXIT WHEN stud_cur%NOTFOUND;

        /* The first time, stud_cur.STUDENT_NAME will be Jack, then Jill... */
      END LOOP;
    CLOSE stud_cur;
END;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/16967199/fetch-multiple-rows-and-store-in-1-variable-oracle-stored-procedure&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>oracle</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/773</guid>
      <comments>https://codebag.tistory.com/773#entry773comment</comments>
      <pubDate>Mon, 30 Oct 2023 20:57:30 +0900</pubDate>
    </item>
    <item>
      <title>iPhone ObjectiveC Apps의 C/C++ 정적 라이브러리 사용</title>
      <link>https://codebag.tistory.com/772</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iPhone ObjectiveC Apps의 C/C++ 정적 라이브러리 사용&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C++를 내부적으로 사용하고 이것을 라이브러리 사용자에게 숨기는 C static library API를 가질 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;휴대용 C++ 라이브러리를 작성하여 아이폰 애플리케이션에 정적으로 연결하고자 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Max OS X 'static library' 템플릿을 사용하여 Xcode 프로젝트를 만들고 소스를 가로채 복사했으며 (외부 &quot;C&quot;)를 사용하여 (예외 사항을 처리하기 위해) Capper를 작성했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;생성된 라이브러리(.a 파일)를 다른 코코아 아이폰 어플리케이션에서 사용하려고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라이브러리의 구현 클래스에서 호출 Objective C 파일에 (.mm) 확장자를 사용하고 구현 클래스에 (.cpp) 확장자를 사용하면 모든 것이 잘 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 래퍼 함수 파일이 모두 C 함수에 불과하지만 래퍼 파일을 (.c) 확장자로 변경하려고 하면 링크 시 해결되지 않은 기호가 나타납니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C++가 라이브러리에서 내부적으로 사용된다고 해서 외부적으로는 여전히 C++ 프로그램으로 취급되어야 한다는 것을 의미합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 추상화를 강제할 방법이 없습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;8-0&quot;&gt;편집 :&lt;/strong&gt; 답변 감사합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 외부 &quot;C&quot;를 사용해 왔지만, 호출 프로젝트에서 필요한 구성이 무엇인지 확신할 수 없었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 예측된 호출이 C++를 사용했는지 아니면 무지할 수 있는지 알고 순수하게 C 라이브러리라고 생각해야 하는지를 알아야 하는 경우입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안 될 것 같고, Objective C 클래스에 (.mm) 파일을 사용해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;댓글로 이 작업을 하는 것은 너무 어렵기 때문에, 여러분이 겪고 있는 링크 문제가 무엇인지 빠르게 보여드리겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Xcode는 파일이 발견되면 접미사를 기반으로 빌드 규칙을 사용하여 어떤 컴파일러를 사용할지 결정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 gcc는 표준 C 라이브러리에 파일을 연결하지만 표준 C++ 라이브러리에는 연결되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아카이브 파일(정적 라이브러리)에는 연결 확인 작업이 전혀 수행되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 &lt;em papago-id=&quot;11-1&quot;&gt;연결해야 하는 객체&lt;/em&gt; 파일의 아카이브입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트에 .mm 또는 .cpp 파일이 없으므로 g++가 호출되지 않으며 파일이 표준 라이브러리에 연결되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 수정하려면 Xcode 프로젝트의 다른 링커 플래그에 표준 C++ 라이브러리를 추가하거나 미리 정의된 다른 플래그 옵션에 -l(예: -lstdc++)로 추가하기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 간단한 시연입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;stw.h:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#ifdef __cplusplus
extern &quot;C&quot;
#endif
void show_the_world(void);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;stw.cpp:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &quot;stw.h&quot;
using namespace std;

extern &quot;C&quot; void show_the_world() {
  cout &amp;lt;&amp;lt; &quot;Hello, world!\n&quot;;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라이브러리를 작성합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ g++ -c stw.cpp -o stw.cpp -O0 -g
$ ar rcs stw.a stw.o
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C 응용프로그램에서 라이브러리 사용하기:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;my app.c:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &quot;stw.h&quot;

int main() {
  show_the_world();
  return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C 애플리케이션 구축:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ gcc -o myapp myapp.c stw.a -lstdc++ -g -O0
$ ./myapp
Hello, world!
$
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;-lstdc++ 없이 컴파일을 시도하면 C 컴파일러는 C++ 런타임에 링크해야 한다는 것을 전혀 알지 못하기 때문에 해결되지 않은 모든 문제를 얻을 수 있습니다(그리고 왜 그럴까요?)!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 수동으로 추가해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트의 빌드 규칙을 변경하는 방법도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Xcode가 .c와 .m 파일을 만들기 위해 gcc를 사용하도록 하는 대신, g++를 사용하라고 하면 문제가 해결될 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;표시할 기능을 선언해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;extern &quot;C&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 서명은 C 를 들어 C 직접 할 수는 는 괜찮습니다&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 이들의 서명은 C 호환이 되어야 하지만 내용은 그렇지 않습니다(예를 들어 C++ 개체에 액세스할 수는 있지만 직접 전달할 수는 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 포인터는 괜찮습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 C 호환 환경에서는 기호를 볼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집: 그리고 C++ 소스 파일로 컴파일해 주세요, C는 언어 연결 개념이 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언어 연결과 관련된 몇 가지 다른 문제들이 있습니다. (예를 들어 모든 것이&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;extern &quot;C&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이름이 같은 함수는 네임스페이스에 관계없이 동일한 함수입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;EDIT2: 헤더에서 매크로를 확인할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;__cplusplus&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, C++와 다른 언어를 각각 설정하는 데 사용합니다(C++는 다음을 요구하기 때문입니다).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;extern &quot;C&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선언, 그리고 다른 언어들은 아마도 그것들에 대해 불평할 것입니다).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 C++ 컴파일러로 C 함수를 컴파일하면 함수 이름을 스매싱하고 C++ ABI를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;*.cpp 또는 *.mm 확장자를 사용할 때는 C++ 컴파일러를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 원하는 것은 컴파일러가 C 함수를 생성하도록 강요하고 CBI를 사용하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업은 다음 중 하나를 통해 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C 컴파일러로 컴파일합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C++ 컴파일러로 컴파일하되 함수 선언 앞에 외부 &quot;C&quot;를 붙여야 합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C 및 C++ 소스 파일 모두에서 동일한 파일을 포함할 수 있도록 헤더 파일을 설정하는 가장 선호되는 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#ifndef HEADER_GUARD_1_H
#define HEADER_GUARD_1_H

#ifdef __cplusplus
extern &quot;C&quot; {
#endif

// Declare C function interface here.
int myFunc(int x,char*);

#ifdef __cplusplus
}
#endif

#endif 
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 좋은 토론을 해주셔서 감사합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 한 일은:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1) 저는 코카터치 스태틱 립 옵션을 사용하여 스태틱 립을 만들었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 c/c++/obj-call mix가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 저의 수출품은 obj-c 클래스 뿐입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사실 저는 c++에 objc- to c를 사용했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2) X-code proj에서 아이폰 앱을 만들었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 링크 플래그를 추가했습니다. 내 lib 이름(-lxyz) //내 lib 이름은 libxyz입니다.lib 검색 경로, 헤더 검색 경로를 추가했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;3) 그 다음에 정리를 했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류가 발생했습니다. 새로운 운영자 삭제를 찾을 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;3) 그런 다음 앱 딜러, 뷰 컨트롤러를 분리하고 더미 cpp(.h, .cpp)를 추가했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트 더미.혐오 테스트 더미&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;4) 그리고 난 다시 짓습니다...&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;효과가 있었단 거지&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 - 나는 그들이 이전에 어떤 제안을 했든 간에 나에게 효과가 있었습니다. 기본적인 이유는 앱에서 cpp 코드가 있는 .cpp 파일 .mm 파일을 보지 않는 한 링크된 g++를 사용하지 않을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다들 감사합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 내용을 읽고 문제를 해결했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러분들은 나눠먹기 좋아요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/376966/using-c-c-static-libraries-from-iphone-objectivec-apps&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>C</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/772</guid>
      <comments>https://codebag.tistory.com/772#entry772comment</comments>
      <pubDate>Mon, 30 Oct 2023 20:57:23 +0900</pubDate>
    </item>
    <item>
      <title>PostgreSQL에 비해 Mysql에 진공이 필요 없는 이유는 무엇입니까?</title>
      <link>https://codebag.tistory.com/771</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PostgreSQL에 비해 Mysql에 진공이 필요 없는 이유는 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 Postgre에 더 익숙합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL보다 SQL.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Postgre에서 랩어라운드 ID 오류가 한 번 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL db를 통해 db의 vacuuming의 중요성을 이해하였습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사실, 이 작업은 처리해야 할 막대한 오버헤드 작업이었습니다. (그리고 이 작업은 몇 달 전에 자동 진공 상태로 업데이트된 이전 버전 7.4.3과 함께 수행되었습니다.)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL과 Postgre를 비교할 때&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL, MySQL이 Postgre의 진공과 같은 오버헤드를 처리할 필요가 없다고 가정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL. 이 가정이 맞습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 PostgreSQL에 비해 MySQL Dbs의 경우 진공이 필요하지 않은 이유는 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL dbs에 진공과 유사한 다른 최적화 대안이 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://rhaas.blogspot.com.au/2011/02/mysql-vs-postgresql-part-2-vacuum-vs.html&quot; papago-id=&quot;3-0&quot;&gt;로버트 하스&lt;/a&gt;는 이 &lt;a href=&quot;http://rhaas.blogspot.com.au/2011/02/mysql-vs-postgresql-part-2-vacuum-vs.html&quot; papago-id=&quot;3-0&quot;&gt;주제에 대해 썼습니다&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;짧은 버전은 InnoDB가 Oracle의 설계와 더 유사한 롤백 로그를 사용한다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;행의 최신 버전만 기본 테이블에 유지됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Postgre와 관련된 기능을 가진 비동기/지연 작업인 로그 퍼징을 관리해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;VACUUM&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 업데이트에 대해 더 많은 쓰기 작업을 수행하고 이전 행 버전에 대한 액세스 속도는 훨씬 느리지만 비동기식 진공 상태가 필요하지 않아 테이블 팽만감 문제가 발생하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 거대한 롤백 세그먼트를 갖거나 롤백할 공간이 부족할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 이는 서로 다른 장점과 문제점을 가진 디자인인 트레이드 오프입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;My ISAM 테이블을 말씀하시는 거라면 완전히 다릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;포스트그레&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL의 테이블은 데이터를 먹어 치우지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ISAM이.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;포스트그레&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL의 테이블은 트랜잭션입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 ISAM은.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;플랫 파일은 필요 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;VACUUM&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것도 좋은 생각은 아닙니다&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Postgre의 MySQL 근사치&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;vacuum&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;OPTIMIZE TABLE tablename&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(&lt;a href=&quot;http://dev.mysql.com/doc/refman/5.7/en/optimize-table.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6-1&quot;&gt;MySQL 문서&lt;/a&gt;).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL에서 Postgre와 유사한 기능을 수행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL은 사용되는 스토리지 엔진에 따라 사용되지 않는 공간을 회수하고 인덱스 및 테이블을 재구성하며 데이터 파일을 조각 모음합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 반드시 그것을 주기적으로 실행해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;vacuum&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포스트그레에서&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/25153532/why-is-it-a-vacuum-not-needed-with-mysql-compared-to-the-postgresql&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>mysql</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/771</guid>
      <comments>https://codebag.tistory.com/771#entry771comment</comments>
      <pubDate>Mon, 30 Oct 2023 20:57:16 +0900</pubDate>
    </item>
    <item>
      <title>사용 - PowerShell에서 여러 문자열을 걸러내는 것을 좋아하지 않습니다.</title>
      <link>https://codebag.tistory.com/770</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 - PowerShell에서 여러 문자열을 걸러내는 것을 좋아하지 않습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2명을 제외한 모든 사용자에 대한 보안 감사를 위해 이벤트 로그를 읽으려고 하는데, 그것이 가능할까요?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-notlike&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오퍼레이터?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 거죠.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Get-EventLog -LogName Security | where {$_.UserName -notlike @(&quot;*user1&quot;,&quot;*user2&quot;)}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단일 사용자를 위해 다음과 같은 작업을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Get-EventLog -LogName Security | where {$_.UserName -notlike &quot;*user1&quot;}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;V2는 적어도 다음을 포함하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-username&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열[]을 가져가고 글로빙을 지원하는 매개 변수입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트를 다음과 같이 확장하려는 V1:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Get-EventLog Security | ?{$_.UserName -notlike &quot;user1&quot; -and $_.UserName -notlike &quot;*user2&quot;}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 인라인 배열에서 &quot;-not contains&quot;를 사용할 수 있지만 이는 사용자 이름에 정확한 일치를 수행할 수 있는 경우에만 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;... | ?{@(&quot;user1&quot;,&quot;user2&quot;) -notcontains $_.username}&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;피터가 옳은 생각을 한 것 같아요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이에 대해서는 -not match 연산자와 함께 정규 표현을 사용하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Get-EventLog Security | ?{$_.Username -notmatch '^user1$|^.*user$'}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 &quot;어떤 시나리오라도 일치&quot;할 수 있도록 읽기 쉬운 함수를 만들었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 버전은 파워쉘 2.0 cmdlet이기 때문에 더 많은 것이 있지만 아래에 붙여넣는 버전은 1.0에서 작동해야 하고 프릴이 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 부르는군요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Get-Process | Where-Match Company -Like '*VMWare*','*Microsoft*'
Get-Process | Where-Match Company -Regex '^Microsoft.*'

filter Where-Match($Selector,[String[]]$Like,[String[]]$Regex) {

    if ($Selector -is [String]) { $Value = $_.$Selector }
    elseif ($Selector -is [ScriptBlock]) { $Value = &amp;amp;$Selector }
    else { throw 'Selector must be a ScriptBlock or property name' }

    if ($Like.Length) {
        foreach ($Pattern in $Like) {
            if ($Value -like $Pattern) { return $_ }
        }
    }

    if ($Regex.Length) {
        foreach ($Pattern in $Regex) {
            if ($Value -match $Pattern) { return $_ }
        }
    }

}

filter Where-NotMatch($Selector,[String[]]$Like,[String[]]$Regex) {

    if ($Selector -is [String]) { $Value = $_.$Selector }
    elseif ($Selector -is [ScriptBlock]) { $Value = &amp;amp;$Selector }
    else { throw 'Selector must be a ScriptBlock or property name' }

    if ($Like.Length) {
        foreach ($Pattern in $Like) {
            if ($Value -like $Pattern) { return }
        }
    }

    if ($Regex.Length) {
        foreach ($Pattern in $Regex) {
            if ($Value -match $Pattern) { return }
        }
    }

    return $_

}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 안 함 -not Like, -not Match with Regular-Expression은 한 줄에서 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Get-MailBoxPermission -id newsletter | ? {$_.User -NotMatch &quot;NT-AUTORIT.*|.*-Admins|.*Administrators|.*Manage.*&quot;}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 검색에서 가장 쉽게 찾을 수 있는 방법은 (아마도 CPU 사용량이 더 많음) 모두 파이프링하는 것이지만, 예를 들어 사용자의 경우 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Get-EventLog -LogName Security | where {$_.UserName -notlike &quot;*user1&quot;} |  where {$_.UserName -notlike &quot;*user2&quot;}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시나리오:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;XX1로 시작하는 모든 컴퓨터를 나열하되 4번째 문자가 L 또는 P인 이름은 나열하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Get-ADComputer -Filter {(name -like &quot;XX1*&quot;)} | Select Name | Where {($_.name -notlike &quot;XX1L*&quot; -and $_.name -notlike &quot;XX1P*&quot;)}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위 스크립트를 상위 스크립트로 묶고 다음과 같은 .count 메서드를 추가하여 해당 스크립트를 셀 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(Get-ADComputer -Filter {(name -like &quot;XX1*&quot;)} | Select Name | Where {($_.name -notlike &quot;XX1L*&quot; -and $_.name -notlike &quot;XX1P*&quot;)}).count
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택 문자열 사용:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Get-EventLog Security | where {$_.UserName | select-string -notmatch user1,user2}
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;$listOfUsernames = @(&quot;user1&quot;, &quot;user2&quot;, &quot;etc&quot;, &quot;and so on&quot;)
Get-EventLog -LogName Security | 
    where { $_.Username -notmatch (
        '(' + [string]::Join(')|(', $listOfUsernames) + ')') }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좀 이상하지만, 사용자 이름을 피할 수는 없습니다(가능하지 않은 경우 사용자 이름은 '\' 또는 '(')'와 같은 Regex 탈출 문자를 사용하지만 작동합니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위에서 언급한 &quot;slipsec&quot;과 같이, 가능하면 -not contains를 사용합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/848859/use-notlike-to-filter-out-multiple-strings-in-powershell&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>PowerShell</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/770</guid>
      <comments>https://codebag.tistory.com/770#entry770comment</comments>
      <pubDate>Mon, 30 Oct 2023 20:57:10 +0900</pubDate>
    </item>
    <item>
      <title>페이지를 다시 로드하지 않고 javascript/jQuery를 사용하여 URL 또는 쿼리 문자열을 업데이트하려면 어떻게 해야 합니까?</title>
      <link>https://codebag.tistory.com/769</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지를 다시 로드하지 않고 javascript/jQuery를 사용하여 URL 또는 쿼리 문자열을 업데이트하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지를 다시 로드하지 않고 프로그램적으로 URL을 업데이트할 수 있는 방법이 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집: 게시글에 제목에 추가한 내용이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지를 다시 로드하고 싶지 않다는 것을 분명히 하고 싶습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한마디로 이야기할 수 없군요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 일반적인 웹 브라우저에는 이를 방지하기 위한 보안 조치가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 목적은 사람들이 웹사이트의 복제본을 만들지 못하도록 하고, URL을 정확하게 보이도록 변경한 다음, 사람들을 속이고 그들의 정보를 얻을 수 있도록 하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 일부 HTML5 호환 웹 브라우저는 사용자가 원하는 것과 유사한 용도로 사용할 수 있는 History API를 구현했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (history.pushState) {
    var newurl = window.location.protocol + &quot;//&quot; + window.location.host + window.location.pathname + '?myNewUrlQuery=1';
    window.history.pushState({path:newurl},'',newurl);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트를 해봤는데 잘 작동했어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지를 다시 로드하지는 않지만 URL 쿼리만 변경할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로토콜이나 호스트 값을 변경할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://diveintohtml5.info/history.html&quot; papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://diveintohtml5.info/history.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history&quot; papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; -  -&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;document.location = &quot;http://my.new.url.com&quot;&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;같은 방법으로 검색할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var myURL = document.location;
document.location = myURL + &quot;?a=parameter&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위치 개체에는 여러 가지 유용한 속성도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;hash            Returns the anchor portion of a URL
host            Returns the hostname and port of a URL
hostname        Returns the hostname of a URL
href            Returns the entire URL
pathname        Returns the path name of a URL
port            Returns the port number the server uses for a URL
protocol        Returns the protocol of a URL
search          Returns the query portion of a URL
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;12-0&quot;&gt;편집:&lt;/strong&gt; document.location의 해시를 설정하는 것은 페이지를 다시 로드하는 것이 아니라, 페이지의 초점 위치를 변경하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트 대상입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#myId&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 사용하여 요소로 스크롤합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;id=&quot;myId&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;id&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;존재하지 않나요?&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 아무 일도 일어나지 않을 거라 믿나요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(단, 다양한 브라우저에서 확인 필요)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;16-0&quot;&gt;EDIT2:&lt;/strong&gt; 단순한 코멘트가 아닌 명확히 하기 위해:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지 변경 없이 전체 URL을 자바스크립트로 업데이트 할 수 없습니다. 보안 제한 사항입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 gmail처럼 보이도록 조작된 임의 페이지 링크를 클릭하고 즉시 URL을 www.gmail.com 로 변경하여 사용자의 로그인 정보를 훔칠 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 브라우저에서는 도메인 뒤에 있는 부분을 변경하여 AJAX 스타일의 일에 대처할 수 있지만, 이미 Osiris에 의해 링크되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;게다가, 할 수 있다 하더라도 아마 이렇게 해서는 안 될 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL은 사용자가 사용자 사이트의 위치를 알려줍니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지 내용을 변경하지 않고 변경하면 조금 혼란스러워집니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;window.history.pushState('obj', 'newtitle', newUrlWithQueryString)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하다&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;window.history.replaceState({}, document.title, updateUri);&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지를 &lt;strong papago-id=&quot;21-1&quot;&gt;다시&lt;/strong&gt; 로드하지 &lt;strong papago-id=&quot;21-1&quot;&gt;않고&lt;/strong&gt; URL을 업데이트하려면 다음과 같이 하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; var url = window.location.href;
 var urlParts = url.split('?');
 if (urlParts.length &amp;gt; 0) {
     var baseUrl = urlParts[0];
     var queryString = urlParts[1];

     //update queryString in here...I have added a new string at the end in this example
     var updatedQueryString = queryString + 'this_is_the_new_url' 

     var updatedUri = baseUrl + '?' + updatedQueryString;
     window.history.replaceState({}, document.title, updatedUri);
 }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지를 &lt;strong papago-id=&quot;22-1&quot;&gt;다시&lt;/strong&gt; 로드하지 &lt;strong papago-id=&quot;22-1&quot;&gt;않고&lt;/strong&gt; 쿼리 문자열을 제거하려면 다음과 같이 하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var url = window.location.href;
if (url.indexOf(&quot;?&quot;) &amp;gt; 0) {
     var updatedUri = url.substring(0, url.indexOf(&quot;?&quot;));
     window.history.replaceState({}, document.title, updatedUri);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새 URL 개체를 정의하고 현재 URL을 할당한 다음 해당 URL 개체에 매개 변수를 추가한 다음 브라우저 상태로 푸시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var url = new URL(window.location.href);
//var url = new URL(window.location.origin + window.location.pathname) &amp;lt;- flush existing parameters
url.searchParams.append(&quot;order&quot;, orderId);
window.history.pushState(null, null, url);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;네.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;document.location이 일반적인 방법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 document.location은 window.location을 제외하고 window.location과 효과적으로 동일합니다. window.location은 이전 브라우저에서 조금 더 많이 지원되므로 preferable한 선택일 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 SO에서 이 스레드를 확인하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/2430936/whats-the-difference-between-window-location-and-document-location-in-javascrip&quot; papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트에서 window.location과 document.location의 차이점은 무엇입니까?&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL 변경을 해시태그로 미리 지정하여 리디렉션을 방지합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리디렉션됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;location.href += '&amp;amp;test='true';
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 리디렉션되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;location.href += '#&amp;amp;test='true';
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반 자바스크립트: document.location = 'http://www.google.com ';&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 브라우저 새로 고침이 발생합니다. 페이지를 다시 로드하지 않고 검색 기록을 구현하기 위해 URL을 업데이트해야 하는 경우 해시를 사용하는 것을 고려하십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 jQuery.hash change를 조사하는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좀 더 구체적으로 말씀해 주셔야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;'URL 업데이트'란 무엇을 의미합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자동으로 다른 페이지로 이동하는 것을 의미할 수 있으며, 이는 확실히 가능합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지를 다시 로드하지 않고 주소 표시줄의 내용만 업데이트하려면 &lt;a href=&quot;https://stackoverflow.com/questions/824349/modify-the-url-without-reloading-the-page/&quot; papago-id=&quot;35-1&quot;&gt;페이지를 다시&lt;/a&gt; 로드하지 &lt;a href=&quot;https://stackoverflow.com/questions/824349/modify-the-url-without-reloading-the-page/&quot; papago-id=&quot;35-1&quot;&gt;않고 URL 수정&lt;/a&gt;을 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예 -&lt;/font&gt;&lt;/font&gt;&lt;code&gt;document.location.hash&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문의용으로&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/12508225/how-do-we-update-url-or-query-strings-using-javascript-jquery-without-reloading&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>jQuery</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/769</guid>
      <comments>https://codebag.tistory.com/769#entry769comment</comments>
      <pubDate>Mon, 30 Oct 2023 20:57:03 +0900</pubDate>
    </item>
    <item>
      <title>란드()는 때때로 같은 것을 연속적으로 반환합니까?</title>
      <link>https://codebag.tistory.com/768</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;란드()는 때때로 같은 것을 연속적으로 반환합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;싱글 스레드 프로그램이 두 번 연속 호출할 때 같은 반환 값을 얻을 수 있는지 궁금합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rand()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇다면, 이 주장이 과연 불붙을 수 있을까요?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;assert(rand() != rand());
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 가지 예를 찾을 수 있다면, 질문에 대한 답은 &quot;예&quot;입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;

int main(int argc, char* argv[])
{
  unsigned int i;
  for(i = 0; ; i++) {
    int r = rand();
    if (r == rand()) {
        printf(&quot;Oops. rand() = %d; i = %d\n&quot;, r, i);
        break;
    }
  }
  return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인쇄물&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Oops. rand() = 3482; i = 32187&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Visual Studio 2010이 설치된 Windows에서 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;EDIT: 아래 버전을 사용하여 2개의 연속적인 란드() 호출이 동일한 값을 반환하는 모든 시퀀스를 탐지합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;C는 rand()가 &quot;0에서 RAND_MAX 범위의 의사 랜덤 정수&quot;를 반환하고 RAND_MAX가 32767 이상이어야 한다고만 지정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PRNG의 품질이나 구현에 제약이 없거나 2회 연속 란드() 호출이 동일한 값을 반환할 수 있는지 여부와 같은 기타 세부 정보는 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;

int main(int argc, char* argv[])
{
  unsigned int i;
  int r1 = rand();
  int r2 = rand();
  for(i = 0; ; i++) {
    if (r1 == r2) {
        printf(&quot;Oops. rand() = %d; i = %d\n&quot;, r1, i);
    }
    r1 = r2;
    r2 = rand();
  }
  return 0;
}
&lt;/code&gt;&lt;/pre&gt;&lt;h3 papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;조사를 했습니다.&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 컴파일러()를 발견했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;msvc10&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)의 랜드 구현은 다른 c/c++ 컴파일러와 마찬가지로 선형 합동 생성기를 사용했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h3 papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선형 합동 생성기&lt;/font&gt;&lt;/h3&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선형 합동 생성기는 반복 방법을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/w3WMw.png&quot; alt=&quot;use the&quot;&gt; &lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ptd-&amp;gt;_holdrand(n)는 ptd-&amp;gt;_holdrand(n+1)와 동일하지 않지만 모드 결과는 동일합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h3 papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;msvc 구현&lt;/font&gt;&lt;/h3&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@nos 결과를 보여줍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;return( ((ptd-&amp;gt;_holdrand = ptd-&amp;gt;_holdrand * 214013L + 2531011L) &amp;gt;&amp;gt; 16) &amp;amp; 0x7fff );

ptd-&amp;gt;_holdrand = 2375716238;
return 3482; (2375716238 &amp;gt;&amp;gt; 16) % 32768
ptd-&amp;gt;_holdrand = 228240921;
return 3482; (228240921 &amp;gt;&amp;gt; 16) % 32768
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막 답은 랜드 ()는 나의 본능과 같은 가치를 두배로 돌려줄 것이라는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이상임의.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rand()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수는, 만약 두번 호출된다면, 매번 같은 결과를 다음의 확률로 반환할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1.0 / RAND_MAX&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지만&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rand()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 진정한 난수 생성기가 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Pseudorandom_number_generator&quot; papago-id=&quot;21-1&quot;&gt;일반적&lt;/a&gt;으로 &lt;a href=&quot;http://en.wikipedia.org/wiki/Linear_congruential_generator&quot; papago-id=&quot;21-3&quot;&gt;선형 합동형&lt;/a&gt;인 의사 난수 생성기(PRNG)입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PRNG의 &lt;em papago-id=&quot;22-1&quot;&gt;내부 상태&lt;/em&gt;는 연속적인 호출에서 반복되어서는 안 되며, 반복된 경우,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rand()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;영원히 같은 번호에 갇힐 겁니다&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 &lt;a href=&quot;http://en.wikipedia.org/wiki/Middle-square_method&quot; papago-id=&quot;23-1&quot;&gt;미들 스퀘어 방법&lt;/a&gt;과 같이 잘못 설계된 알고리즘에서 일어날 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 일부 PRNG 구현은(일부는 아니지만) 내부 상태가 출력 상태보다 더 많은 비트를 가지고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를들면,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;java.util.Random&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 48비트 내부 상태를 사용하지만 출력에 가장 중요한 32비트만 포함합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우, (적어도 이론적으로는) 동일한 내부 상태를 갖지 않고 두 번 연속적으로 동일한 출력을 얻는 것이 가능합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋은 난수 생성기는 때때로 같은 값을 연속으로 두 번 반환해야 &lt;em papago-id=&quot;26-1&quot;&gt;합니다&lt;/em&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;양의 정수 0 &amp;lt;= r &amp;lt; 2^31을 반환한다고 하자.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;연속된 두 숫자가 동일할 확률은 완벽한 난수 생성기의 경우 약 20억 분의 1일 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1,000억 통화에서 같은 두 개의 연속된 숫자가 나오지 &lt;em papago-id=&quot;26-3&quot;&gt;않을&lt;/em&gt; 확률은 약 10^15분의 1입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/24011332/will-rand-sometimes-return-the-same-consecutively&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>C</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/768</guid>
      <comments>https://codebag.tistory.com/768#entry768comment</comments>
      <pubDate>Mon, 30 Oct 2023 20:56:55 +0900</pubDate>
    </item>
    <item>
      <title>Postgre와 동치Oracle 9i의 SQL array() / array_to_string() 함수</title>
      <link>https://codebag.tistory.com/767</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Postgre와 동치&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle 9i의 SQL array() / array_to_string() 함수&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle에서 여러 행을 반환하는 쿼리에서 쉼표로 구분된 값 목록이 있는 단일 행을 반환하여 반환된 행을 단일 행으로 평탄화하고자 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포스트그레에서&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL은 array 및 array_to_string 기능을 사용하여 다음과 같이 구현할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;사람&quot;이라는 표가 주어졌을 때:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;id | name
---------
1  | bob
2  | alice
3  | jon
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select array_to_string(array(select name from people), ',') as names;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반환 예정:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;names
-------------
bob,alice,jon
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle 9i에서 동일한 결과를 얻으려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매트&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;팀 홀은 &lt;a href=&quot;http://www.oracle-base.com/articles/misc/StringAggregationTechniques.php&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;오라클에서 스트링 집합 기법&lt;/a&gt;을 결정적으로 수집하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 9i에 갇혀 있다면, 나의 개인적인 선호는 당신이 할 수 있는 사용자 정의 집합(그 페이지에 string_agg 구현이 있음)을 정의하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT string_agg( name )
  FROM people
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 STRING_AGG 함수를 새로 정의해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;새로운 객체를 생성하는 것을 피해야 하는 경우 다른 접근 방식이 있지만 9i에서는 Postgre보다 더 엉망이 될 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 구문.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;10g에서는 Tim의 기사 말미에 언급된 COLLECT 옵션을 확실히 선호합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 접근 방식의 좋은 점은 집합을 인수로 받아들이는 동일한 기본 함수를 집합 함수와 다중 집합 함수로 모두 사용할 수 있다는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT deptno, tab_to_string(CAST(MULTISET(SELECT ename FROM emp 
WHERE deptno = dept.deptno) AS t_varchar2_tab), ',') FROM dept
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 9i에서는 사용할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SYS_CONNECT_&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;BY_PATH는 유연해서 좋지만 느릴 수 있으니 주의하세요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/4326868/equivalent-to-postgresql-array-array-to-string-functions-in-oracle-9i&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>oracle</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/767</guid>
      <comments>https://codebag.tistory.com/767#entry767comment</comments>
      <pubDate>Mon, 30 Oct 2023 20:56:48 +0900</pubDate>
    </item>
    <item>
      <title>'SELECT'를 사용하여 함수 호출</title>
      <link>https://codebag.tistory.com/766</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'SELECT'를 사용하여 함수 호출&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 가끔 다음과 같은 예를 접합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SELECT...INTO...FROM DUAL&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수를 호출하는 데 사용됩니다. 예:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT some_function INTO a_variable FROM DUAL;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 사용됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;a_variable := some_function;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;A) 함수가 호출되고 있다는 것이 명확하지 않기 때문에, B) PL/SQL 엔진에서 SQL 엔진으로의 전환을 강제한다는 점에서 비효율적이기 때문에 이는 좋은 관행이 아니라는 것이 제 생각입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수를 호출하기 위해 초기 PL/SQL 코딩에서 이것이 필요했던 것과 같이 이것이 왜 행해졌는지 누가 설명할 수 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 보고 있는 코드는 빠르면 오라클 8부터 시작될 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 통찰력이라도 감사히 받겠습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업은 PLSQL 및 Oracle 7 &lt;strong papago-id=&quot;7-1&quot;&gt;이전&lt;/strong&gt;부터 시작되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 언급한 대로 Oracle 7에서는 Best Practice(Best Practice)를 할당할 수 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle 7 이전에는 &lt;strong papago-id=&quot;8-3&quot;&gt;Select...&lt;/strong&gt;을 사용해야 하는 두 가지 &lt;strong papago-id=&quot;8-1&quot;&gt;도구&lt;/strong&gt;가 널리 사용되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;8-3&quot;&gt; 듀얼에서 var로 변경합니다.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한편으로는 일종의 보고서 생성기인 RPT라고 불리는 Oracle Tool이 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;RPT는 배치 프로세스를 생성하는 데 사용될 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 PLSQL을 사용하는 것을 달성하기 위해 결합할 수 있는 두 가지 종류의 매크로가 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저의 첫 번째 오라클 작업은 RPT 배치를 받아 자동으로 PLSQL로 변환하는 프로그램에 의해 생성된 PLSQL 디버깅을 포함했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 2000년 직후에 제 유일한 RPT 핸드북을 버렸습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반면 오라클 Forms 2.x와 그 Menu 구성요소는 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle Menu의 컨텍스트 전환은 Select&lt;strong papago-id=&quot;10-1&quot;&gt;...(선택&lt;/strong&gt;...)을 사용하여 수행되는 경우가 많았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;10-1&quot;&gt; dual에서;&lt;/strong&gt; 테이블 듀얼에서 총 &lt;strong papago-id=&quot;10-3&quot;&gt;6개&lt;/strong&gt;의 레코드에 의해 다루기 힘든 버그가 발생했다는 것을 발견했을 때 얼마나 자랑스러웠는지 아직도 기억합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 중 어떤 것도 증명할 수 없다고 말씀드리기는 죄송하지만, 1년 중 과거를 되돌아보는 시간이고 답을 가지는 것은 정말 재미있는 일입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/34418779/using-select-to-call-a-function&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>oracle</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/766</guid>
      <comments>https://codebag.tistory.com/766#entry766comment</comments>
      <pubDate>Wed, 25 Oct 2023 23:20:28 +0900</pubDate>
    </item>
    <item>
      <title>Android 앱을 프로그래밍적으로 &amp;quot;다시 시작&amp;quot;하려면 어떻게 해야 합니까?</title>
      <link>https://codebag.tistory.com/765</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android 앱을 프로그래밍적으로 &quot;다시 시작&quot;하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫째, 안드로이드에서 애플리케이션을 실제로 죽이거나 다시 시작해서는 안 된다는 것을 알고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저의 사용 사례에서는 서버가 특정 정보를 클라이언트에게 전송하는 특정한 경우에 애플리케이션을 공장 재설정하려고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자는 애플리케이션 인스턴스 하나가 있는 서버에서만 로그인할 수 있습니다(즉, 여러 장치는 허용되지 않음).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 인스턴스에서 &quot;로그인&quot; 잠금이 발생하면 일관성을 유지하기 위해 해당 사용자의 다른 모든 인스턴스는 데이터를 삭제(공장에서 재설정)해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 앱을 삭제하고 다시 설치할 경우 다른 인스턴스 ID가 발생하여 더 이상 잠금을 해제할 수 없기 때문에 강제로 잠금을 해제할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 강제로 잠금 장치를 얻는 것이 가능합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 힘의 가능성 때문에, 우리는 항상 그것이 자물쇠를 가지고 있다는 구체적인 사례를 확인할 필요가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업은 서버에 요청할 때마다 (거의) 수행됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버가 &quot;wrong-lock-id&quot;를 보낼 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;탐지되면 클라이언트 응용프로그램은 모든 내용을 삭제해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 사용 사례였습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 는이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Activity&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로그인을 시작하는 A&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Activity&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 앱의 메인&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Activity&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;공유&lt;/font&gt; &lt;font class=&quot;papago-parent&quot;&gt;값에 따라 &lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;를 미리 설정합니다. L &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;를 시작한 후 L &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;B만 실행되도록 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;를 닫습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;L 또는 B를 시작한 후 L 또는 B만 실행되도록 자체를 닫습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 사용자가 로그인한 경우에는 이미 B가 실행되고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;B는 C를 시작합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 C를콜스&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;startService&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 위해&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;IntentService&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 :D가 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 그러면 다음과 같은 스택이 생성됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(A) &amp;gt; B &amp;gt; C &amp;gt; D&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이벤트는 D의 onHandleIntent 메서드에서 &lt;a href=&quot;http://developer.android.com/reference/android/os/ResultReceiver.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;14-1&quot;&gt;ResultReceiver&lt;/a&gt; R로 전송됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;R은 사용자에게 응용프로그램을 공장에서 재설정하도록 선택할 수 있는 대화상자를 제공하여 해당 이벤트를 처리합니다(데이터베이스 삭제, sharedPrefs 등).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;공장 재설정 후 애플리케이션을 다시 시작하고(모든 활동을 종료하려면) A만 다시 시작하고 로그인을 시작합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Activity&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;랜드 자체 마감:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(A) &amp;gt; L&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클릭 시 Dialog's on Click 메서드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Override
public void onClick(DialogInterface dialog, int which) {

    // Will call onCancelListener
    MyApplication.factoryReset(); // (Deletes the database, clears sharedPrefs, etc.)
    Intent i = new Intent(MyApp.getContext(), A.class);
    i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    MyApp.getContext().startActivity(i);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 그것은.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MyApp&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class MyApp extends Application {
    private static Context context;

    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
    }

    public static Context getContext() {
        return context;
    }

    public static void factoryReset() {
        // ...
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제는 만약 제가 그를 사용한다면.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FLAG_ACTIVITY_NEW_TASK&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;활동 B와 C는 여전히 실행 중입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로그인에서 뒤로 버튼을 누르면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Activity&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C가 보이는데 홈 화면으로 다시 돌아가고 싶습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설정하지 않으면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FLAG_ACTIVITY_NEW_TASK&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류가 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;07-07 12:27:12.272: ERROR/AndroidRuntime(9512): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;활동'을 사용할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Context&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 그 이유는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ServiceIntent&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;D는 또한 에 의해 시작되는 백그라운드 작업에서 호출될 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;AlarmManager&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇다면 활동 스택이 (A) &amp;gt; L이 되는 것을 어떻게 해결할 수 있을까요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나중에 시작 활동을 시작하도록 설정한 후 응용 프로그램을 닫을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Intent mStartActivity = new Intent(context, StartActivity.class);
int mPendingIntentId = 123456;
PendingIntent mPendingIntent = PendingIntent.getActivity(context, mPendingIntentId,    mStartActivity, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager mgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, mPendingIntent);
System.exit(0);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단히 다음과 같은 전화를 걸 수:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static void triggerRebirth(Context context, Intent nextIntent) {
    Intent intent = new Intent(context, YourClass.class);
    intent.addFlags(FLAG_ACTIVITY_NEW_TASK);
    intent.putExtra(KEY_RESTART_INTENT, nextIntent);
    context.startActivity(intent);
    if (context instanceof Activity) {
      ((Activity) context).finish();
    }

    Runtime.getRuntime().exit(0);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/JakeWharton/ProcessPhoenix&quot; papago-id=&quot;34-1&quot;&gt;프로세스&lt;/a&gt;에 사용되는 것&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/JakeWharton/ProcessPhoenix&quot; papago-id=&quot;34-1&quot;&gt;피닉스&lt;/a&gt; 도서관&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대안으로:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 @Oleg Koshkin 답변의 약간 개선된 버전이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 프로세스의 킬을 포함하여 활동을 다시 시작하려면 코드에 따라 시도합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;도우미 클래스 또는 필요한 곳에 배치합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static void doRestart(Context c) {
        try {
            //check if the context is given
            if (c != null) {
                //fetch the packagemanager so we can get the default launch activity 
                // (you can replace this intent with any other activity if you want
                PackageManager pm = c.getPackageManager();
                //check if we got the PackageManager
                if (pm != null) {
                    //create the intent with the default start activity for your application
                    Intent mStartActivity = pm.getLaunchIntentForPackage(
                            c.getPackageName()
                    );
                    if (mStartActivity != null) {
                        mStartActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        //create a pending intent so the application is restarted after System.exit(0) was called. 
                        // We use an AlarmManager to call this intent in 100ms
                        int mPendingIntentId = 223344;
                        PendingIntent mPendingIntent = PendingIntent
                                .getActivity(c, mPendingIntentId, mStartActivity,
                                        PendingIntent.FLAG_CANCEL_CURRENT);
                        AlarmManager mgr = (AlarmManager) c.getSystemService(Context.ALARM_SERVICE);
                        mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, mPendingIntent);
                        //kill the application
                        System.exit(0);
                    } else {
                        Log.e(TAG, &quot;Was not able to restart application, mStartActivity null&quot;);
                    }
                } else {
                    Log.e(TAG, &quot;Was not able to restart application, PM null&quot;);
                }
            } else {
                Log.e(TAG, &quot;Was not able to restart application, Context null&quot;);
            }
        } catch (Exception ex) {
            Log.e(TAG, &quot;Was not able to restart application&quot;);
        }
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 jni 클래스와 모든 정적 인스턴스도 다시 초기화됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Ilya_Gazman 답변을 새로운 API를 사용하기 위해 약간 수정하였습니다(IntentCompat는 API 26부터 사용하지 않음).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Runtime.getRuntime().exit(0)이 System.exit(0)보다 나은 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; public static void triggerRebirth(Context context) {
    PackageManager packageManager = context.getPackageManager();
    Intent intent = packageManager.getLaunchIntentForPackage(context.getPackageName());
    ComponentName componentName = intent.getComponent();
    Intent mainIntent = Intent.makeRestartActivityTask(componentName);
    context.startActivity(mainIntent);
    Runtime.getRuntime().exit(0);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Jake Warton은 최근에 그의 &lt;a href=&quot;https://github.com/JakeWharton/ProcessPhoenix&quot; papago-id=&quot;40-1&quot;&gt;프로세스&lt;/a&gt;를 출판하였습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/JakeWharton/ProcessPhoenix&quot; papago-id=&quot;40-1&quot;&gt;피닉스&lt;/a&gt; 도서관, 믿을 수 있는 방법으로 이것을 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 전화만 걸면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-java prettyprint-override&quot;&gt;&lt;code&gt;ProcessPhoenix.triggerRebirth(context);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라이브러리가 호출 작업을 자동으로 종료하고 응용 프로그램 프로세스를 종료한 후 기본 응용 프로그램 작업을 다시 시작합니다.&lt;/font&gt;&lt;/p&gt;&lt;h2 papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://developer.android.com/reference/kotlin/androidx/core/content/IntentCompat#makeMainSelectorActivity(kotlin.String,%20kotlin.String)&quot; rel=&quot;noreferrer&quot; papago-id=&quot;42-0&quot;&gt;IntentCompat.makeMainSelector&lt;/a&gt; 활동 - 2020년 11월 11일 마지막 테스트&lt;/font&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;런처 활동으로 앱이 복원되고 이전 프로세스가 삭제됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Api 15부터 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static void restart(Context context){
    Intent mainIntent = IntentCompat.makeMainSelectorActivity(Intent.ACTION_MAIN, Intent.CATEGORY_LAUNCHER);
    mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.getApplicationContext().startActivity(mainIntent);
    System.exit(0);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 솔루션은 프로세스/애플리케이션을 다시 시작하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;앱이 홈 액티비티를 &quot;재시작&quot;(그리고 다른 모든 액티비티를 종료)하도록 할 뿐입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 보기에는 다시 시작하는 것처럼 보이지만 프로세스는 동일합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 경우에는 사람들이 이 효과를 얻고 싶어한다고 생각하기 때문에 참고로 여기에 남겨 둡니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public void restart(){
    Intent intent = new Intent(this, YourHomeActivity.class);
    this.startActivity(intent);
    this.finishAffinity();
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;당신의 앱이 예기치 않게 닫혔습니다&quot;를 트리거하지 않은 유일한 코드는 다음과 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;외부 라이브러리를 필요로 하지 않는 비감각 코드이기도 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 타이머도 필요 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static void triggerRebirth(Context context, Class myClass) {
    Intent intent = new Intent(context, myClass);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    context.startActivity(intent);
    Runtime.getRuntime().exit(0);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 API 29 이상에서 작동하는 것을 발견했습니다 - 앱이 실행되지 않을 때 사용자가 실행한 것처럼 앱을 죽이고 다시 시작하기 위한 목적입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public void restartApplication(final @NonNull Activity activity) {
   // Systems at 29/Q and later don't allow relaunch, but System.exit(0) on
   // all supported systems will relaunch ... but by killing the process, then
   // restarting the process with the back stack intact. We must make sure that
   // the launch activity is the only thing in the back stack before exiting.
   final PackageManager pm = activity.getPackageManager();
   final Intent intent = pm.getLaunchIntentForPackage(activity.getPackageName());
   activity.finishAffinity(); // Finishes all activities.
   activity.startActivity(intent);    // Start the launch activity
   System.exit(0);    // System finishes and automatically relaunches us.
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 앱의 런처 활동에 다음과 같은 기능이 있을 때 수행되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;intent-filter&amp;gt;
    &amp;lt;action android:name=&quot;android.intent.action.VIEW&quot;/&amp;gt;
    &amp;lt;action android:name=&quot;android.intent.action.MAIN&quot; /&amp;gt;
    &amp;lt;category android:name=&quot;android.intent.category.LAUNCHER&quot; /&amp;gt;
&amp;lt;/intent-filter&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DEFAULT 카테고리가 필요하다는 댓글을 본 적은 있지만, 그런 경우는 발견하지 못했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 앱의 Application 개체가 다시 생성되는 것을 확인했기 때문에 프로세스가 실제로 종료되고 다시 시작된 것으로 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하는 유일한 목적은 사용자가 Firebase Crashlytics에 대한 충돌 보고를 활성화 또는 비활성화한 후 앱을 다시 시작하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그들의 문서에 따르면, 그 변경 사항이 적용되려면 앱을 다시 시작(프로세스를 삭제하고 다시 생성)해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정말 좋은 속임수가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 문제는 정말 오래된 C++ jni 라이브러리에서 리소스가 유출되었다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어느 순간 작동이 멈췄습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 앱을 종료하고 다시 실행하려고 했지만 작업을 완료하는 것은 프로세스를 완료(또는 삭제)하는 것과 같지 않기 때문에 아무 결과도 없었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(그런데 사용자는 실행 중인 응용프로그램 목록으로 이동하여 해당 응용프로그램을 중지할 수 있습니다. 이렇게 하면 효과는 있지만, 사용자는 응용프로그램을 종료하는 방법을 모릅니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기능의 효과를 관찰하려면 다음을 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;static&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 활동에 변수를 주고 각각 그것을 증가시킵니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 예를 들어 버튼을 누르세요.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;응용프로그램 활동을 종료한 후 응용프로그램을 다시 호출하면 이 정적 변수는 해당 값을 유지합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(애플리케이션이 실제로 종료된 경우에는 변수에 초기값이 할당됩니다.)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(그리고 버그를 고치고 싶지 &lt;em papago-id=&quot;54-1&quot;&gt;않은&lt;/em&gt; 이유에 대해 언급해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 도서관은 수십 년 전에 쓰여졌고 그 이후로 자료들이 유출되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;경영진은 항상 효과가 &lt;em papago-id=&quot;54-3&quot;&gt;있었다고&lt;/em&gt; 믿고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결책 대신 해결책을 제공하는 데 드는 &lt;em papago-id=&quot;54-5&quot;&gt;비용&lt;/em&gt;...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 생각에는, 당신이 이해할 수 있을 것 같습니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 jni 공유(일명 다이나믹, .so) 라이브러리를 초기 상태로 재설정하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;새로운 프로세스로 애플리케이션을 다시 시작하기로 선택했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;System.exit()은 현재 활동을 종료하고 Android는 한 가지 활동을 덜 하면서 응용프로그램을 다시 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;암호는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/** This activity shows nothing; instead, it restarts the android process */
public class MagicAppRestart extends Activity {
    // Do not forget to add it to AndroidManifest.xml
    // &amp;lt;activity android:name=&quot;your.package.name.MagicAppRestart&quot;/&amp;gt;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        System.exit(0);
    }
    public static void doRestart(Activity anyActivity) {
        anyActivity.startActivity(new Intent(anyActivity.getApplicationContext(), MagicAppRestart.class));
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;호출 작업은 코드를 실행할 뿐입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MagicAppRestart.doRestart(this);&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 호출 활동의&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;onPause()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행된 후 프로세스가 다시 생성됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AndroidManifest.xml에서 이 활동에 대해 언급하는 것을 잊지 마십시오.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 방법의 장점은 지연이 없다는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트: Android 2.x에서는 작동했지만 Android 4에서는 뭔가 바뀌었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;네, 앱 리팩터링을 했고 자동으로 A를 끝내지는 못할 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 항상 이것을 실행하고 그것을 끝까지 마칩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;onActivityResult&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이벤트. 이런 식으로 나는 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FLAG_ACTIVITY_CLEAR_TOP&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;+&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FLAG_ACTIVITY_NEW_TASK&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 것을 얻을 수 있는 플래그:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class A extends Activity {

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        finish();
    }

    protected void onResume() {
        super.onResume();
        // ...
        if (loggedIn) {
            startActivityForResult(new Intent(this, MainActivity.class), 0);
        } else {
            startActivityForResult(new Intent(this, LoginActivity.class), 0);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ResultReceiver&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Override
public void onClick(DialogInterface dialog, int which) {
    MyApp.factoryReset();
    Intent i = new Intent(MyApp.getContext(), A.class);
    i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    MyApp.getContext().startActivity(i);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어쨌든 고맙습니다!&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;Intent i = getBaseContext().getPackageManager().getLaunchIntentForPackage( getBaseContext().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;앱을 완전히 다시 시작하는 가장 좋은 방법은 앱을 다시 시작하는 것이지, 단순히 다음과 같은 활동으로 이동하는 것은 아닙니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FLAG_ACTIVITY_CLEAR_TOP&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FLAG_ACTIVITY_NEW_TASK&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 그래서 나의 해결책은 당신의 앱에서 또는 다른 앱에서 하는 것이고, 유일한 조건은 앱 패키지 이름을 아는 것입니다(예: '&lt;em papago-id=&quot;32-1&quot;&gt;com.example.myProject&lt;/em&gt;').&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; public static void forceRunApp(Context context, String packageApp){
    Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(packageApp);
    launchIntent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(launchIntent);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;72-3&quot;&gt;appB&lt;/strong&gt;에서 &lt;strong papago-id=&quot;72-1&quot;&gt;appA&lt;/strong&gt;를 다시 시작하거나 appA를 시작하는 예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;forceRunApp(mContext, &quot;com.example.myProject.appA&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;앱이 실행 중인지 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; public static boolean isAppRunning(Context context, String packageApp){
    ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List&amp;lt;ActivityManager.RunningAppProcessInfo&amp;gt; procInfos = activityManager.getRunningAppProcesses();
    for (int i = 0; i &amp;lt; procInfos.size(); i++) {
        if (procInfos.get(i).processName.equals(packageApp)) {
           return true;
        }
    }
    return false;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;74-0&quot;&gt;참고&lt;/strong&gt;: 이 대답이 주제에서 좀 벗어난다는 것은 알지만, 누군가에게는 정말 도움이 될 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;em papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금도 일하고 있습니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; public void resetApplication() {
    Intent resetApplicationIntent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
    if (resetApplicationIntent != null) {
        resetApplicationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    }
    context.startActivity(resetApplicationIntent);
    ((Activity) context).overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;애플리케이션을 다시 시작하는 가장 좋은 방법은 다음을 사용하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;finishAffinity();&lt;/code&gt; &lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부터,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;finishAffinity();&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;젤리빈 버전에서만 사용할 수 있기 때문에 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ActivityCompat.finishAffinity(YourCurrentActivity.this);&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하위 버전의 경우.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Intent&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫번째 활동을 시작하는 코드는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (Build.VERSION.SDK_INT &amp;gt;= Build.VERSION_CODES.JELLY_BEAN) {
    finishAffinity();
    Intent intent = new Intent(getApplicationContext(), YourFirstActivity.class);
    startActivity(intent);
} else {
    ActivityCompat.finishAffinity(YourCurrentActivity.this);
    Intent intent = new Intent(getApplicationContext(), YourFirstActivity.class);
    startActivity(intent);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;82&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 되길 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용해보기&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FLAG_ACTIVITY_CLEAR_TASK&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/48758656/10376542&quot; papago-id=&quot;84-1&quot;&gt;이&lt;/a&gt; 답변의 Kotlin 버전:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;val intent = Intent(this, YourActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
startActivity(intent)
Runtime.getRuntime().exit(0)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용가능&lt;/font&gt;&lt;/font&gt;&lt;code&gt;startInstrumentation&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 방법&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Activity&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 구현이 비어 있어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Instrumentation&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 명백한 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 이 메서드를 호출하여 앱을 다시 시작할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 경우:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;try {           
    InstrumentationInfo info = getPackageManager().queryInstrumentation(getPackageName(), 0).get(0);
    ComponentName component = new ComponentName(this, Class.forName(info.name));
    startInstrumentation(component, null, null);
} catch (Throwable e) {             
    new RuntimeException(&quot;Failed restart with Instrumentation&quot;, e);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;89&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Instrumentation 클래스 이름을 동적으로 얻지만 하드코드화할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 것들이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;try {           
    startInstrumentation(new ComponentName(this, RebootInstrumentation.class), null, null); 
} catch (Throwable e) {             
    new RuntimeException(&quot;Failed restart with Instrumentation&quot;, e);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;불러&lt;/font&gt;&lt;/font&gt;&lt;code&gt;startInstrumentation&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;앱을 다시 로드합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 방법에 대한 설명을 읽습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 킬 앱처럼 행동한다면 안전하지 않을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;92&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 작업 중인 애플리케이션은 사용자에게 표시할 프래그먼트를 선택할 수 있는 기회를 제공해야 합니다(프래그먼트는 런타임에 동적으로 변경됩니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저에게 가장 좋은 해결책은 애플리케이션을 &lt;strong papago-id=&quot;92-1&quot;&gt;완전히 다시&lt;/strong&gt; 시작하는 것이었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;93&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 저는 많은 해결책을 시도했지만, 그 중 어떤 것도 저에게 효과가 없었습니다. 하지만 이것은:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;final Intent mStartActivity = new Intent(SettingsActivity.this, Splash.class);
final int mPendingIntentId = 123456;
final PendingIntent mPendingIntent = PendingIntent.getActivity(SettingsActivity.this, mPendingIntentId, mStartActivity,
                    PendingIntent.FLAG_CANCEL_CURRENT);
final AlarmManager mgr = (AlarmManager) SettingsActivity.this.getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, mPendingIntent);
this.finishAffinity(); //notice here
Runtime.getRuntime().exit(0); //notice here
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;94&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 다른 사람에게 도움이 되기를 바랍니다!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;95&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;용도:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;navigateUpTo(new Intent(this, MainActivity.class));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;96&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;API 레벨 16(4.1)부터 작동한다고 생각합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;97&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;FLAG_ACTIVE_CLEAR_로 초기화면을 직접 시작합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;TASK 및 FLAG_ACTIVE_NEW_TASK.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;fun triggerRestart(context: Activity) {
    val intent = Intent(context, MainActivity::class.java)
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
    context.startActivity(intent)
    if (context is Activity) {
        (context as Activity).finish()
    }
    Runtime.getRuntime().exit(0)
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;98&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이쪽으로 갑니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Intent i = getBaseContext().getPackageManager().getLaunchIntentForPackage( 
 getBaseContext().getPackageName() );
 i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 startActivity(i);
 finish();
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;99&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드는 안드로이드 8-13 테스트를 통과했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-java prettyprint-override&quot;&gt;&lt;code&gt;public void restartApp() {
    Intent i = getBaseContext().getPackageManager().getLaunchIntentForPackage( getBaseContext().getPackageName() );  
    startActivity(Intent.makeRestartActivityTask(i.getComponent()));  
    Runtime.getRuntime().exit(0);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;100&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;종료를 지연시키기 위해 핸들러를 추가해야 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 200, mPendingIntent);
        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                Runtime.getRuntime().exit(0);
            }
        }, 100);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;101&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시도해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Intent intent = getPackageManager().getLaunchIntentForPackage(getPackageName());
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;102&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/JakeWharton/ProcessPhoenix&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;102-1&quot;&gt;프로세스 피닉스 라이브러리&lt;/a&gt;와 함께.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 시작하려는 활동의 이름은 &quot;A&quot;입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;103&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바맛&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Java
public void restart(){
    ProcessPhoenix.triggerRebirth(context);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;104&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코틀린맛&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// kotlin
fun restart() {
    ProcessPhoenix.triggerRebirth(context)
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;105&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지연 재시작 적용&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;106&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;startDelay시작 지연(밀리초)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; public static void reStartApp(Context context, long startDelay) {
    //Obtain the startup Intent of the application with the package name of the application
    Intent intent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
    PendingIntent restartIntent = PendingIntent.getActivity(context.getApplicationContext(), -1, intent, PendingIntent.FLAG_CANCEL_CURRENT);

    AlarmManager mgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    if (mgr != null) {
        mgr.set(AlarmManager.RTC, System.currentTimeMillis() + startDelay, restartIntent);
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;val i = baseContext.packageManager.getLaunchIntentForPackage(baseContext.packageName)
i!!.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
startActivity(i)
finish()
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;107&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Mikepenz의 Alternative Answer는 제 경우에 약간의 변화가 필요했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/22345538/12021422&quot; papago-id=&quot;107-1&quot;&gt;https://stackoverflow.com/a/22345538/12021422&lt;/a&gt; 내가 수정할 수 있는 Mikepenz의 답변에 대한 Major Credits.&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;108&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 저에게 도움이 된 플러그 앤 플레이 정적 기능이 있습니다.&lt;/font&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;109&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;응용프로그램 컨텍스트만 통과하면 이 기능이 재시작을 처리합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    public static void doRestart(Context c) {
        try {
            // check if the context is given
            if (c != null) {
                // fetch the package manager so we can get the default launch activity
                // (you can replace this intent with any other activity if you want
                PackageManager pm = c.getPackageManager();
                // check if we got the PackageManager
                if (pm != null) {
                    // create the intent with the default start activity for your application
                    Intent mStartActivity = pm.getLaunchIntentForPackage(c.getPackageName());
                    if (mStartActivity != null) {
                        mStartActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        
                        c.getApplicationContext().startActivity(mStartActivity);
                        // kill the application
                        System.exit(0);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            Log.e(&quot;restart&quot;, &quot;Could not Restart&quot;);
        }
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;110&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주 활동 호출 다시 시작활동 방법:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static void restartActivity(Activity mActivity) {
    Intent mIntent = mActivity.getIntent();
    mActivity.finish();
    mActivity.startActivity(mIntent);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;111&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/6609414/how-do-i-programmatically-restart-an-android-app&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>Android</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/765</guid>
      <comments>https://codebag.tistory.com/765#entry765comment</comments>
      <pubDate>Wed, 25 Oct 2023 23:20:21 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트에서 동적 요소에 이벤트 첨부</title>
      <link>https://codebag.tistory.com/764</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트에서 동적 요소에 이벤트 첨부&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동적으로 생성된 목록에 html 데이터를 동적으로 삽입하려고 하는데 동적으로 생성된 버튼에 대해 on click 이벤트를 첨부하려고 하면 이벤트가 발생하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결해 주시면 정말 감사하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트 코드:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;document.addEventListener('DOMContentLoaded', function () {
   document.getElementById('btnSubmit').addEventListener('click', function () {
        var name = document.getElementById('txtName').value;
        var mobile = document.getElementById('txtMobile').value;
        var html = '&amp;lt;ul&amp;gt;';
        for (i = 0; i &amp;lt; 5; i++) {
            html = html + '&amp;lt;li&amp;gt;' + name + i + '&amp;lt;/li&amp;gt;';
        }
        html = html + '&amp;lt;/ul&amp;gt;';

        html = html + '&amp;lt;input type=&quot;button&quot; value=&quot;prepend&quot; id=&quot;btnPrepend&quot; /&amp;gt;';
        document.getElementsByTagName('form')[0].insertAdjacentHTML('afterend', html);
    });

    document.getElementById('btnPrepend').addEventListener('click', function () {
        var html = '&amp;lt;li&amp;gt;Prepending data&amp;lt;/li&amp;gt;';
        document.getElementsByTagName('ul')[0].insertAdjacentHTML('afterbegin', html);
    });
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML 코드:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;form&amp;gt;
    &amp;lt;div class=&quot;control&quot;&amp;gt;
        &amp;lt;label&amp;gt;Name&amp;lt;/label&amp;gt;
        &amp;lt;input id=&quot;txtName&quot; name=&quot;txtName&quot; type=&quot;text&quot; /&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div class=&quot;control&quot;&amp;gt;
        &amp;lt;label&amp;gt;Mobile&amp;lt;/label&amp;gt;
        &amp;lt;input id=&quot;txtMobile&quot; type=&quot;text&quot; /&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div class=&quot;control&quot;&amp;gt;
        &amp;lt;input id=&quot;btnSubmit&quot; type=&quot;button&quot; value=&quot;submit&quot; /&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 당신의 요소가 동적으로 생성되어 나중에 DOM에 첨부되지만 당신의&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;addEventListener&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전에 이미 발생한 호출입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/1687296/what-is-dom-event-delegation&quot; papago-id=&quot;5-1&quot;&gt;이벤트 위임&lt;/a&gt;을 사용하여 이벤트를 처리해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;document.addEventListener(&quot;click&quot;, function(e){
  const target = e.target.closest(&quot;#btnPrepend&quot;); // Or any other selector.

  if(target){
    // Do something with `target`.
  }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Element/closest&quot; papago-id=&quot;6-0&quot; rel=&quot;noreferrer&quot;&gt;&lt;code papago-id=&quot;6-0-0&quot;&gt;closest&lt;/code&gt;&lt;/a&gt; 클릭이 대상 요소 내부 어디에서나 &lt;em papago-id=&quot;6-2&quot;&gt;발생&lt;/em&gt;했거나 대상 요소 &lt;em papago-id=&quot;6-4&quot;&gt;자체&lt;/em&gt;인지 확인합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 이것은 당신의 것이 아닌 경우에 유용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;input id=&quot;btnPrepend&quot;/&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은이 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;button id=&quot;btnPrepend&quot;&amp;gt;&amp;lt;i class=&quot;icon&quot;&amp;gt;+&amp;lt;/i&amp;gt; prepend&amp;lt;/button&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 당신은 클릭을 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;i class=&quot;icon&quot;&amp;gt;+&amp;lt;/i&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery를 사용하면 더욱 쉬워집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;$(document).on(&quot;click&quot;, &quot;#btnPrepend&quot;, function(){
  // Do something with `$(this)`.
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://davidwalsh.name/event-delegate&quot; rel=&quot;noreferrer&quot; papago-id=&quot;11-1&quot;&gt;이벤트 위임에 관한 기사&lt;/a&gt;입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클릭 수를 캡처하여 해결 방법이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;document.body&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이벤트 대상을 확인합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;document.body.addEventListener( 'click', function ( event ) {
  if( event.target.id == 'btnSubmit' ) {
    someFunc();
  };
} );
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DOM에서 요소를 생성하고 추가하는 방법에 차이가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소를 생성할 경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;document.createElement&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 이벤트 수신기를 추가하고 DOM에 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이벤트가 시작됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;html += &quot;&amp;lt;li&amp;gt;test&amp;lt;/li&amp;gt;&quot;'와 같은 문자열로 요소를 만들면 요소는 엄밀히 말하면 문자열에 불과합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열에는 이벤트 수신기를 사용할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하나의 해결책은 다음과 같이 각 요소를 생성하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;document.createElement&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 DOM 요소에 직접 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Sample
let li = document.createElement('li')
document.querySelector('ul').appendChild(li)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소를 삽입한 후에 이벤트를 첨부해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 예를 들어 전역 이벤트를 첨부하지 않는 경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;document&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;삽입된 요소에 대한 특정 이벤트입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;false&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;document.getElementById('form').addEventListener('submit', function(e) {
  e.preventDefault();
  var name = document.getElementById('txtName').value;
  var idElement = 'btnPrepend';
  var html = `
    &amp;lt;ul&amp;gt;
      &amp;lt;li&amp;gt;${name}&amp;lt;/li&amp;gt;
    &amp;lt;/ul&amp;gt;
    &amp;lt;input type=&quot;button&quot; value=&quot;prepend&quot; id=&quot;${idElement}&quot; /&amp;gt;
  `;
  /* Insert the html into your DOM */
  insertHTML('form', html);
  /* Add an event listener after insert html */
  addEvent(idElement);
});

const insertHTML = (tag = 'form', html, position = 'afterend', index = 0) =&amp;gt; {
  document.getElementsByTagName(tag)[index].insertAdjacentHTML(position, html);
}
const addEvent = (id, event = 'click') =&amp;gt; {
  document.getElementById(id).addEventListener(event, function() {
    insertHTML('ul', '&amp;lt;li&amp;gt;Prepending data&amp;lt;/li&amp;gt;', 'afterbegin')
  });
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;form id=&quot;form&quot;&amp;gt;
  &amp;lt;div&amp;gt;
    &amp;lt;label for=&quot;txtName&quot;&amp;gt;Name&amp;lt;/label&amp;gt;
    &amp;lt;input id=&quot;txtName&quot; name=&quot;txtName&quot; type=&quot;text&quot; /&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;input type=&quot;submit&quot; value=&quot;submit&quot; /&amp;gt;
&amp;lt;/form&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Element/matches&quot; rel=&quot;noreferrer&quot; papago-id=&quot;23-1&quot;&gt;element.matchs&lt;/a&gt;의 장점을 활용한 재사용 가능한 기능은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function delegate_event(event_type, ancestor_element, target_element_selector, listener_function)
{
    ancestor_element.addEventListener(event_type, function(event)
    {
        if (event.target &amp;amp;&amp;amp; event.target.matches &amp;amp;&amp;amp; event.target.matches(target_element_selector))
        {
            (listener_function)(event);
        }
    });
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클릭 이벤트에 사용하는 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;delegate_event('click', document, '.alert-button', your_function_here);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이와 유사한 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Get the parent to attatch the element into
var parent = document.getElementsByTagName(&quot;ul&quot;)[0];

// Create element with random id
var element = document.createElement(&quot;li&quot;);
element.id = &quot;li-&quot;+Math.floor(Math.random()*9999);

// Add event listener
element.addEventListener(&quot;click&quot;, EVENT_FN);

// Add to parent
parent.appendChild(element);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 돕기 &lt;a href=&quot;https://github.com/Cristy94/dynamic-listener&quot; papago-id=&quot;26-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;위해&lt;/a&gt; 작은 라이브러리를 만들었습니다. GitHub의 &lt;a href=&quot;https://github.com/Cristy94/dynamic-listener&quot; papago-id=&quot;26-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;라이브러리 소스&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&quot;dynamicListener.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script&amp;gt;
// Any `li` or element with class `.myClass` will trigger the callback, 
// even elements created dynamically after the event listener was created.
addDynamicEventListener(document.body, 'click', '.myClass, li', function (e) {
    console.log('Clicked', e.target.innerText);
});
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능은 jQuery.on()과 비슷합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라이브러리는 &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Element/matches&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;28-1&quot;&gt;Element.matches()&lt;/a&gt; 메서드를 사용하여 지정된 선택기에 대해 대상 요소를 테스트합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이벤트가 트리거되면 대상 요소가 주어진 선택기와 일치할 경우에만 콜백이 호출됩니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;var __ = function(){
    this.context  = [];
    var self = this;
    this.selector = function( _elem, _sel ){
        return _elem.querySelectorAll( _sel );
    }
          this.on = function( _event, _element, _function ){
              this.context = self.selector( document, _element );
              document.addEventListener( _event, function(e){
                  var elem = e.target;
                  while ( elem != null ) {
                      if( &quot;#&quot;+elem.id == _element || self.isClass( elem, _element ) || self.elemEqal( elem ) ){
                          _function( e, elem );
                      }
                      elem = elem.parentElement;
                  }
              }, false );
     };

     this.isClass = function( _elem, _class ){
        var names = _elem.className.trim().split(&quot; &quot;);
        for( this.it = 0; this.it &amp;lt; names.length; this.it++ ){
            names[this.it] = &quot;.&quot;+names[this.it];
        }
        return names.indexOf( _class ) != -1 ? true : false;
    };

    this.elemEqal = function( _elem ){
        var flg = false;
        for( this.it = 0; this.it &amp;lt; this.context.length;  this.it++ ){
            if( this.context[this.it] === _elem &amp;amp;&amp;amp; !flg ){
                flg = true;
            }
        }
        return flg;
    };

}

    function _( _sel_string ){
        var new_selc = new __( _sel_string );
        return new_selc;
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 이벤트를 등록할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;_( document ).on( &quot;click&quot;, &quot;#brnPrepend&quot;, function( _event, _element ){
      console.log( _event );
      console.log( _element );
      // Todo

  });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;브라우저 지원&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;chrome - 4.0, Edge - 9.0, Firefox - 3.5 Safari - 3.2, Opera - 10.0 이상&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;32-1&quot;&gt;jillykate&lt;/em&gt; works에서 게시한 솔루션을 찾았지만 대상 요소가 가장 많이 중첩된 경우에만 해당됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 그렇지 않다면, 이는 부모에 대해 반복함으로써 해결될 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function on_window_click(event)
{
    let e = event.target;

    while (e !== null)
    {
        // --- Handle clicks here, e.g. ---
        if (e.getAttribute(`data-say_hello`))
        {
            console.log(&quot;Hello, world!&quot;);
        }

        e = e.parentElement;
    }
}

window.addEventListener(&quot;click&quot;, on_window_click);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 속성에 따라 이벤트를 처리하거나 청취자를 연결할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 코드는 사용자 지정 속성을 사용하며,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;window&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 다양한 방법들 사이에 실용적인 차이가 있을지 의문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주제가 너무 오래된 것은 알지만, 순수한 것을 사용하여 잘 작동하고 매우 쉽게 작동하는 매우 유용한 코드를 만들기 위해 몇 분의 시간을 할애했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;JAVASCRIPT&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 다음은 간단한 예와 함께 코드입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;String.prototype.addEventListener=function(eventHandler, functionToDo){
  let selector=this;
  document.body.addEventListener(eventHandler, function(e){
    e=(e||window.event);
    e.preventDefault();
    const path=e.path;
    path.forEach(function(elem){
      const selectorsArray=document.querySelectorAll(selector);
      selectorsArray.forEach(function(slt){
        if(slt==elem){
          if(typeof functionToDo==&quot;function&quot;) functionToDo(el=slt, e=e);
        }
      });
    });
  });
}

// And here is how we can use it actually !

&quot;input[type='number']&quot;.addEventListener(&quot;click&quot;, function(element, e){
	console.log( e ); // Console log the value of the current number input
});&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;input type=&quot;number&quot; value=&quot;25&quot;&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;input type=&quot;number&quot; value=&quot;15&quot;&amp;gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;button onclick=&quot;addDynamicInput()&quot;&amp;gt;Add a Dynamic Input&amp;lt;/button&amp;gt;
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
  function addDynamicInput(){
    const inpt=document.createElement(&quot;input&quot;);
          inpt.type=&quot;number&quot;;
          inpt.value=Math.floor(Math.random()*30+1);
    document.body.prepend(inpt);
  }
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 위한 간단한 기능을 만들었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;_case&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;function을 사용하면 대상을 얻을 수 있을 뿐만 아니라 이벤트를 바인딩하는 상위 요소를 얻을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;콜백 함수는 대상을 고정하는 이벤트를 반환합니다 (&lt;/font&gt;&lt;/font&gt;&lt;code&gt;evt.target&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;) 및 셀렉터와 일치하는 부모 요소(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;this&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소를 클릭한 후 필요한 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아직 어느 쪽이 더 나은지 결정하지 못했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;if-else&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;switch&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;var _case = function(evt, selector, cb) {
  var _this = evt.target.closest(selector);
  if (_this &amp;amp;&amp;amp; _this.nodeType) {
    cb.call(_this, evt);
    return true;
  } else { return false; }
}

document.getElementById('ifelse').addEventListener('click', function(evt) {
  if (_case(evt, '.parent1', function(evt) {
      console.log('1: ', this, evt.target);
    })) return false;

  if (_case(evt, '.parent2', function(evt) {
      console.log('2: ', this, evt.target);
    })) return false;

  console.log('ifelse: ', this);
})


document.getElementById('switch').addEventListener('click', function(evt) {
  switch (true) {
    case _case(evt, '.parent3', function(evt) {
      console.log('3: ', this, evt.target);
    }): break;
    case _case(evt, '.parent4', function(evt) {
      console.log('4: ', this, evt.target);
    }): break;
    default:
      console.log('switch: ', this);
      break;
  }
})&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;#ifelse {
  background: red;
  height: 100px;
}
#switch {
  background: yellow;
  height: 100px;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;div id=&quot;ifelse&quot;&amp;gt;
  &amp;lt;div class=&quot;parent1&quot;&amp;gt;
    &amp;lt;div class=&quot;child1&quot;&amp;gt;Click me 1!&amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;div class=&quot;parent2&quot;&amp;gt;
    &amp;lt;div class=&quot;child2&quot;&amp;gt;Click me 2!&amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;div id=&quot;switch&quot;&amp;gt;
  &amp;lt;div class=&quot;parent3&quot;&amp;gt;
    &amp;lt;div class=&quot;child3&quot;&amp;gt;Click me 3!&amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
  &amp;lt;div class=&quot;parent4&quot;&amp;gt;
    &amp;lt;div class=&quot;child4&quot;&amp;gt;Click me 4!&amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 되길 바랍니다!&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;First of all add the dynamic class to the dynamically created inputboxes
var ele = document.createElement('textarea');
ele.className = &quot;css-class-name&quot;; // set the CSS class
ele.setAttribute('type', 'textarea');
ele.setAttribute('value', '');
ele.setAttribute(&quot;id&quot;, `row${rcount}_${c}`);
 then do the following 
            const btns = document.querySelectorAll('.css-class-name');
            for (let i = 0; i &amp;lt; btns.length; i++) {
                btns[i].addEventListener('keyup', function (e) {
                    console.log(e.target.id);
                    let textValues = $(`#${e.target.id}`).val()
                    console.log(&quot;=============values =====&quot;, textValues)
                    //on key press take id and set value of that id what i am inputting.
                });
            }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/69748268/1863761&quot; papago-id=&quot;46-1&quot;&gt;@Pikamander2&lt;/a&gt; 솔루션은 문서나 본문에 대한 이벤트 바인딩을 포함하지 않기 때문에 마음에 듭니다(문서를 클릭할 때마다 수십 개의 이벤트 핸들러가 트리거되어 언젠가는 깨어날 것입니다...).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Pikamander2 솔루션의 개선 사항입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동적으로 추가된 자식 자체가 자식이 있는 돔 요소인 경우(ex:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;button&amp;gt;&amp;lt;u&amp;gt;label&amp;lt;/u&amp;gt;&amp;lt;/button&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;e.target&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반환할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;u&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 다음을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function delegateEvent( eventType, ancestorElem, childSelector, eventHandler ) {

    // Cancel if ancestorElem does not exists
    if( ! ancestorElem || ( typeof ancestorElem === 'string' &amp;amp;&amp;amp; ! ( ancestorElem = document.querySelector( ancestorElem ) ) ) ) {
        return
    }

  ancestorElem.addEventListener( eventType, e =&amp;gt; {
    if( e.target &amp;amp;&amp;amp; e.target.closest &amp;amp;&amp;amp; e.target.closest( childSelector ) ) {
      ( eventHandler )( e )
    }
  } )

}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수가 요소가 아닌 상위 항목에 대한 선택기를 받아들이도록 하기 위해 스니펫도 추가했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 오래된 질문입니다. 하지만 저는 이 문제로 많은 시간을 보냈습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 해결책이 누군가에게 도움이 될 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨텍스트:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Ajax 응답에서 동적으로 생성된 요소에 이벤트 수신기를 첨부합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;클릭 또는 키보드 탐색을 통해 선택 가능:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 경우 모두 동일한 함수를 호출합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫번째 줄은 작동했고, 두번째 줄은 항목을 클릭할 수 없었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;item.addEventListener(&quot;mouseover&quot;, this.mouseOver.bind(this) )
item.addEventListener(&quot;click&quot;, this.clickedItem.bind(this) )
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이는 계속해서 효과가 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;item.click();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(클릭 이벤트가 추가되었음을 알려주고, 해당 기능을 호출하였으나 마우스가 클릭 이벤트를 발송하지 않음)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결책은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;item.addEventListener(&quot;click&quot;, this.clickedItem.bind(this) )
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 항목에 대해:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;item.addEventListener(&quot;mousedown&quot;, this.clickedItem.bind(this) )
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예전 SO 메시지에서 다음과 같이 제안한 것을 보았습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;div&amp;gt;s&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마우스 클릭 이벤트에 응답하지 않습니다. 그러나 내가 읽은 모든 문서는 이와 모순됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서, 여기서 무슨 일이 일어나고 있는지 모르겠어요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/34896106/attach-event-to-dynamic-elements-in-javascript&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>javascript</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/764</guid>
      <comments>https://codebag.tistory.com/764#entry764comment</comments>
      <pubDate>Wed, 25 Oct 2023 23:20:08 +0900</pubDate>
    </item>
    <item>
      <title>바인딩 값이 변경될 때 AngularJS 트리거 ng-animate</title>
      <link>https://codebag.tistory.com/763</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바인딩 값이 변경될 때 AngularJS 트리거 ng-animate&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 내용이 다음을 통해 구속되는 지침이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ng-html-bind-unsafe&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 저는 내용이 바뀌면 전환하는 것을 좋아합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 jquery를 사용하여 그것을 퇴색시키고, 내용 값을 변경하고 다시 퇴색시킬 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AngularJS로 더 우아한 방법이 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ngAnimate를 포함하는 것 외에 새로운 JS 코드를 포함하지 않는 더 좋은 방법이 있다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;span class=&quot;my-example value-{{myValue}}&quot;&amp;gt;{{myValue}}&amp;lt;/span&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값을 사용하는 클래스를 설정하여 클래스 변경에 ngAnimate 능력을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SCSS(또는 LESS)에 다음과 같이 적습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;span.my-example{
    display: inline-block;
    padding: 0 3px;
    background-color: white;
    transition: background-color 0.26s linear 0s;
    &amp;amp;[class*=&quot;-add&quot;] {
        background-color: yellow;
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 voila!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ngAnimate가 'value-2-add', 'value-10-add' 등의 클래스를 자동으로 추가 및 제거함에 따라 값이 변경될 때마다 배경색이 노란색과 등으로 바뀝니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 1.2.0에서는 내용 변경을 지켜보고 추가한 다음 클래스를 제거하는 지시문을 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 페이딩 효과를 트리거하는 클래스 추가 및 제거에 애니메이션을 연결할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;module.directive('contentChange', function(){

 return {

  scope: {
   content: '='
  },

  template: '&amp;lt;span ng-bind-html=&quot;myContent&quot;&amp;gt;&amp;lt;/span&amp;gt;',

  link: function(scope, element, attrs){
   scope.$watch('content', function(){

    //add fader class to element

    scope.myContent = content;

    //remove fader class from element
   });
  };
 } //return
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 1.2 애니메이션에 대한 인기 기사입니다. http://www.yearofmoo.com/2013/08/remastered-animation-in-angularjs-1-2.html&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 바인딩 중에 텍스트를 강조 표시하려고 할 때 비슷한 문제가 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 날렵한 UI를 위해 변경되는 텍스트를 강조하는 것이 목표입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;UI 관점에서는 양식을 작성하는 동안 사용자가 무엇이 변경되는지 알 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;12-0&quot;&gt;제가 배운 내용은 &lt;/strong&gt;이렇습니다 (아래 &lt;a href=&quot;http://jsfiddle.net/bebold/8MAKT/1&quot; rel=&quot;nofollow&quot; papago-id=&quot;12-2&quot;&gt;fiddle&lt;/a&gt; 첨부했습니다)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;13-0&quot;&gt;첫째,&lt;/strong&gt; 시계를 사용하고 싶지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 true::false on ng-class의 불쾌한 사이클이 생성되므로 깨끗한 전환이 출력되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;14-0&quot;&gt;둘째,&lt;/strong&gt; 각진 것을 원소를 찾아서 바꾸는 jquery로 생각할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;각도의 핵심은 제가 처음에 시도한 것이 심각하게 부족했던 재사용성입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;15-0&quot;&gt;셋째,&lt;/strong&gt; ng-focus, ng-blur, ng-click, (... 등)과 같은 이벤트는 제가 원하는 결과를 얻는 데 있어 중요한 요소입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 솔루션은 ng-focus와 ng-blur를 사용하여 입력이 편집되는 시점을 감지하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input ng-focus=&quot;highlight('name')&quot; ng-blur=&quot;doneHighlight('name')&quot; 
ng-model=&quot;user.name&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ng-focus 중에 하이라이트 함수를 호출하고 '이름'이라는 인수를 통과합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 논쟁은 재사용 가능성의 핵심입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; $scope.highlight = function(className){
    $scope.toggle = className;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;통과하면 토글이 인수와 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 키커가...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div  ng-class=&quot;{'toggle': toggle=='name', 'noToggle': toggle=='name'+false}&quot;&amp;gt;
    {{user.name}}
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;토글이 == to passed 인수인 경우 == to 'name' + false일 때 'noToggle' 클래스가 적용되고 부드러운 강조 표시 해제 애니메이션이 적용됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;21-0&quot;&gt;잠깐...&lt;/strong&gt; 응블러는?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;질문해주셔서 기쁩니다! ng-blur는 'doneHighlight' 함수를 호출하여 같은 클래스의 논쟁을 통과합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$scope.doneHighlight = function(className){
    $scope.toggle = className + false;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 인수를 통과할 때 클래스 이름 끝에 잘못된 값을 붙이기도 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 jQuery와는 다른 사고방식이지만 필요한 만큼 컨트롤러의 기능을 재사용할 수 있게 해줍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 됐기를!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 더 이상의 질문에 대답할 수 있게 되어 기쁩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://jsfiddle.net/bebold/8MAKT/1&quot; rel=&quot;nofollow&quot; papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://jsfiddle.net/bebold/8MAKT/1&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/18991014/angularjs-trigger-ng-animate-when-binding-value-change&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>AngularJS</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/763</guid>
      <comments>https://codebag.tistory.com/763#entry763comment</comments>
      <pubDate>Wed, 25 Oct 2023 23:19:55 +0900</pubDate>
    </item>
    <item>
      <title>PowerShell 스크립트에서 C# .cs 파일 실행</title>
      <link>https://codebag.tistory.com/762</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell 스크립트에서 C# .cs 파일 실행&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PowerShell V2&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 파일을 이동하고 일부 서비스를 설치하는 스크립트입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 파워쉘 스크립트 중간쯤에 .cs 파일을 호출해서 실행하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;전화에 관한 많은 기사들을 발견했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PowerShell&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부터&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C#&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 반대는 없습니다&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;C# 파일을 한 번만 실행하고 PowerShell 스크립트를 계속 실행했으면 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 수행하는 방법을 설명하는 기사의 방향을 알려줄 수 있는 사람이나 자신을 알고 도움을 줄 수 있다면 매우 감사할 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리가 도망칠 수 없는 이유를 못 봤어요&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.cs&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파워쉘에서 직접 파일을 만들어서 키스의 스나이프를 가져다가 실종자를 추가했습니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Get-Content&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OP가 요구하는 것을 말 그대로 수행할 부분입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드를 컴파일할 필요가 없고 편집만 하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-Path&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 주장을 가리킵니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.cs&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-bsh prettyprint-override&quot;&gt;&lt;code&gt;$source = Get-Content -Path &quot;A:\basic.cs&quot;
Add-Type -TypeDefinition &quot;$source&quot;

# Call a static method
[BasicTest]::Add(4, 3)

# Create an instance and call an instance method
$basicTestObject = New-Object BasicTest
$basicTestObject.Multiply(5, 2)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Basic.cs&lt;/font&gt;&lt;/h2&gt; 
&lt;pre class=&quot;lang-cs prettyprint-override&quot;&gt;&lt;code&gt;public class BasicTest
{
    public static int Add(int a, int b)
    {
        return (a + b);
    }

    public int Multiply(int a, int b)
    {
        return (a * b);
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용가능&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Add-Type&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C# 코드를 컴파일하여 현재 PowerShell 세션에 추가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 다른 코드와 마찬가지로 C# 코드를 호출합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET 프레임워크 코드.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 의 예입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;man page&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Add-Type(추가 유형):&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;PS C:\&amp;gt;$source = @&quot;
public class BasicTest
{
  public static int Add(int a, int b)
    {
        return (a + b);
    }
  public int Multiply(int a, int b)
    {
    return (a * b);
    }
}
&quot;@

PS C:\&amp;gt;Add-Type -TypeDefinition $source
PS C:\&amp;gt;[BasicTest]::Add(4, 3)
PS C:\&amp;gt;$basicTestObject = New-Object BasicTest
PS C:\&amp;gt;$basicTestObject.Multiply(5, 2)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;잘못된 걸 찾으시는군요&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;C#을 어셈블리에 넣고 를 호출하는 것처럼 PowerShell에서 공용 클래스, 기능 및 메서드를 호출합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파워셸의 NET Framework입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell에서 C# 소스를 컴파일하고 실행하려면 &lt;a href=&quot;https://devblogs.microsoft.com/scripting/weekend-scripter-run-c-code-from-within-powershell/&quot; papago-id=&quot;16-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Weekend Scripter:&lt;/a&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://devblogs.microsoft.com/scripting/weekend-scripter-run-c-code-from-within-powershell/&quot; papago-id=&quot;16-1&quot; rel=&quot;nofollow noreferrer&quot;&gt; PowerShell 내에서 C# 코드를 실행&lt;/a&gt;합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 경우 *.bat 파일에서 c# 스크립트를 실행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;c# 스크립트 생성(예: Program.cs )&lt;/font&gt;&lt;/font&gt;&lt;code&gt;public static void Main()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;*.bat(예: Run.bat) 파일을 생성하고 다음 코드를 배치합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre class=&quot;lang-bash prettyprint-override&quot;&gt;&lt;code&gt;@ECHO off
Echo Please run as administrator
setlocal
cd /d %~dp0
set csDir=%cd%\Program.cs
powershell ^
set-executionpolicy remotesigned; ^
$source = Get-Content -Raw -Path %csDir%; ^
Add-Type -TypeDefinition &quot;$source&quot;; ^
[Program]::Main()
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;3&quot;&gt; 
 &lt;li papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;달려.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;splited&quot;&gt;A &lt;/font&gt;&lt;code&gt;.cs&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일을 직접 읽을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Add-Type -Path 'program.cs'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/add-type?view=powershell-5.1&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/add-type?view=powershell-5.1&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/24868273/run-a-c-sharp-cs-file-from-a-powershell-script&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>PowerShell</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/762</guid>
      <comments>https://codebag.tistory.com/762#entry762comment</comments>
      <pubDate>Wed, 25 Oct 2023 23:19:48 +0900</pubDate>
    </item>
    <item>
      <title>$templateRequestProvider의 Angularjs 알 수 없는 공급자</title>
      <link>https://codebag.tistory.com/761</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;$templateRequestProvider의 Angularjs 알 수 없는 공급자&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;index.html에 다른 html 파일을 템플릿으로 포함하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 위해 ng-view 지시를 사용하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 오류가 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Unknown provider: $templateRequestProvider &amp;lt;- $templateRequest &amp;lt;- $route &amp;lt;- ngViewDirective&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 사용하고 있는 코드는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;'use strict';
 var surveyApp = angular.module('surveyApp',['ngRoute']);
    surveyApp.factory('surveyFactory',function (){
 return {}
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨트롤러는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;surveyApp.controller('profileController', function($scope,surveyFactory) {
    // create a message to display in our view
    $scope.message = 'This is the profile page';
});

surveyApp.controller('surveysController', function($scope,surveyFactory) {
    // create a message to display in our view
    $scope.message = 'This is the surveys page';
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구성:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;surveyApp.config(function($routeProvider, $locationProvider) {
$routeProvider
    .when('/', {    
        templateUrl : 'pages/profile.html',
        controller  : 'profileController'
    })

    .when('/surveys', {
        templateUrl : 'pages/surveys.html',
        controller  : 'surveysController'
    });
$locationProvider.html5Mode(true);
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;body ng-app=&quot;surveyApp&quot;&amp;gt;
    &amp;lt;div id=&quot;main&quot;&amp;gt;
        &amp;lt;div ng-view&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어디가 그리운 거지?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;됐어요 대부분의 경우엔&lt;/font&gt;&lt;/font&gt;&lt;code&gt;versions&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;angular-route와 angularjs가 서로 충돌했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 이후 계속되는 루프 요청으로 대부분 페이지가 다운되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.when('/', {    
    templateUrl : 'pages/profile.html',
    controller  : 'profileController'
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'/'를 볼 때마다 다시 같은 페이지로 리디렉션되어 무한 리다이렉트 루프를 형성했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 마지막에 사용해야 첫 번째 것을 확인하고 무언가가 남아 있으면 '/' 경로를 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 같은 문제가 있었는데, 저도 의존성이 문제였지만 경로가 각진 것은 아니었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저에게 오류를 일으킨 의존성은 각부트스트랩이었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 우리 프로젝트의 각도 버전은 1.28이고 각도 경로도 1.28입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 오류는 각도 부트스트랩을 0.12.1에서 0.13으로 업데이트할 때 트리거되었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 코드의 유일한 문제는 다음의 클로징 컬리 브레이스가 누락되었다는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;surveyFactory&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정의.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;앱 및 공장 정의 코드를 아래로 변경하여 문제를 해결합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  var surveyApp = angular.module('surveyApp',['ngRoute']);

  surveyApp.factory('surveyFactory',function (){
      return {}
  });
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/26213627/angularjs-unknown-provider-in-templaterequestprovider&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>AngularJS</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/761</guid>
      <comments>https://codebag.tistory.com/761#entry761comment</comments>
      <pubDate>Wed, 25 Oct 2023 23:19:41 +0900</pubDate>
    </item>
    <item>
      <title>Angular 4/5+의 API에서 이미지를 얻는 중?</title>
      <link>https://codebag.tistory.com/760</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular 4/5+의 API에서 이미지를 얻는 중?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular 4를 이용한 개발은 처음입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;API로부터 이미지 표시에 대한 응답을 받는 중에 문제가 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;API에서 이미지 파일에는 입력 스트림 파일이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;검색해서 제대로 표시하는 방법을 모르겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누가 해결해 줄 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 이것을.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;strong papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Image.Component.ts:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt; this.http.get('http://localhost:8080/xxx/download/file/596fba76ed18aa54e4f80769')
          .subscribe((response) =&amp;gt; { var blob = new Blob([response.text()], {type: &quot;image/png&quot;});
            console.log(blob);
            console.log(window.btoa(blob.toString()));           
 });
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과는 이 =&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;W29iamVjdCBCbG9iXQ==&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 하지만 그것은 정확한 형식이 아닙니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 이것도 시도해 봤습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;this.http.get('http://localhost:8080/xxx/download/file/596fba76ed18aa54e4f80769').map(Image=&amp;gt;Image.text())
  .subscribe(data =&amp;gt; {
    console.log((data.toString()));   
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과는 =&amp;gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; ����\ExifII*��7                                                      ��DuckyK��fhttp://ns.adobe.com/xap/1.0/&amp;lt;?xpacket begin=&quot;&quot; id=&quot;W5M0MpCehiHzreSzNTczkc9d&quot;?&amp;gt; &amp;lt;x:xmpmeta xmlns:x=&quot;adobe:ns:meta/&quot; x:xmptk=&quot;Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27        &quot;&amp;gt; &amp;lt;rdf:RDF xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&amp;gt; &amp;lt;rdf:Description rdf:about=&quot;&quot; xmlns:xmpMM=&quot;http://ns.adobe.com/xap/1.0/mm/&quot; xmlns:stRef=&quot;http://ns.adobe.com/xap/1.0/sType/ResourceRef#&quot; xmlns:xmp=&quot;http://ns.adobe.com/xap/1.0/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmpMM:OriginalDocumentID=&quot;xmp.did:0280117407206811A2188F30B3BD015B&quot; xmpMM:DocumentID=&quot;xmp.did:E2C71E85399511E7A5719C5BBD3DDB73&quot; xmpMM:InstanceID=&quot;xmp.iid:E2C71E84399511E7A5719C5BBD3DDB73&quot; xmp:CreatorTool=&quot;Adobe Photoshop CC 2014 (Windows)&quot;&amp;gt; &amp;lt;xmpMM:DerivedFrom stRef:instanceID=&quot;xmp.iid:7092a9cd-b3fd-bb49-b53c-9b6e1aa1ac93&quot; stRef:documentID=&quot;adobe:docid:photoshop:40615934-3680-11e7-911d-f07c687d49b8&quot;/&amp;gt; &amp;lt;dc:rights&amp;gt; &amp;lt;rdf:Alt&amp;gt; &amp;lt;rdf:li xml:lang=&quot;x-default&quot;&amp;gt;                                                      &amp;lt;/rdf:li&amp;gt; &amp;lt;/rdf:Alt&amp;gt; &amp;lt;/dc:rights&amp;gt; &amp;lt;dc:creator&amp;gt; &amp;lt;rdf:Seq/&amp;gt; &amp;lt;/dc:creator&amp;gt; &amp;lt;/rdf:Description&amp;gt; &amp;lt;/rdf:RDF&amp;gt; &amp;lt;/x:xmpmeta&amp;gt; &amp;lt;?xpacket end=&quot;r&quot;?&amp;gt;���Photoshop 3.08BIMJZ%Gt6                                                      8BIM%�&amp;lt;&quot;.}��νz��܌��Adobed����  
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;window.btoa를 사용하여 인코딩을 했었습니다. 라틴 범위가 아닌 오류여야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설정해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;responseType: ResponseContentType.Blob&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GET-Request 설정에서 이미지를 blob으로 가져와 나중에 dabase64 인코딩된 소스로 변환할 수 있기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 코드는 좋지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업을 올바르게 수행하려면 API에서 이미지를 가져올 수 있는 별도의 서비스를 만듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;구성 요소에서 HTTP-Request를 호출하는 것은 좋지 않기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작동 예는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만들다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;image.service.ts&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 코드를 입력합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각도 4:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;getImage(imageUrl: string): Observable&amp;lt;File&amp;gt; {
    return this.http
        .get(imageUrl, { responseType: ResponseContentType.Blob })
        .map((res: Response) =&amp;gt; res.blob());
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각도 5+:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;getImage(imageUrl: string): Observable&amp;lt;Blob&amp;gt; {
  return this.httpClient.get(imageUrl, { responseType: 'blob' });
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중요:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular 5+ 이므로 새 제품을 사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HttpClient&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더뉴&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HttpClient&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 JSON을 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 응답 유형이 필요한 경우 다음을 설정하여 지정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;responseType: 'blob'&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 그것에 대해서는 &lt;a href=&quot;https://angular.io/guide/http#requesting-non-json-data&quot; papago-id=&quot;21-1&quot; rel=&quot;noreferrer&quot;&gt;여기&lt;/a&gt;서 더 읽어보세요.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 당신은 당신의 컴퓨터에 몇 가지 기능을 만들어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;image.component.ts&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지를 가져와서 html로 보여주는 것.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Blob에서 이미지를 만들려면 자바스크립트의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FileReader&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 여기 새로운 기능이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FileReader&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 리더의 load-Event를 들어봅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과적으로 이 함수는 img src 속성에서 사용할 수 있는 base64 인코딩 이미지를 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;imageToShow: any;

createImageFromBlob(image: Blob) {
   let reader = new FileReader();
   reader.addEventListener(&quot;load&quot;, () =&amp;gt; {
      this.imageToShow = reader.result;
   }, false);

   if (image) {
      reader.readAsDataURL(image);
   }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 생성된 를 사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ImageService&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;api에서 이미지를 가져올 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터를 구독하고 이 데이터를 다음에 제공해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;createImageFromBlob&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;-기능.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 기능 예시입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;getImageFromService() {
      this.isImageLoading = true;
      this.imageService.getImage(yourImageUrl).subscribe(data =&amp;gt; {
        this.createImageFromBlob(data);
        this.isImageLoading = false;
      }, error =&amp;gt; {
        this.isImageLoading = false;
        console.log(error);
      });
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 당신은 당신의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;imageToShow&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;-HTML 템플릿의 변수는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;img [src]=&quot;imageToShow&quot;
     alt=&quot;Place image title&quot;
     *ngIf=&quot;!isImageLoading; else noImageFound&quot;&amp;gt;
&amp;lt;ng-template #noImageFound&amp;gt;
     &amp;lt;img src=&quot;fallbackImage.png&quot; alt=&quot;Fallbackimage&quot;&amp;gt;
&amp;lt;/ng-template&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 설명이 이해하기 쉽고 프로젝트에 사용할 수 있기를 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackblitz.com/edit/angular-1yr75s&quot; rel=&quot;noreferrer&quot; papago-id=&quot;33-1&quot;&gt;여기&lt;/a&gt;서 Angular 5+의 작동 예를 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각도 5 :&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; getImage(id: string): Observable&amp;lt;Blob&amp;gt; {
    return this.httpClient.get('http://myip/image/'+id, {responseType: &quot;blob&quot;});
}
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt; 
 &lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;angular http를 사용할 필요가 없습니다. js native functions로 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;// you will ned this function to fetch the image blob.
async function getImage(url, fileName) {
     // on the first then you will return blob from response
    return await fetch(url).then(r =&amp;gt; r.blob())
    .then((blob) =&amp;gt; { // on the second, you just create a file from that blob, getting the type and name that intend to inform
         
        return new File([blob], fileName+'.'+   blob.type.split('/')[1]) ;
    });
}

// example url
var url = 'https://img.freepik.com/vetores-gratis/icone-realista-quebrado-vidro-fosco_1284-12125.jpg';

// calling the function
getImage(url, 'your-name-image').then(function(file) {

    // with file reader you will transform the file in a data url file;
    var reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onloadend = () =&amp;gt; {
    
    // just putting the data url to img element
        document.querySelector('#image').src = reader.result ;
    }
})&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;img src=&quot;&quot; id=&quot;image&quot;/&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/45530752/getting-image-from-api-in-angular-4-5&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>angular</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/760</guid>
      <comments>https://codebag.tistory.com/760#entry760comment</comments>
      <pubDate>Wed, 25 Oct 2023 23:19:34 +0900</pubDate>
    </item>
    <item>
      <title>두 데이터 프레임이 동일한지 확인하는 방법</title>
      <link>https://codebag.tistory.com/759</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 데이터 프레임이 동일한지 확인하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;이 질문에는 이미 다음&lt;/b&gt;과 같은 &lt;b papago-id=&quot;1-1&quot;&gt;답이 있습니다&lt;/b&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/11767851/regarding-matrix-comparison-in-r&quot; dir=&quot;ltr&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;R의 행렬 비교 관련&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(1개 답변)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;닫힘&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;4-1&quot; title=&quot;2013-10-06 19:42:17Z&quot; papago-attr-id=&quot;1&quot;&gt;9년 전&lt;/span&gt;에.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;   &lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;R에 대규모 데이터셋이 있다고 가정해 보겠습니다. 두 데이터셋이 동일한지 여부만 알고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 동일한 결과를 얻기 위해 다양한 알고리즘을 실험할 때 자주 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 다음과 같은 데이터셋이 있다고 가정해 보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df1 &amp;lt;- data.frame(num = 1:5, let = letters[1:5])
df2 &amp;lt;- df1
df3 &amp;lt;- data.frame(num = c(1:5, NA), let = letters[1:6])
df4 &amp;lt;- df3
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 그들을 비교하는 방법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;table(x == y, useNA = 'ifany')
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터셋에 NA가 없을 때 유용한 기능:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; table(df1 == df2, useNA = 'ifany')
TRUE 
  10 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 NA가 있는 경우에는 그렇지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; table(df3 == df4, useNA = 'ifany')
TRUE &amp;lt;NA&amp;gt; 
  11    1 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 다음과 같은 정보를 쉽게 되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NA&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 데이터 프레임이 &lt;em papago-id=&quot;1-1&quot;&gt;동일&lt;/em&gt;하다는 것을 알고 있기 때문에 문제가 되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제는.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NA == &amp;lt;anything&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수확량&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NA&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 그래서 데이터셋 중 하나가 있을 때마다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NA&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 같은 입장에 있는 다른 사람이 무엇을 가졌는지는 중요하지 않습니다. 결과는 항상 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NA&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;table()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터셋을 비교하는 것은 제게 이상적이지 않은 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;7-1&quot;&gt;두 개의 데이터 프레임이 동일한지 확인하려면 어떻게 해야 합니까?&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추신: 여러 데이터 &lt;a href=&quot;https://stackoverflow.com/questions/7459138/comparing-2-datasets-in-r&quot; papago-id=&quot;17-3&quot;&gt;세트&lt;/a&gt;를&lt;a href=&quot;https://stackoverflow.com/questions/12567524/r-comparing-several-datasets&quot; papago-id=&quot;17-1&quot;&gt; R에서 비교&lt;/a&gt;하거나 R에서 두&lt;a href=&quot;https://stackoverflow.com/questions/7459138/comparing-2-datasets-in-r&quot; papago-id=&quot;17-3&quot;&gt; 데이터&lt;/a&gt; 세트를 &lt;a href=&quot;https://stackoverflow.com/questions/7459138/comparing-2-datasets-in-r&quot; papago-id=&quot;17-3&quot;&gt;비교&lt;/a&gt;하거나 &lt;a href=&quot;https://stackoverflow.com/questions/8872333/compare-datasets-in-r&quot; papago-id=&quot;17-5&quot;&gt;R&lt;/a&gt;에서 데이터 &lt;a href=&quot;https://stackoverflow.com/questions/8872333/compare-datasets-in-r&quot; papago-id=&quot;17-5&quot;&gt;세트를 비교&lt;/a&gt;하는 것은 아닙니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모두 찾아보세요. 동등합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;탑승자가 몇 명 있지만, 당신에게 적합할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;all.equal(df3,df4)
# [1] TRUE
all.equal(df2,df1)
# [1] TRUE
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/users/1493368/metrics&quot; papago-id=&quot;8-1&quot;&gt;Metrics&lt;/a&gt;가 지적한 바와 같이, 사용자는 또한&lt;/font&gt;&lt;/font&gt;&lt;code&gt;identical()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터셋을 비교합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 접근법과 &lt;a href=&quot;https://stackoverflow.com/a/19119398/1169233&quot; papago-id=&quot;9-1&quot;&gt;코도레미파&lt;/a&gt;의 접근법의 차이점은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;identical()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그냥 양보할 것입니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;TRUE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FALSE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 비교되는 물체들이 동일한지 그렇지 않은지에 따라, 반면에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;all.equal()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘 중 하나가 돌아올 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;TRUE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 객체들 간의 차이점에 대한 힌트.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 다음을 생각해 보겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; identical(df1, df3)
[1] FALSE

&amp;gt; all.equal(df1, df3)
[1] &quot;Attributes: &amp;lt; Component 2: Numeric: lengths (5, 6) differ &amp;gt;&quot;                                
[2] &quot;Component 1: Numeric: lengths (5, 6) differ&quot;                                                
[3] &quot;Component 2: Lengths: 5, 6&quot;                                                                 
[4] &quot;Component 2: Attributes: &amp;lt; Component 2: Lengths (5, 6) differ (string compare on first 5) &amp;gt;&quot;
[5] &quot;Component 2: Lengths (5, 6) differ (string compare on first 5)&quot;   
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;게다가 제가 테스트한 바로는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;identical()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보다 훨씬 더 빨리 달리는 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;all.equal()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/19119320/how-to-check-if-two-data-frames-are-equal&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>DataFrame</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/759</guid>
      <comments>https://codebag.tistory.com/759#entry759comment</comments>
      <pubDate>Wed, 25 Oct 2023 23:19:26 +0900</pubDate>
    </item>
    <item>
      <title>MySQL - 이전 행에서 값 빼기, 그룹화 기준</title>
      <link>https://codebag.tistory.com/758</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL - 이전 행에서 값 빼기, 그룹화 기준&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SN 번호로 이전의 소비액을 기준으로 해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 제 데이터입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TABLE 에너지 로그&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SN     Date                 Value
2380   2012-10-30 00:15:51  21.01
2380   2012-10-31 00:31:03  22.04
2380   2012-11-01 00:16:02  22.65
2380   2012-11-02 00:15:32  23.11
20100  2012-10-30 00:15:38  35.21
20100  2012-10-31 00:15:48  37.07
20100  2012-11-01 00:15:49  38.17
20100  2012-11-02 00:15:19  38.97
20103  2012-10-30 10:27:34  57.98
20103  2012-10-31 12:24:42  60.83
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 제가 필요로 하는 결과입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SN      Date                 Value  consumption
2380    2012-10-30 00:15:51  21.01  0
2380    2012-10-31 00:31:03  22.04  1.03
2380    2012-11-01 00:16:02  22.65  0.61
2380    2012-11-02 00:15:32  23.11  0.46
20100   2012-10-30 00:15:38  35.21  0
20100   2012-10-31 00:15:48  37.07  1.86
20100   2012-11-01 00:15:49  38.17  1.1
20100   2012-11-02 00:15:19  38.97  0.8
20103   2012-10-30 10:27:34  57.98  0
20103   2012-10-31 12:24:42  60.83  2.85
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 변수를 사용하는 작업은 인라인 프로그램 변수 할당과 마찬가지로 훌륭합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 FROM 절은 @ 변수를 &quot;선언&quot;하며 기본값은 공백으로 설정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 원하는 순서대로 레코드를 조회합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;시간이 많이 걸릴 수 있는 반복적인 하위 쿼리 대신 데이터를 한 번 통과합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 행 읽기에 대해 @last를 비교합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 레코드의 SN이 있는 SN.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다를 경우 항상 0을 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;동일한 경우 단순 차이를 계산합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;비교가 완료된 후에만 @last를 설정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SN 및 @lastValue는 다음 레코드 비교를 위한 현재 레코드와 동일합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select
      EL.SN,
      EL.Date,
      EL.Value, --remove duplicate alias
      if( @lastSN = EL.SN, EL.Value - @lastValue, 0000.00 ) as Consumption,
      @lastSN := EL.SN,
      @lastValue := EL.Value
   from
      EnergyLog EL,
      ( select @lastSN := 0,
               @lastValue := 0 ) SQLVars
   order by
      EL.SN,
      EL.Date
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 효과가 있을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT l.sn,
       l.date, 
       l.value,
       l.value - (SELECT value 
                  FROM energylog x
                  WHERE x.date &amp;lt; l.date
                  AND x.sn = l.sn
                  ORDER BY date DESC
                  LIMIT 1) consumption
FROM energylog l;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQLFidle: http://sqlfiddle.com/ #!&lt;a href=&quot;http://sqlfiddle.com/#!2/b9eb1/8&quot; papago-id=&quot;7-1&quot;&gt;2/&lt;/a&gt;b9eb1/&lt;a href=&quot;http://sqlfiddle.com/#!2/b9eb1/8&quot; papago-id=&quot;7-1&quot;&gt;8&lt;/a&gt; 참조&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;거의 보편적인 해결책은 데이터를 자신에게 결합하고, 결합 조건에 상관된 하위 쿼리를 포함함으로써 이전 기록을 찾는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT
  ThisLog.*,
  COALESCE(ThisLog.Value - PrevLog.Value, 0) AS consumption
FROM
  EnergyLog    AS ThisLog
LEFT JOIN
  EnergyLog    AS PrevLog
    ON  PrevLog.SN   = ThisLog.SN
    AND PrevLog.Date = (SELECT MAX(Date)
                          FROM EnergyLog
                         WHERE SN   = ThisLog.SN
                           AND Date &amp;lt; ThisLog.Date)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 두 가지를 모두 포함하는 하나의 인덱스에서 가장 잘 수행됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(SN, Date)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 동일한 테이블의 두 행을 결합할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    SELECT this.*, prev.*
      FROM tbl this
INNER JOIN tbl prev ON prev.id =
           ( 
               SELECT max(t.id) 
               FROM tbl t  
               WHERE t.id &amp;lt; this.id
           )     
     WHERE ...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 경우는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    SELECT this.SN, this.Date, this.Value, (this.Value - prev.Value) AS consumption
      FROM EnergyLog this
INNER JOIN EnergyLog prev ON prev.Date =
           ( 
               SELECT max(t.Date) 
               FROM EnergyLog t  
               WHERE t.Date &amp;lt; this.Date
           )     
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 쿼리를 한 번 시도해 보시기 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT e1.*,
   (SELECT Value
    FROM EnergyLog e2
    WHERE e2.sn = e1.sn AND e2.date &amp;lt; e1.date
    ORDER BY date DESC
    LIMIT 1)-l.Value consumption
FROM EnergyLog e1;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/13196190/mysql-subtracting-value-from-previous-row-group-by&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>mysql</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/758</guid>
      <comments>https://codebag.tistory.com/758#entry758comment</comments>
      <pubDate>Wed, 25 Oct 2023 23:19:19 +0900</pubDate>
    </item>
    <item>
      <title>바퀴의 재창조: 노드.JS/이벤트 기반 프로그래밍 대.기능적 프로그래밍?</title>
      <link>https://codebag.tistory.com/757</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바퀴의 재창조: 노드.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS/이벤트 기반 프로그래밍 대.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능적 프로그래밍?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://nodejs.org/&quot; papago-id=&quot;1-1&quot; rel=&quot;noreferrer&quot;&gt;요즘&lt;/a&gt; 노드에 대한 모든 광고가 있어요&lt;a href=&quot;http://nodejs.org/&quot; papago-id=&quot;1-1&quot; rel=&quot;noreferrer&quot;&gt;.&lt;/a&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트 콜백을 이용한 이벤트 기반 프레임워크인 &lt;a href=&quot;http://nodejs.org/&quot; papago-id=&quot;1-1&quot; rel=&quot;noreferrer&quot;&gt;JS&lt;/a&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 알기로는, 그것의 주된 장점은 순차적으로 기다릴 필요가 없다는 것입니다(예를 들어, 다른 함수를 호출하면서 &lt;strong papago-id=&quot;1-3&quot;&gt;&lt;em papago-id=&quot;1-3-0&quot;&gt;SQL&lt;/em&gt;&lt;/strong&gt; 결과를 가져올 수 있습니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 제 질문은 이것이 CL, 하스켈, 클로저 등과 같은 단순히 기능적인 언어들보다 어떻게 다르거나 더 나을까 하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 나아지지 않는다면, 사람들은 (&lt;strong papago-id=&quot;2-1&quot;&gt;자바스크립트로 바퀴&lt;/strong&gt;를 다시 &lt;strong papago-id=&quot;2-1&quot;&gt;만드는&lt;/strong&gt; 대신) 기능적인 언어만 사용하면 어떨까요?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 어느 노드도 경험이 없으니 참고하시기 바랍니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS 또는 함수 프로그래밍.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 약간의 기본적인 설명이 도움이 될 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;노드를 다 읽었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS 문서(그리고 멋진 &lt;a href=&quot;http://s3.amazonaws.com/four.livejournal/20091117/jsconf.pdf&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4-1&quot;&gt;슬라이드 데크&lt;/a&gt;), 여기 있는 다른 답변들은 그것에 대한 요점을 놓치고 있다고 생각합니다: 노드.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS는 I/O를 차단할 것으로 예상되는 프로그램 작성 방식이 잘못되었으며, 대신 I/O를 시작하고(데이터베이스 읽기, 소켓 읽기 등) 요청과 함께 I/O 결과를 처리하는 기능을 전달해야 한다는 생각에 근거하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 이렇게 하는 것보다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var result = db.query(&quot;select..&quot;); // blocking
// use result
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Node.JS는 다음과 같은 작업을 수행하는 아이디어를 기반으로 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;db.query(&quot;select..&quot;, function (result) {
    // use result
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(노드의) 저자들.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS)는 이러한 프로그래밍 방식이 많은 시스템에서 매우 어색하다고 지적합니다. 언어에는 폐쇄 기능이나 익명 기능이 없고 라이브러리가 주로 I/O를 차단하기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 자바스크립트는 전자(JS가 브라우저에서 사용되는 것과 같은 이벤트에서 사용되는 방식을 고려할 때 프로그래머들이 사용됩니다)와 노드를 제공합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS는 나중에 완전히 이벤트 기반 I/O 라이브러리가 되어 통화를 차단하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 기능적 프로그래밍과 어떤 관련이 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 기능적 프로그래밍 언어는 노드가 수행할 수 있을 정도로 강력한 폐쇄 구조를 제공합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS는 자바스크립트로 하려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대부분은 코드를 더 쉽게 만들 수 있는데, 지나가는 폐쇄가 일반적으로 언어의 기본이기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해스켈의 경우 모나드를 사용하면 이런 종류의 것은 매우 쉽게 만들 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;doQuery :: DBConnection -&amp;gt; IO ()
doQuery db = do
    rows &amp;lt;- query db &quot;select...&quot;
    doSomething rows
    doSomethingElse rows
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 매우 순차적이고 명령적인 코드 라인들은 실제로 제어되는 일련의 폐쇄들입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;IO&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 마치 에서 monad를 쓴 과 같습니다&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 마치 당신이 자바스크립트로 작성한 것과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;db.query(&quot;select...&quot;, function (rows) {
    doSomething(rows, function () {
        doSomethingElse(rows, function () { /* done */ })
    })
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;본질적으로, 모나딕 코드를 함수 언어로 작성할 때, 이미 노드 형태로 작성하고 있는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS 저자들은 다음과 같이 적길 원합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;순차적 계산의 각 단계가 이전 단계에 대한 종결로 전달되는 경우.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만, 그 코드가 하스켈에게 얼마나 더 멋지게 보이는지 보세요!&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 동시 Haskell 기능을 쉽게 사용하여 이러한 무중단 운영을 쉽게 달성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;forkQuery :: DBConnection -&amp;gt; IO ThreadId
forkQuery db = forkIO $ do
    rows &amp;lt;- query db &quot;select...&quot;
    doSomething rows
    doSomethingElse rows
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;헷갈리지 마세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;forkIO&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값비싼 프로세스 포크를 사용하거나 OS 프로세스 스레드를 사용할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 노드와 동일한 경량 실행 스레드입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS는 (다소 의미론이 풍부한 경우에만) 사용하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;노드처럼 1,000개를 가질 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS의 목표는.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 간단히 말해서 노드라고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS는 자바스크립트에 존재하는 기능을 기반으로 구축하고 있지만 기능 언어에서는 훨씬 더 자연스럽습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;게다가 노드에 있는 모든 요소들이 다 그런 것 같아요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS는 이미 Haskell과 그 패키지에 존재하고 있고, 그리고 일부는.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저라면 그냥 해스켈을 쓰겠어요!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;노드에 대해서는 잘 모릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS도 그렇지만, 저는 (당신의 설명에서) 그것과 기능적 프로그래밍 사이에 두드러진 유사성을 발견하지 못합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;설명을 들어보니 노드.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS는 비동기식 프로그래밍을 돕는 것을 목표로 하는 것 같습니다. &quot;순차적으로 한 단계씩 기다릴 필요가 없다.&quot;라고 말할 때, 오래 실행되는 하나의 작업이 자신의 작업을 수행하는 것처럼 다른 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수적 프로그래밍은 이것과 완전히 직교합니다. 즉, 비동기성에 대한 링크가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 것 없이 하나를 가질 수도 있고, 둘 다를 가질 수도 있고, 둘 다 가질 수도 있고, 둘 다 가질 수도 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수 프로그래밍은 프로그램에서 부작용을 제거하고 언어의 일급 구성원으로서 함수를 다른 값과 유사하게 조작하고 구성할 수 있도록 하는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 정말로 &quot;바퀴를 새로 만드는 것&quot;이 아닙니다. 자바스크립트는 그 자체로 기능적인 언어는 아니지만, 이것은 Lisp에 기반을 두었고, 이것은 이것이 하도록 고안된 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 생각에는 자바스크립트가 OO언어보다 리스프어의 기능어로서 더 강합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇기 때문에 jQuery와 같은 강력한 기능* 디자인의 프레임워크가 언어에 매우 적합합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(* 참고:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;분명 순수하지는 않지만 Scheme과 거의 동일한 방식으로 작동합니다.)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아직 node.js를 사용하지는 않았지만, 확실히 관심이 있어서 곧 사용해 볼 예정입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에는 이미 기능적 프로그래밍 등에 대한 훌륭한 답변들이 많이 있기 때문에 그 부분에 대해서는 말씀드리지 않겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜 서버에서 해스켈, 클로저 등 다른 언어를 사용하지 않느냐고 묻습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저에게 node.js의 매력은 javascript라는 점입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 클라이언트에서 자바스크립트를 많이 사용하고 있어서 서버와 클라이언트 모두에서 하나의 언어로 작업할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 통해 개발을 간소화하고 간소화할 수 있기를 희망합니다. 왜냐하면 컨텍스트를 그렇게 급격하게 전환할 필요가 없기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;클라이언트와 서버 모두에서 사용되는 일부 로직을 공유할 수 있다면(아마도 유효성 검사 코드 등) 작업이 다소 줄어들 수도 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트가 웹 서버로서 노드에서 핵심적인 역할을 하는 것은 그것이 주로 이벤트 중심이라는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능적 프로그래밍은 무엇보다 불변성 때문에 동시성에 장점이 있다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 기능 언어들이 얼마나 이벤트 중심적인지는 확실하지 않습니다. 단지 노드의 장점의 일부로서 그것을 강조하고 싶었을 뿐입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클라이언트와 서버 사이의 간격이 줄어드는 주된 이점 중 하나는 클라이언트와 서버에서 코드를 재사용할 수 있다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 현대 브라우저용으로 풍부하고 동적인 AJAX 웹 사이트를 사용하고 이전 브라우저용으로 풀다운 버전을 사용하려면 클라이언트와 서버 모두에서 동일한 디스플레이 코드를 사용하여 인컴 데이터를 포맷할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹 앱을 오프라인으로 실행할 수 있는 로컬 스토리지 DB 및 서버를 보유할 수 있는 HTML5/Google Gears/Adobe Air의 다른 이점도 있습니다. 서버를 사용할 수 없을 때 기존에는 로컬에 저장되어 있던 코드를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1862861/reinventing-the-wheels-node-js-event-driven-programming-v-s-functional-program&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>ajax</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/757</guid>
      <comments>https://codebag.tistory.com/757#entry757comment</comments>
      <pubDate>Wed, 25 Oct 2023 23:19:11 +0900</pubDate>
    </item>
    <item>
      <title>GCC 앨리어싱 확인/제한 포인터 포함</title>
      <link>https://codebag.tistory.com/756</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GCC 앨리어싱 확인/제한 포인터 포함&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 두 가지 토막글을 생각해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#define ALIGN_BYTES 32
#define ASSUME_ALIGNED(x) x = __builtin_assume_aligned(x, ALIGN_BYTES)

void fn0(const float *restrict a0, const float *restrict a1,
         float *restrict b, int n)
{
    ASSUME_ALIGNED(a0); ASSUME_ALIGNED(a1); ASSUME_ALIGNED(b);

    for (int i = 0; i &amp;lt; n; ++i)
        b[i] = a0[i] + a1[i];
}

void fn1(const float *restrict *restrict a, float *restrict b, int n)
{
    ASSUME_ALIGNED(a[0]); ASSUME_ALIGNED(a[1]); ASSUME_ALIGNED(b);

    for (int i = 0; i &amp;lt; n; ++i)
        b[i] = a[0][i] + a[1][i];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수를 컴파일하면 다음과 같이 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gcc-4.7.2 -Ofast -march=native -std=c99 -ftree-vectorizer-verbose=5 -S test.c -Wall&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 GCC가 두 번째 함수에 대해 앨리어싱 체크를 삽입한다는 것을 발견했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 방지하려면 어떻게 해야 하나요?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fn1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 대한 것과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fn0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;? (파라미터의 수가 3개에서 30개로 증가할 때 인수 통과 접근법(&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fn0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)가 번거로워지고 에일리어싱 체크의 수가 증가합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fn1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어프로치가 우스꽝스러워집니다.)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어셈블리(x86-64, AVX 지원 칩); .LFB10의 앨리어싱 크루프트&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;fn0:
.LFB9:
    .cfi_startproc
    testl   %ecx, %ecx
    jle .L1
    movl    %ecx, %r10d
    shrl    $3, %r10d
    leal    0(,%r10,8), %r9d
    testl   %r9d, %r9d
    je  .L8
    cmpl    $7, %ecx
    jbe .L8
    xorl    %eax, %eax
    xorl    %r8d, %r8d
    .p2align 4,,10
    .p2align 3
.L4:
    vmovaps (%rsi,%rax), %ymm0
    addl    $1, %r8d
    vaddps  (%rdi,%rax), %ymm0, %ymm0
    vmovaps %ymm0, (%rdx,%rax)
    addq    $32, %rax
    cmpl    %r8d, %r10d
    ja  .L4
    cmpl    %r9d, %ecx
    je  .L1
.L3:
    movslq  %r9d, %rax
    salq    $2, %rax
    addq    %rax, %rdi
    addq    %rax, %rsi
    addq    %rax, %rdx
    xorl    %eax, %eax
    .p2align 4,,10
    .p2align 3
.L6:
    vmovss  (%rsi,%rax,4), %xmm0
    vaddss  (%rdi,%rax,4), %xmm0, %xmm0
    vmovss  %xmm0, (%rdx,%rax,4)
    addq    $1, %rax
    leal    (%r9,%rax), %r8d
    cmpl    %r8d, %ecx
    jg  .L6
.L1:
    vzeroupper
    ret
.L8:
    xorl    %r9d, %r9d
    jmp .L3
    .cfi_endproc
.LFE9:
    .size   fn0, .-fn0
    .p2align 4,,15
    .globl  fn1
    .type   fn1, @function
fn1:
.LFB10:
    .cfi_startproc
    testq   %rdx, %rdx
    movq    (%rdi), %r8
    movq    8(%rdi), %r9
    je  .L12
    leaq    32(%rsi), %rdi
    movq    %rdx, %r10
    leaq    32(%r8), %r11
    shrq    $3, %r10
    cmpq    %rdi, %r8
    leaq    0(,%r10,8), %rax
    setae   %cl
    cmpq    %r11, %rsi
    setae   %r11b
    orl %r11d, %ecx
    cmpq    %rdi, %r9
    leaq    32(%r9), %r11
    setae   %dil
    cmpq    %r11, %rsi
    setae   %r11b
    orl %r11d, %edi
    andl    %edi, %ecx
    cmpq    $7, %rdx
    seta    %dil
    testb   %dil, %cl
    je  .L19
    testq   %rax, %rax
    je  .L19
    xorl    %ecx, %ecx
    xorl    %edi, %edi
    .p2align 4,,10
    .p2align 3
.L15:
    vmovaps (%r9,%rcx), %ymm0
    addq    $1, %rdi
    vaddps  (%r8,%rcx), %ymm0, %ymm0
    vmovaps %ymm0, (%rsi,%rcx)
    addq    $32, %rcx
    cmpq    %rdi, %r10
    ja  .L15
    cmpq    %rax, %rdx
    je  .L12
    .p2align 4,,10
    .p2align 3
.L20:
    vmovss  (%r9,%rax,4), %xmm0
    vaddss  (%r8,%rax,4), %xmm0, %xmm0
    vmovss  %xmm0, (%rsi,%rax,4)
    addq    $1, %rax
    cmpq    %rax, %rdx
    ja  .L20
.L12:
    vzeroupper
    ret
.L19:
    xorl    %eax, %eax
    jmp .L20
    .cfi_endproc
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴파일러에게 앨리어싱 검사를 중지하도록 지시하는 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;줄을 추가하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#pragma GCC ivdep
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;벡터화하고 싶은 루프의 바로 앞에, 더 많은 정보가 필요하다면 읽어주시기 바랍니다:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Loop-Specific-Pragmas.html&quot; rel=&quot;nofollow&quot; papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Loop-Specific-Pragmas.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이게 도움이 될까요?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;void fn1(const float **restrict a, float *restrict b, int n)
{
    const float * restrict a0 = a[0];
    const float * restrict a1 = a[1];

    ASSUME_ALIGNED(a0); ASSUME_ALIGNED(a1); ASSUME_ALIGNED(b);

    for (int i = 0; i &amp;lt; n; ++i)
        b[i] = a0[i] + a1[i];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집: 두 번째 시도 :).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://locklessinc.com/articles/vectorize/ 의 정보와 함께&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;gcc --fast-math ...&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 깃발은?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;-fno-strict-aliasing
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 이해한 대로 이 체크를 어떻게 끄는지 알고 싶으신가요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그게 전부라면, gcc 명령줄에 대한 이 매개 변수가 당신에게 도움이 될 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;귀하의 의견 외에, const type 제한 포인터를 사용하는 것은 금지되어 있지 않습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 ISO/IEC 9899 (6.7.3.1 제한의 공식적인 정의)에서 나온 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;1.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;D를 T형에 대한 제한 자격 포인터로서 객체 P를 지정하는 수단을 제공하는 일반 식별자의 선언이라고 가정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;4.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;B를 실행할 때마다 L을 P를 기준으로 &amp;amp;L을 갖는 임의의 l 값이라 하자. L을 사용하여 자신이 지정한 개체 X의 값에 접근하고 X도 (어떤 방법으로든) 수정된다면 다음과 같은 요구 사항이 적용됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;T는 일정한 자격이 없어야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;X 값에 접근하기 위해 사용되는 다른 모든 l 값은 P를 기준으로 주소를 가져야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;X를 수정하는 모든 접근은 이 하위 절의 목적을 위해 P를 수정하는 것도 고려해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;블록 B2와 관련된 다른 제한된 포인터 객체 P2를 기반으로 하는 포인터 식 E의 값이 P에 할당된 경우, B2의 실행은 B의 실행 전에 시작되거나 B2의 실행은 할당 전에 종료됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 요구 사항이 충족되지 않으면 동작이 정의되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 레지스터와 마찬가지로 훨씬 더 흥미로운 점은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;6.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;번역자는 제한을 사용할 때 어떤 또는 모든 앨리어싱의 의미를 무시할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 gcc가 그렇게 하도록 강제하는 명령 파라미터를 찾을 수 없다면, 표준에서 그렇게 하는 옵션을 줄 필요가 없기 때문에 아마도 불가능할 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GCC 4.7로 결과를 기계에 재현할 수 없기 때문에 미리 사과드립니다만, 두 가지 가능한 해결책이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;typedef를 사용하여 a를 작성합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;* restrict * restrict&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;적절히.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;LLVM 컴파일러를 개발하는 전 동료에 따르면, 이것은 다음과 같은 단 하나의 예외입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;typedef&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C의 전처리기처럼 동작하며 원하는 안티 앨리어싱 동작을 허용하기 위해 존재합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 아래에서 이것을 시도해 보았지만 성공했는지 확신할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저의 시도를 잘 확인해 주시기 바랍니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/29089150/using-restrict-qualifier-with-c99-variable-length-arrays-vlas&quot; papago-id=&quot;32-1&quot;&gt;C99 VLA(Variable Length Array)&lt;/a&gt;와 함께 &lt;a href=&quot;https://stackoverflow.com/questions/29089150/using-restrict-qualifier-with-c99-variable-length-arrays-vlas&quot; papago-id=&quot;32-1&quot;&gt;제한 한정자&lt;/a&gt;를 사용하는 것에 대한 답변에 설명된 구문을 사용합니다&lt;a href=&quot;https://stackoverflow.com/questions/29089150/using-restrict-qualifier-with-c99-variable-length-arrays-vlas&quot; papago-id=&quot;32-1&quot;&gt;.&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; &lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 아래에서 이것을 시도해 보았지만 성공했는지 확신할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저의 시도를 잘 확인해 주시기 바랍니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 제가 실험을 수행할 때 사용한 코드가 있습니다만, 제 제안 중 어느 것이든 원하는 대로 작동하는지 단정적으로 판단하지 못했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#define ALIGN_BYTES 32
#define ASSUME_ALIGNED(x) x = __builtin_assume_aligned(x, ALIGN_BYTES)

void fn0(const float *restrict a0, const float *restrict a1,
         float *restrict b, int n)
{
    ASSUME_ALIGNED(a0); ASSUME_ALIGNED(a1); ASSUME_ALIGNED(b);

    for (int i = 0; i &amp;lt; n; ++i)
        b[i] = a0[i] + a1[i];
}

#if defined(ARRAY_RESTRICT)
void fn1(const float *restrict a[restrict], float * restrict b, int n)
#elif defined(TYPEDEF_SOLUTION)
typedef float * restrict frp;
void fn1(const frp *restrict a, float *restrict b, int n)
#else
void fn1(const float *restrict *restrict a, float *restrict b, int n)
#endif
{
    //ASSUME_ALIGNED(a[0]); ASSUME_ALIGNED(a[1]); ASSUME_ALIGNED(b);

    for (int i = 0; i &amp;lt; n; ++i)
        b[i] = a[0][i] + a[1][i];
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제한을 사용하여 얻을 수 있는 거의 모든 성능상의 이점에는 다음과 같은 두 가지 사용 패턴 중 하나가 포함됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지정된 함수 인수에 직접 적용되는 제한 한정자(여기서 가리키는 것과 반대)&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이니셜라이저가 있는 명명된 자동 개체에 직접 적용되는 제한 한정자입니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 두 가지 맥락에서 한정자는 명명된 객체의 &lt;em papago-id=&quot;38-1&quot;&gt;초기&lt;/em&gt; 값을 기반으로 포인터에 의해 액세스되는 저장소를 &quot;보호&quot;하고 이러한 보호의 용어는 객체가 초기화된 시점부터 수명이 끝날 때까지 확장된다는 것이 분명합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제한 한정자가 다른 환경에서 사용되는 경우 의미론이 무엇인지 훨씬 명확하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Standard는 다른 유형이 어떻게 작동해야 하는지 지정하려고 하지만, 적용하려는 컴파일러에 대해서는 알지 못합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들면 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;extern int x,y;

int *xx = &amp;amp;x, *yy = &amp;amp;y;
int *restrict *restrict pp;

pp = &amp;amp;xx;
int *q = *pp;
*q = 1;
pp = &amp;amp;yy;
... other code
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한다면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;q&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음에는 사용되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;*q=1;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위와 같이 &quot;restrict&quot; 한정자가 켜져 있는 경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;*pp&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;경계를 계속함&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 후에도&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pp&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 자체가 다음을 가리키도록 바뀝니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;yy&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 위원회가 그러한 문제를 고려하여 합의에 도달했거나 컴파일러 작성자가 그러한 사례를 의미 있게 처리하려고 시도했다는 증거가 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의미있는 처리.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;restrict&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한정자는 이렇게 설정된 &quot;guarded 포인터 값&quot;이 잘 정의된 수명을 가져야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위에서 설명한 두 가지 이상의 사례를 처리하기 위해서는 상당한 노력이 필요하지만 상대적으로 최소의 혜택을 제공할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예제 코드가 선언을 사용하도록 변경된 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int *restrict q = *pp;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 다음의 가치는 분명할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음의 범위 내에 있다면 &quot;기타 코드&quot;로 보호될 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;q&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 그러나 그것은 컴파일러가 외부 레벨을 인식했는지 여부와 관계없이 사실일 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;restrict&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 대한 예선전&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pp&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 그렇다면 왜 그런 문제를 해결해야 합니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/15613670/gcc-aliasing-checks-w-restrict-pointers&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>C</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/756</guid>
      <comments>https://codebag.tistory.com/756#entry756comment</comments>
      <pubDate>Wed, 25 Oct 2023 23:19:04 +0900</pubDate>
    </item>
    <item>
      <title>WooCommerce 관리자 -&amp;gt; 주문 | 각 상품에 추가 확인란</title>
      <link>https://codebag.tistory.com/755</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WooCommerce 관리자 -&amp;gt; 주문 | 각 상품에 추가 확인란&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;운도 없이 12시간 이상을 허비했습니다&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 몇 가지 다른 스레드를 찾았습니다. 비슷한 질문이 있지만 모두 응답이 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;// 내가 필요한 건?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WooCommerce Admin 주문 뷰의 확인란이 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;checked&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값 yes : no는 다음과 같이 저장해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;order_item_meta&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 그래서 고객은 주문한 모든 상품이 완전하게 배송되었는지 확인할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;연결하려면, 작업이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;woocommerce_after_order_itemmeta&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정확한 위치인 것 같습니다&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;// 아이템에 단순히 메타를 추가하는 것은 어떨까요?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;네 맞아요, 효과가 있네요 - 근데 이거 체크박스 있으면 좋지 않을까요? :)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;// 지금까지 내가 한 일은?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에 게시물을 많이 읽습니다. 특히 이 페이지는 -&amp;gt; &lt;a href=&quot;https://stackoverflow.com/questions/32457241/woocommerce-admin-order-details-show-custom-data-on-order-details-page&quot; papago-id=&quot;10-1&quot;&gt;WooCommerce-admin-order-details-show-custom-data-on-order-details-page&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어디서 어떻게 시작할 수 있는지 전혀 모르겠습니다. 결국 제 기능에서 코드의 평화가 나타났습니다.php..&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?php

add_action( 'woocommerce_after_order_itemmeta', 'item_shipped',
10, 3 );
function item_shipped() {
?&amp;gt;
&amp;lt;input type=&quot;checkbox&quot; name=&quot;custom-meta-box[]&quot; value=&quot;yes&quot; &amp;lt;?php if(isset($_POST['is-shipped-meta']['is_shipped'])) echo 'checked=&quot;checked&quot;'; ?&amp;gt;  /&amp;gt; is shipped?
&amp;lt;?php  
 }

 add_action( 'woocommerce_add_order_item_meta', 'save_is_shipped_meta' );
 function save_is_shipped_meta()
 {

     global $item_id, $item, $product;
     // Get our form field
     if(isset( $_POST['is-shipped-meta'] ))
     {
         $value = $_POST['is-shipped-meta'];
         $old_meta = get_metadata($item-&amp;gt;id, 'is-shipped-meta', true);
         // Update order item meta
         if(!empty($old_meta)){
         woocommerce_add_order_item_meta($item-&amp;gt;id, 'is-shipped-meta', $value);
         } else {
            woocommerce_add_order_item_meta($item-&amp;gt;id, 'is-shipped-meta', $value);
         }
     }
 }

?&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프론트엔드에서 제 계정은 실제로 이렇게 보입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://i.stack.imgur.com/RJGjO.png&quot; papago-id=&quot;12-1&quot; rel=&quot;noreferrer&quot;&gt;Frontend &lt;/a&gt;- &lt;a href=&quot;https://i.stack.imgur.com/RJGjO.png&quot; papago-id=&quot;12-1&quot; rel=&quot;noreferrer&quot;&gt;My Account&lt;/a&gt; 초록색 점을 인디케이터로 지정하여 고객들은 주문한 상품이 이미 발송되었는지 확인할 수 있습니다!&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 하면 이걸 작동시킬 수 있을까요?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시간을 내주시고 도와주셔서 정말 감사합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사합니다!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/35261718/woocommerce-admin-orders-add-checkbox-on-each-product&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>wordpress</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/755</guid>
      <comments>https://codebag.tistory.com/755#entry755comment</comments>
      <pubDate>Wed, 25 Oct 2023 23:18:54 +0900</pubDate>
    </item>
    <item>
      <title>수식 값의 범위를 복사하여 다른 시트의 특정 범위에 붙여넣는 방법은 무엇입니까?</title>
      <link>https://codebag.tistory.com/754</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수식 값의 범위를 복사하여 다른 시트의 특정 범위에 붙여넣는 방법은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Excel 매크로를 작동시키려고 하는데 포뮬러가 포함된 셀에서 값을 복사하는 데 문제가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금까지 이것이 제가 가지고 있는 것이고 비-포뮬러 세포와 잘 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Sub Get_Data()
    Dim lastrow As Long

    lastrow = Sheets(&quot;DB&quot;).Range(&quot;A65536&quot;).End(xlUp).Row + 1

    Range(&quot;B3:B65536&quot;).Copy Destination:=Sheets(&quot;DB&quot;).Range(&quot;B&quot; &amp;amp; lastrow)
    Range(&quot;C3:C65536&quot;).Copy Destination:=Sheets(&quot;DB&quot;).Range(&quot;A&quot; &amp;amp; lastrow)
    Range(&quot;D3:D65536&quot;).Copy Destination:=Sheets(&quot;DB&quot;).Range(&quot;C&quot; &amp;amp; lastrow)
    Range(&quot;E3:E65536&quot;).Copy Destination:=Sheets(&quot;DB&quot;).Range(&quot;P&quot; &amp;amp; lastrow)
    Range(&quot;F3:F65536&quot;).Copy Destination:=Sheets(&quot;DB&quot;).Range(&quot;D&quot; &amp;amp; lastrow)
    Range(&quot;AH3:AH65536&quot;).Copy Destination:=Sheets(&quot;DB&quot;).Range(&quot;E&quot; &amp;amp; lastrow)
    Range(&quot;AIH3:AI65536&quot;).Copy Destination:=Sheets(&quot;DB&quot;).Range(&quot;G&quot; &amp;amp; lastrow)
    Range(&quot;AJ3:AJ65536&quot;).Copy Destination:=Sheets(&quot;DB&quot;).Range(&quot;F&quot; &amp;amp; lastrow)
    Range(&quot;J3:J65536&quot;).Copy Destination:=Sheets(&quot;DB&quot;).Range(&quot;H&quot; &amp;amp; lastrow)
    Range(&quot;P3:P65550&quot;).Copy Destination:=Sheets(&quot;DB&quot;).Range(&quot;I&quot; &amp;amp; lastrow)
    Range(&quot;AF3:AF65536&quot;).Copy Destination:=Sheets(&quot;DB&quot;).Range(&quot;J&quot; &amp;amp; lastrow)

End Sub
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수식 값을 붙이도록 하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 변경/최적화 할 수 있다면 저도 감사하겠습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변경가능합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Range(&quot;B3:B65536&quot;).Copy Destination:=Sheets(&quot;DB&quot;).Range(&quot;B&quot; &amp;amp; lastrow)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Range(&quot;B3:B65536&quot;).Copy 
Sheets(&quot;DB&quot;).Range(&quot;B&quot; &amp;amp; lastrow).PasteSpecial xlPasteValues
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그건 그렇고, xls 파일(excel 2003)을 가지고 있다면, 만약 당신의 파일을 가지고 있다면 오류가 발생할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lastrow&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;3이 더 클 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 이 코드를 사용해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Sub Get_Data()
    Dim lastrowDB As Long, lastrow As Long
    Dim arr1, arr2, i As Integer

    With Sheets(&quot;DB&quot;)
        lastrowDB = .Cells(.Rows.Count, &quot;A&quot;).End(xlUp).Row + 1
    End With

    arr1 = Array(&quot;B&quot;, &quot;C&quot;, &quot;D&quot;, &quot;E&quot;, &quot;F&quot;, &quot;AH&quot;, &quot;AI&quot;, &quot;AJ&quot;, &quot;J&quot;, &quot;P&quot;, &quot;AF&quot;)
    arr2 = Array(&quot;B&quot;, &quot;A&quot;, &quot;C&quot;, &quot;P&quot;, &quot;D&quot;, &quot;E&quot;, &quot;G&quot;, &quot;F&quot;, &quot;H&quot;, &quot;I&quot;, &quot;J&quot;)

    For i = LBound(arr1) To UBound(arr1)
        With Sheets(&quot;Sheet1&quot;)
             lastrow = Application.Max(3, .Cells(.Rows.Count, arr1(i)).End(xlUp).Row)
             .Range(.Cells(3, arr1(i)), .Cells(lastrow, arr1(i))).Copy
             Sheets(&quot;DB&quot;).Range(arr2(i) &amp;amp; lastrowDB).PasteSpecial xlPasteValues
        End With
    Next
    Application.CutCopyMode = False
End Sub
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고, 위 코드는 비어 있지 않은 마지막 행을 결정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DB&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;난의 시트&lt;/font&gt;&lt;/font&gt;&lt;code&gt;A&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;()&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lastrowDB&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)에서 각 행 열에 대한 마지막 행을 찾아야 할 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DB&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시트, 다음 수정 사항 사용:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;For i = LBound(arr1) To UBound(arr1)
   With Sheets(&quot;DB&quot;)
       lastrowDB = .Cells(.Rows.Count, arr2(i)).End(xlUp).Row + 1
   End With

   ' NEXT CODE

Next
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 다음 접근 방식을 사용할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Copy/PasteSpecial&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.교체하다&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.Range(.Cells(3, arr1(i)), .Cells(lastrow, arr1(i))).Copy
Sheets(&quot;DB&quot;).Range(arr2(i) &amp;amp; lastrowDB).PasteSpecial xlPasteValues
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 함께&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Sheets(&quot;DB&quot;).Range(arr2(i) &amp;amp; lastrowDB).Resize(lastrow - 2).Value = _
      .Range(.Cells(3, arr1(i)), .Cells(lastrow, arr1(i))).Value
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시트의 각 열을 다른 시트에 복사하는 경우는 어떻습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예: 시트 1의 B행에서 시트 1의 B행으로, 시트 2의 B행에서 C행으로...&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/21648122/how-do-i-copy-a-range-of-formula-values-and-paste-them-to-a-specific-range-in-an&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>Excel</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/754</guid>
      <comments>https://codebag.tistory.com/754#entry754comment</comments>
      <pubDate>Wed, 25 Oct 2023 23:18:47 +0900</pubDate>
    </item>
    <item>
      <title>Angular CLI를 로컬로 설치하는 방법(-g 플래그 없이)</title>
      <link>https://codebag.tistory.com/753</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular CLI를 로컬로 설치하는 방법(-g 플래그 없이)&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular와 &lt;strong papago-id=&quot;1-1&quot;&gt;Angular-CLI&lt;/strong&gt; 작업을 시작한 지 얼마 되지 않았는데 문서에 따르면 설치해야 한다고 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$ npm install -g @angular/cli&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 함께&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-g&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(전세계) 깃발&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 나머지 &lt;strong papago-id=&quot;4-1&quot;&gt;node_modules&lt;/strong&gt; 패키지와 함께 Angular-CLI를 로컬로 설치하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 &lt;strong papago-id=&quot;4-3&quot;&gt;git&lt;/strong&gt;에서 프로젝트를 다운받으면 간단히 실행할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$ npm install&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(내 &lt;strong papago-id=&quot;5-1&quot;&gt;패키지&lt;/strong&gt;에 모든 종속성을 설치하기 위해 .&lt;strong papago-id=&quot;5-1&quot;&gt;json.)&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 실행하여 새 프로젝트를 생성하려고 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$ npm init&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 다음에 달려요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$ npm i @angular/cli -D&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-D&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--save-dev&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;).&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 하지만 제가 뛰게 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$ ng new project-name&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;별도의 &lt;strong papago-id=&quot;11-1&quot;&gt;node_&lt;/strong&gt;modules 디렉토리를 사용하여 새 하위 디렉토리가 생성되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 의견에서 알 수 있듯이 시스템에 로컬 버전과 글로벌 버전의 각도 조절 기능을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;글로벌 버전이 아닌 로컬 버전에 액세스할 수 있도록 하려면(글로벌 설치와 로컬 버전이 다른 경우) 다음을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm run-script ng&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를들면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm run-script ng generate component SomeCoolComponent&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;github에서 이 답변을 확인해보세요. https://github.com/angular/angular-cli/issues/5955#issuecomment-320273493 .&lt;/font&gt;&lt;/p&gt;&lt;h2 papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단답형 / TLTR&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지를 지정하여 프로젝트를 시작합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-p @angular/cli&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 노드는 프로그램을 찾을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;npx -p @angular/cli ng new &amp;lt;project-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;긴 대답&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;npm 에코시스템은 프로젝트 로컬로서 &lt;strong papago-id=&quot;20-1&quot;&gt;점점&lt;/strong&gt; 더 툴을 설치하는 방향으로 나아가고 있습니다.&lt;/font&gt;&lt;/font&gt; &lt;code&gt;devDependencies&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 사용자에게 글로벌 설치를 요구하는 것이 아니라,&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;21-1&quot;&gt;이것은 좋은 연습으로 여겨집니다.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;고유한 글로벌 버전을 하나씩 갖는 대신 여러 버전(프로젝트당 하나)을 사용할 수 있기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트를 처음부터 시작하려면 패키지를 다음과 같이 가리켜야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-p&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;깃발()&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npx&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;찾을 수 없음):&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;npx -p @angular/cli ng new &amp;lt;project-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;- npx&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;code&gt;npx&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 와 함께 설치되는 명령입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;node&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;), 5.2(2017년  7 ).&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아마도 이미 설치되어 있을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;npx&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로컬로 설치하지 않고도 해당 npm 명령을 실행할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npx&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지정된 패키지의 최신 버전을 찾습니다(이 경우).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@angular/cli&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;) 및 명령을 실행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ng&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;빈 폴더에서.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h3 papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;- 특정판&lt;/font&gt;&lt;/h3&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular CLI의 &lt;strong papago-id=&quot;34-1&quot;&gt;특정 버전을 설치&lt;/strong&gt;할 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 버전 9.1을 설치해야 한다고 가정해 보겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;npx -p @angular/cli@9.1 ng new &amp;lt;project-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;- 일단 설치하면&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular CLI에서 프로젝트를 설치한 후 폴더로 이동하여&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npx ng&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;직접적으로.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;npx ng serve
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 내부를 검색할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;node_modules/.bin/&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;폴더에 사용할 폴더&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ng&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령어는 다음을 가리키는 소프트 링크입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;../@angular/cli/bin/ng&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 현지에 설치된&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ng&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지휘.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;링크스&lt;/font&gt;&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://nodejs.dev/the-npx-nodejs-package-runner&quot; rel=&quot;noreferrer&quot; papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;npx&lt;/font&gt;&lt;/a&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://cli.angular.io/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각도 CLI&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TL;DR&lt;/font&gt;&lt;/strong&gt;&lt;br&gt; &lt;strong&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;npx&lt;em papago-id=&quot;34-1&quot;&gt;(아직 설치&lt;/em&gt;되지 않은 &lt;em papago-id=&quot;34-1&quot;&gt;경우 실행)&lt;/em&gt;라는 패키지를 사용하고 각진 프로젝트를 만들어야 할 때는 이 명령을 처음부터 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;code&gt;npx -p @angular/cli ng new hello-world-project&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splited&quot;&gt;&lt;em&gt;&lt;strong papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설명:&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt; &lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 angular 4 project를 만들고 싶다면 위 명령어를 수정하여 angular-cli version 1.4.10 이 포함되도록 수정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npx -p @angular/cli@1.4.10 ng new hello-world-project&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트 설정이 완료되면 일반적인 방법으로 돌아갈 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ng generate&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기타 명령어를 입력합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular-cli 버전은 어떤 Angular 버전이 프로젝트와 연결될 것인지를 나타냅니다. Angular-cli 1.4.10은 Angular 4 프로젝트를 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 어떤 cli가 어떤 각도 버전을 만드는지에 대한 유용한 버전 정보입니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; CLI version     Angular version

 1.0 - 1.4.x       ^4.0.0
 1.5.x             ^5.0.0
 1.6.x - 1.7.x     ^5.2.0
 6.x               ^6.0.0
 7.x               ^7.0.0
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한, 안정된 최신 버전을 사용하여 특정 각도의 프로젝트를 만들고 싶다면 이렇게 npx 명령을 사용하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npx -p @angular/cli@1.7&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 그것은 각 5에 가장 최신의 안정적인 버전인 cli 버전 1.7.4를 사용할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 개발자들이 이 미스터리를 펼치려 하는 SO 답변을 &lt;a href=&quot;https://stackoverflow.com/a/55716777/4109794&quot; papago-id=&quot;57-1&quot;&gt;확인&lt;/a&gt;해 보십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각도를 로컬로 설치하려면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-sh prettyprint-override&quot;&gt;&lt;code&gt;npm init -y
npm i @angular/cli
npx ng new app-name
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로컬로 설치된 각도 버전을 업데이트하려면 다음을 사용할 수 있습니다. 예를 들어 범프 8.x를 9.x로 업그레이드하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-sh prettyprint-override&quot;&gt;&lt;code&gt;npx ng update @angular/core@9 @angular/cli@9
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그냥 이 명령을 따릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;npm install  @angular/cli
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 나에게 효과가 있었다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각도를 로컬로 설치하려면 - 각도 8을 글로벌하게 설치하고 각도 6을 로컬로 설치해야 합니다 - C 드라이브에 &quot;angular6&quot;이라는 폴더를 만들고 그 안에 &quot;ng6-test-project&quot;라는 이름의 각도 6 프로젝트를 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;터미널에 다음 명령을 입력합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    c:\&amp;gt; md angular6
    c:\&amp;gt; cd angular6
    c:\angular6&amp;gt; md ng6-test-project
    c:\angular6&amp;gt; cd ng6-test-project
    c:\angular6\ng6-test-project&amp;gt; npm install @angular/cli@6.1.1
    c:\angular6\ng6-test-project&amp;gt; cd..
    c:\angular6&amp;gt; npx -p @angular/cli@6.1.1 ng new ng6-test-project
    c:\angular6&amp;gt; cd ng6-test-project
    c:\angular6\ng6-test-project&amp;gt; npx ng --version
    c:\angular6\ng6-test-project&amp;gt; npm audit fix
    c:\angular6\ng6-test-project&amp;gt; npx ng serve --port 4201
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;rxjx 등 오픈 패키지와 같은 패키지와 버전에서 오류가 발생하는 경우.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;json과 &quot;~6.4.0&quot;을 찾아 &quot;~6.4.0&quot;을 &quot;rxjs&quot;: &quot;6.0.0&quot;으로 변경하고 저장합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 터미널에 다음을 입력하여 rxjs를 업데이트합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    c:\angular6\ng6-test-project&amp;gt; npm install
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지의 경고를 수정하려면 다음을 실행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    c:\angular6\ng6-test-project&amp;gt; npm audit fix
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각도 버전을 로컬로 확인하려면 다음을 입력합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    c:\angular6\ng6-test-project&amp;gt; npx ng --version
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 새 각도 버전이 로컬에 저장됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새 포트에서 프로젝트를 실행하려면 다음을 입력합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    c:\angular6\ng6-test-project&amp;gt; npx ng serve --port 4201
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령줄에서 ng를 사용하려면 해당 디렉토리 또는 시스템 PATH 변수에 있어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트가 있기 전에는 사용 가능한 것이 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 사용하여&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm i @angular/cli&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 node_modules 폴더에만 설치하고 PATH에서는 사용할 수 없게 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 글로벌하게 설치된 노드 모듈은 PATH에서 사용할 수 있는 옵션이 있기 때문에 적어도 한 번은 글로벌하게 설치해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 버전이 존재할 때 글로벌 버전에서 사용되므로 이 버전을 프로젝트 폴더에 설치할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템에 낮은 버전의 Angular 또는 다른 버전의 Angular를 설치하는 방법 업데이트된 버전이 글로벌하게 설치되었는지 확인합니다. npm install g @angular/cli&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하위 버전이 있는 프로젝트 디렉토리로 이동하거나 글로벌 설치 버전과 다른 다른 다른 버전의 각도 프로젝트로 이동합니다. 예를 들어 각도 2에서 작업하려면 아래 명령을 실행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;npm install ng serve &lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;Note: don't copy any of your node modules from your previous project if the current project you want to work on ,its version its different from formal project which you work on in the past check &quot;@angular/cli&quot;: &quot;version&quot; check &quot;@angular/cli&quot;: &quot;version&quot;, which is located in package.json if its version 1.2.0 its angular 2, version 1.7.0 its angular 6&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;angular climing 명령어의 gobal 설치 후&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;npm i -g @angular/cli@(latest or 1)&lt;/code&gt; &lt;/p&gt; 
&lt;p&gt;&lt;code&gt;ng new app-name&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각진 앱을 만들 파일 디렉토리로 이동합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령어사용&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ng new any-name&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;글로벌 Angular cli가 로컬 cli 버전을 설치하기 위해 주의할 angular app을 만듭니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새 프로젝트에 수동으로 설치하려면,&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;npm init -y&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;npm install @angular/cli@(latest or 1)&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지를 제거합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 명령을 사용하기 전에 json)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ng new app-name&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;46-1&quot;&gt;여기&lt;/strong&gt;서는 로컬 cli 버전을 사용하여 설치된 로컬 ng 버전을 기반으로 각진 앱 버전 5 또는 6 또는 7을 만듭니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기존에 로컬을 설치하려면 명령만 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm install @angular/cli@(latest or 1)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각도 14이기 때문에 가능합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;npm init @angular
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;85&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새 각도 프로젝트를 만드는 방법:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;npx -p @angular/cli ng new myApp
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;86&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Linux에서 현재 폴더의 이름을 프로젝트 이름으로 사용하여 현재 폴더에 새 각도 프로젝트를 만들려면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;npx -p @angular/cli ng new $(basename &quot;$PWD&quot;) --directory=./
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;87&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특히 현재 폴더가 이미 깃레포인 경우 현재 디렉터리에 각진 앱을 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;npx -p @angular/cli ng new $(basename &quot;$PWD&quot;) --directory=./ --skip-git
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;88&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트 내에서 Angular cli를 사용하는 방법&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;npx ng --version
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;89&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/48128847/how-to-install-angular-cli-locally-without-the-g-flag&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>angular</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/753</guid>
      <comments>https://codebag.tistory.com/753#entry753comment</comments>
      <pubDate>Wed, 25 Oct 2023 23:18:40 +0900</pubDate>
    </item>
    <item>
      <title>실행 중인 도커 구성에서 새 포트 추가</title>
      <link>https://codebag.tistory.com/752</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행 중인 도커 구성에서 새 포트 추가&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;워드프레스 컨테이너에 SSL 인증서를 추가하려고 하는데 기본 구성 구성은 포트 80만 리디렉션합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행 중인 컨테이너에 새 포트를 추가하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;docker-composite.yml 파일을 수정하고 컨테이너를 다시 시작하려고 했지만 이 방법으로는 문제가 해결되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새 포트를 들을 때 다음과 같이 컨테이너를 다시 만들어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker-compose up -d --force-recreate {CONTAINER}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포트를 노출합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 포트(HOST:CONTER)를 모두 지정하거나 컨테이너 포트만 지정합니다(Ephemeral 호스트 포트가 선택됨).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: 호스트의 포트를 매핑할 때:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨테이너 형식, YAML은 xx:yy 형식의 숫자를 기본-60 값으로 구문 분석하므로 컨테이너 포트 60보다 낮은 컨테이너 포트를 사용할 때 오류가 발생할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;7-1&quot;&gt;따라서&lt;/strong&gt; 항상 포트 &lt;strong papago-id=&quot;7-1&quot;&gt;매핑을 문자열로 명시적으로 지정&lt;/strong&gt;하는 것이 좋습니다&lt;strong papago-id=&quot;7-1&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포트: - &quot;3000&quot; - &quot;3000-3005&quot; - &quot;8000:8000&quot; - &quot;9090-9091:8080-8081&quot; - &quot;49100:22&quot; - &quot;127.0.0.1:8001:8001:8001&quot; - &quot;127.0.0.1: 5000-5010: 5000-5010&quot; - &quot;6060:60/udp&quot; https://docs.docker.com/compose/compose-file/ &lt;a href=&quot;https://docs.docker.com/compose/compose-file/#pid&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;8-1&quot;&gt;#pid&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 합성 파일에 새 포트를 추가하면 다음과 같은 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨테이너 정지&lt;/font&gt;&lt;/p&gt; &lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커- compose 정지 &amp;lt;서비스명&amp;gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;docker-compose up 명령 실행(참고: docker-compose start가 작동하지 않음)&lt;/font&gt;&lt;/p&gt; &lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커- compose 업-d&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문서에 따르면 'docker-compose' 명령은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서비스를 위해 컨테이너를 빌드, (재)생성, 시작 및 부착...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 실행 중인 경우가 아니라면&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 내가 구성한 노출된 포트로 중단된 서비스를 시작하게 했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://docs.docker.com/compose/compose-file/ #&lt;a href=&quot;https://docs.docker.com/compose/compose-file/#ports&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;17-1&quot;&gt;ports&lt;/a&gt; 이 예제와 같이 시도해 보셨습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 작동해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;my-services:
    ports:
        - &quot;80:80&quot;
        - &quot;443:443&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 단지 의 포트 섹션에 새로운 포트를 추가할 뿐입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker-compose.yml&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 다음에 당신은 해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker-compose up -d
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.yml 파일을 다시 읽고 컨테이너를 다시 만들 것이기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 시작하는 경우 .yml에서 새 구성을 읽지 않고 동일한 컨테이너만 다시 시작합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/49321226/add-new-port-in-running-docker-compose&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>wordpress</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/752</guid>
      <comments>https://codebag.tistory.com/752#entry752comment</comments>
      <pubDate>Wed, 25 Oct 2023 23:18:32 +0900</pubDate>
    </item>
    <item>
      <title>(빈 구조)의 크기와 (빈 배열을 가진 구조)의 크기의 차이?</title>
      <link>https://codebag.tistory.com/751</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(빈 구조)의 크기와 (빈 배열을 가진 구조)의 크기의 차이?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 두 가지 구조를 정의합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;struct EmptyStruct{

};

struct StructEmptyArr{
    int arr[0];
};

int main(void){
    printf(&quot;sizeof(EmptyStruct) = %ld\n&quot;, sizeof(EmptyStruct));
    printf(&quot;sizeof(StructEmptyArr) = %ld\n&quot;, sizeof(StructEmptyArr));

    return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Ubuntu 14.04, x64에서 gcc (g++) 4.8.4로 컴파일되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력(gcc 및 g++ 모두에 대해):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sizeof(EmptyStruct) = 1
sizeof(StructEmptyArr) = 0
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 이유를 이해할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof(EmptyStruct)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 동등한&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 왜 그런지 이해할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof(StructEmptyArr)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 동등한&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 왜 둘 사이에 차이점이 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C에서 프로그램의 동작은 구조가 명명된 멤버 없이 정의되면 정의되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C11- §6.7.2.1:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;struct-declaration-list에 직접 또는 익명 구조 또는 익명 결합을 통해 명명된 구성원이 없는 경우 동작은 정의되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GCC는 &lt;a href=&quot;https://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Empty-Structures.html#Empty-Structures&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5-1&quot;&gt;확장&lt;/a&gt;으로 빈 구조물을 허용하고 그 크기는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C++의 경우 &lt;a href=&quot;http://www.stroustrup.com/bs_faq2.html#sizeof-empty&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7-1&quot;&gt;표준은 크기의 객체를 허용하지 않으므로&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizof(EmptyStruct)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1의 값을 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;길이가 0인 어레이는 표준 C++ ¹에서는 지원되지 않지만, GNU와 GNU에서는 &lt;a href=&quot;https://gcc.gnu.org/onlinedocs/gcc-4.4.4/gcc/Zero-Length.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;확장&lt;/a&gt;으로 지원됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;연산자가 반환됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;적용되는 경우에는&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;sub papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1. § 8.5.1-각주 107) C++에는 길이가 0인 배열이 없습니다.&lt;/font&gt;&lt;/sub&gt; &lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://gcc.gnu.org/onlinedocs/gcc/Empty-Structures.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://gcc.gnu.org/onlinedocs/gcc/Empty-Structures.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;G++는 빈 구조를 마치 타입 Char의 단일 부재를 가진 것처럼 취급합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;a href=&quot;https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GNU C에서는 영-길이 배열을 사용할 수 있습니다. 이 배열들은 실제로 가변 길이 객체의 헤더인 구조의 마지막 요소로서 매우 유용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/45194751/difference-between-sizeofempty-struct-and-sizeofstruct-with-empty-array&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>C</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/751</guid>
      <comments>https://codebag.tistory.com/751#entry751comment</comments>
      <pubDate>Fri, 20 Oct 2023 13:39:15 +0900</pubDate>
    </item>
    <item>
      <title>관리 페이지에서 탭 메뉴를 만드는 방법 워드 프레스</title>
      <link>https://codebag.tistory.com/750</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;관리 페이지에서 탭 메뉴를 만드는 방법 워드 프레스&lt;/font&gt;&lt;/h2&gt;
&lt;h2 papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 나의 업데이트 코드입니다.&lt;/font&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;if (is_admin())
{
    add_action('admin_menu', 'user_menu');
}

function user_menu()
{
    add_menu_page('Pesananku', 'Pesananku', 'subscriber', 'userslug',
    'user_funct',get_template_directory_uri().'/img/favicon.ico',22);
}
function user_funct()
{
   ?&amp;gt;
&amp;lt;h2 class=&quot;nav-tab-wrapper&quot;&amp;gt;
    &amp;lt;a href=&quot;#tab1&quot; class=&quot;nav-tab&quot;&amp;gt;Tab #1&amp;lt;/a&amp;gt;
    &amp;lt;a href=&quot;#tab2&quot; class=&quot;nav-tab nav-tab-active&quot;&amp;gt;Tab #2&amp;lt;/a&amp;gt;
    &amp;lt;a href=&quot;#tab3&quot; class=&quot;nav-tab&quot;&amp;gt;Tab #3&amp;lt;/a&amp;gt;
    &amp;lt;/h2&amp;gt;
  &amp;lt;div id=&quot;tab1&quot;&amp;gt;&amp;lt;!--content tab1--&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;div id=&quot;tab2&quot;&amp;gt;&amp;lt;!--content tab2--&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;div id=&quot;tab3&quot;&amp;gt;&amp;lt;!--content tab3--&amp;gt;&amp;lt;/div&amp;gt;
   &amp;lt;?php
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 '&lt;em papago-id=&quot;2-1&quot;&gt;user_funct &lt;/em&gt;()' create 탭을 만들고 싶습니다. 이렇게 스타일링 워드를 누르세요.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;a href=&quot;http://postimg.org/image/h3nttjhof/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://postimg.org/image/h3nttjhof/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;링크 탭 메뉴로 다른 컨텐츠를 만드는 방법&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 당신이 그것을 할 수 있는 방법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 선택한 현재 탭에 따라 구조를 만드는 함수를 만들어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function page_tabs( $current = 'first' ) {
    $tabs = array(
        'first'   =&amp;gt; __( 'First tab', 'plugin-textdomain' ), 
        'second'  =&amp;gt; __( 'Second tab', 'plugin-textdomain' )
    );
    $html = '&amp;lt;h2 class=&quot;nav-tab-wrapper&quot;&amp;gt;';
    foreach( $tabs as $tab =&amp;gt; $name ){
        $class = ( $tab == $current ) ? 'nav-tab-active' : '';
        $html .= '&amp;lt;a class=&quot;nav-tab ' . $class . '&quot; href=&quot;?page=ipl_dbx_import_export&amp;amp;tab=' . $tab . '&quot;&amp;gt;' . $name . '&amp;lt;/a&amp;gt;';
    }
    $html .= '&amp;lt;/h2&amp;gt;';
    echo $html;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 탭이 포함된 페이지를 표시하기 위해 호출되는 콜백 기능에서는 다음과 같이 이 기능을 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
// Code displayed before the tabs (outside)
// Tabs
$tab = ( ! empty( $_GET['tab'] ) ) ? esc_attr( $_GET['tab'] ) : 'first';
page_tabs( $tab );

if ( $tab == 'first' ) {
    // add the code you want to be displayed in the first tab
}
else {
    // add the code you want to be displayed in the second tab
}
// Code after the tabs (outside)
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 페이지를 호출하면 GET 값을 추가할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tab&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;표시할 탭에 해당합니다. 예:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;admin.php?page=my_plugin_page_slug&amp;amp;tab=second
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/24378753/how-to-create-tab-menu-in-admin-page-wordpress&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>wordpress</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/750</guid>
      <comments>https://codebag.tistory.com/750#entry750comment</comments>
      <pubDate>Fri, 20 Oct 2023 13:39:09 +0900</pubDate>
    </item>
    <item>
      <title>다중 사이트의 WordPress cron을 대체하기 위해 PHP 스크립트가 작동하지 않습니다.</title>
      <link>https://codebag.tistory.com/749</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다중 사이트의 WordPress cron을 대체하기 위해 PHP 스크립트가 작동하지 않습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 제 멀티 사이트를 위해 워드프레스 크론을 서버 크론으로 교체하려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 사이트마다 cron 항목을 추가해야 할 것 같아요. 관리 악몽이 될 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 각 하위 사이트에 대해 cron을 호출하는 단일 cron 작업을 실행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래는 플러그인 스크립트이지만 오류 500이 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류 메시지는 fmpeg가 설치되지 않았다는 내용을 담고 있으므로 오해의 소지가 있으며 부정확합니다(다른 오류 메시지는 없음).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;누가 제가 이것을 바로잡는 것을 도와주실 수 있나요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;플러그인은 GitHub(https://github.com/chibani/wp_multisite_cron) 에 있지만 커뮤니티를 위한 훌륭한 플러그인이 될 것이라고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;도와주셔서 감사합니다!&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;register_activation_hook(__FILE__, array('wp_multisite_cron','plugin_activation'));
add_action('init', array('wp_multisite_cron', 'init'));

class wp_multisite_cron{

    const LANG = 'wp_multisite_cron';
    const LANG_DIR = '/lang/';

    /**
     * 
     * Plugin activation (sets default parameters)
     */
    public static function plugin_activation(){
        if(!self::get_option('concurrent_crons'))
            self::update_option('concurrent_crons', 100);
    }

    /**
     * 
     * The main 'loader'
     */
    public static function init() {

        //Setup the translation
        load_plugin_textdomain(self::LANG, false, dirname(plugin_basename( __FILE__ ) ) . self::LANG_DIR);

        //The multisite cron action     
        add_action('wp_ajax_wp_multisite_cron_call', array('wp_multisite_cron','cron_call'));
        add_action('wp_ajax_nopriv_wp_multisite_cron_call', array('wp_multisite_cron','cron_call'));

        // admin actions and hooks
        if (is_admin()) {
            self::admin_hooks();
        }
    }

    /**
     * 
     * The admin hooks
     */
    public static function admin_hooks(){
        //Setting menu
        add_action('admin_menu', array('wp_multisite_cron', 'admin_menu'));
        if(is_network_admin() &amp;amp;&amp;amp; self::is_ready()){
            add_action('network_admin_menu', array('wp_multisite_cron', 'network_admin_menu'));
        }
    }

    /**
     * 
     * Set up the admin menu(s)
     */
    public static function admin_menu(){
        add_options_page(&quot;WordPress multisite cron, information page&quot;, &quot;WP multisite cron&quot;, 'manage_options', 'wp_multisite_cron_settings', array('wp_multisite_cron', &quot;admin_settings&quot;));
    }

    /**
     * 
     * Set up the admin menu(s)
     */
    public static function network_admin_menu(){
        add_submenu_page(&quot;settings.php&quot;,&quot;WordPress multisite cron, information page&quot;, &quot;WP multisite cron&quot;, 'manage_options', 'wp_multisite_cron_settings', array('wp_multisite_cron', &quot;admin_settings&quot;));
    }


    /**
     * 
     * The admin settings page
     */
    public static function admin_settings(){
        ?&amp;gt;
        &amp;lt;div class=&quot;wrap&quot;&amp;gt;
            &amp;lt;div id=&quot;icon-options-general&quot; class=&quot;icon32&quot;&amp;gt;
                &amp;lt;br /&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;h2&amp;gt;WordPress multisite cron&amp;lt;/h2&amp;gt;

            &amp;lt;?php if (isset($_POST['wp_multisite_cron']) &amp;amp;&amp;amp; !empty($_POST['wp_multisite_cron'])) :

                if (isset($_POST['_wpnonce']) &amp;amp;&amp;amp; wp_verify_nonce( $_POST['_wpnonce'], plugin_basename( __FILE__ ) )) :
                    self::delete_option('concurrent_crons');

                    foreach($_POST['wp_multisite_cron'] as $option_name=&amp;gt;$option_value){
                        self::update_option($option_name, $option_value);
                    }
                ?&amp;gt;
                    &amp;lt;div id=&quot;setting-error-settings_updated&quot; class=&quot;updated settings-error&quot;&amp;gt;
                        &amp;lt;p&amp;gt;
                            &amp;lt;strong&amp;gt;&amp;lt;?php _e('Settings saved.')?&amp;gt;&amp;lt;/strong&amp;gt;
                        &amp;lt;/p&amp;gt;
                    &amp;lt;/div&amp;gt;
                &amp;lt;?php else: ?&amp;gt;
                    &amp;lt;div id=&quot;message&quot; class=&quot;error fade&quot;&amp;gt;
                        &amp;lt;p&amp;gt;&amp;lt;?php _e('Unable to update settings.',self::LANG)?&amp;gt;&amp;lt;/p&amp;gt;
                    &amp;lt;/div&amp;gt;
                &amp;lt;?php endif;?&amp;gt;
            &amp;lt;?php endif;?&amp;gt;



            &amp;lt;?php if(!is_multisite()):?&amp;gt;
                &amp;lt;div class=&quot;tool-box error&quot;&amp;gt;
                    &amp;lt;h3&amp;gt;&amp;lt;?php _e('Multisite',self::LANG) ?&amp;gt;&amp;lt;/h3&amp;gt;
                    &amp;lt;p&amp;gt;&amp;lt;?php _e('Your WordPress installation is not configured as multisite',self::LANG) ?&amp;gt;.&amp;lt;/p&amp;gt;
                    &amp;lt;p&amp;gt;&amp;lt;?php _e(&quot;Read the WordPress' documentation about multisite to learn how to set up multisite&quot;,self::LANG)?&amp;gt; : &amp;lt;a href=&quot;http://codex.wordpress.org/Create_A_Network&quot; target=&quot;_blank&quot;&amp;gt;&amp;lt;?php _e('here',self::LANG)?&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
                &amp;lt;/div&amp;gt;
            &amp;lt;?php endif;?&amp;gt;


            &amp;lt;?php if(!defined('DISABLE_WP_CRON') || !DISABLE_WP_CRON ):?&amp;gt;
                &amp;lt;div class=&quot;tool-box error&quot;&amp;gt;
                    &amp;lt;h3&amp;gt;&amp;lt;?php _e('WordPress default cron system',self::LANG) ?&amp;gt;&amp;lt;/h3&amp;gt;
                    &amp;lt;p&amp;gt;&amp;lt;?php _e('You must disable the WordPress cron system, to use this extension',self::LANG) ?&amp;gt;.&amp;lt;/p&amp;gt;
                    &amp;lt;p&amp;gt;&amp;lt;?php _e('Add the following code in your wp-config.php',self::LANG) ?&amp;gt; :&amp;lt;/p&amp;gt;
                    &amp;lt;p&amp;gt;
                        &amp;lt;code&amp;gt;define('DISABLE_WP_CRON', true);&amp;lt;/code&amp;gt;
                    &amp;lt;/p&amp;gt;
                &amp;lt;/div&amp;gt;
            &amp;lt;?php endif;?&amp;gt;

            &amp;lt;form action=&quot;&quot; method=&quot;post&quot;&amp;gt;
                &amp;lt;table class=&quot;form-table&quot;&amp;gt;
                    &amp;lt;tbody&amp;gt;
                        &amp;lt;tr valign=&quot;top&quot;&amp;gt;
                            &amp;lt;th scope=&quot;row&quot;&amp;gt;
                                &amp;lt;label for=&quot;concurrent_crons&quot;&amp;gt;&amp;lt;?php _e('Concurrent crons',self::LANG) ?&amp;gt;&amp;lt;/label&amp;gt;&amp;lt;br /&amp;gt;
                                &amp;lt;em&amp;gt;&amp;lt;?php _e(&quot;Lower it if some of your sites' cron don't run&quot;,self::LANG)?&amp;gt;&amp;lt;/em&amp;gt;
                            &amp;lt;/th&amp;gt;
                            &amp;lt;td&amp;gt;
                                &amp;lt;input type=&quot;text&quot; name=&quot;wp_multisite_cron[concurrent_crons]&quot; id=&quot;concurrent_crons&quot; value=&quot;&amp;lt;?php echo self::get_option('concurrent_crons') ?&amp;gt;&quot; /&amp;gt;
                            &amp;lt;/td&amp;gt;
                        &amp;lt;/tr&amp;gt;
                    &amp;lt;/tbody&amp;gt;
                &amp;lt;/table&amp;gt;
                &amp;lt;p class=&quot;submit&quot;&amp;gt;
                    &amp;lt;input class=&quot;button-primary&quot; name=&quot;plugin_ok&quot; value=&quot;&amp;lt;?php _e('Save settings',self::LANG) ?&amp;gt;&quot; type=&quot;submit&quot; /&amp;gt;
                &amp;lt;/p&amp;gt;
                &amp;lt;?php wp_nonce_field( plugin_basename( __FILE__ ), '_wpnonce' );?&amp;gt;
            &amp;lt;/form&amp;gt;


            &amp;lt;?php if(self::is_ready()): ?&amp;gt;
                &amp;lt;div class=&quot;tool-box&quot;&amp;gt;
                    &amp;lt;h3&amp;gt;&amp;lt;?php _e('Set-up WordPress multisite cron',self::LANG) ?&amp;gt;&amp;lt;/h3&amp;gt;
                    &amp;lt;p&amp;gt;&amp;lt;?php _e('Add the following line in your crontab',self::LANG)?&amp;gt; :&amp;lt;/p&amp;gt;
                    &amp;lt;p&amp;gt;
                        &amp;lt;code&amp;gt;*/15 *&amp;lt;?php echo &quot;\t&quot; ?&amp;gt;* * * www-data /usr/bin/wget -qO- &amp;lt;?php echo admin_url('admin-ajax.php','http').'?action=wp_multisite_cron_call' ?&amp;gt;&amp;lt;/code&amp;gt;
                    &amp;lt;/p&amp;gt;
                &amp;lt;/div&amp;gt;
            &amp;lt;?php endif;?&amp;gt;
        &amp;lt;/div&amp;gt;

        &amp;lt;?php 
    }

    /**
     * 
     * Check wether the config is ok to run real crons
     */
    public static function is_ready(){
        return (is_multisite() &amp;amp;&amp;amp; defined('DISABLE_WP_CRON') &amp;amp;&amp;amp; DISABLE_WP_CRON);
    }

    /**
     * 
     * The real cron
     */
    public static function cron_call(){

        //load the blogs id
        $blogs = self::get_blogs_id();
        if(count($blogs)){
            $mh = curl_multi_init();

            $length = self::get_option('concurrent_crons');
            $offset = 0;

            //Cut the 
            while($blogs_slice = array_slice($blogs,$offset,$length)){

                $offset += $length;

                foreach($blogs_slice as &amp;amp;$blog_id){
                    switch_to_blog($blog_id);
                    $cron_url = site_url().'/wp-cron.php?doing_wp_cron';

                    //Add the url to the stack
                    $chs[$blog_id]=curl_init();
                    curl_setopt($chs[$blog_id], CURLOPT_URL, $cron_url);
                    curl_setopt($chs[$blog_id], CURLOPT_HEADER, 0);
                    curl_multi_add_handle($mh, $ch);
                }

                //Launch :)
                $running = null;
                do{
                    curl_multi_exec($mh, $still_running);
                }while($still_running &amp;gt; 0);

                curl_multi_close($mh);
            }
        }
        die();
    }

    /**
     * 
     * Get the blog_id for each active blog in the multisite
     * @return array
     */
    public static function get_blogs_id(){
        global $wpdb;

        //Get the blogs' ids for blogs that are public and active
        $blogs = $wpdb-&amp;gt;get_col('SELECT blog_id FROM '.$wpdb-&amp;gt;blogs.' WHERE public=1 AND deleted=0');
        return $blogs;
    }

    /**
     * 
     * Get a plugin's specific option
     * @param string $option_name
     */
    public static function get_option($option_name){
        return get_option('wp_multisite_cron_'.$option_name);
    }

    /**
     * 
     * Set a plugin's specific option
     * @param unknown_type $option_name
     */
    public static function update_option($option_name,$option_value){
        return update_option('wp_multisite_cron_'.$option_name,$option_value);
    }

    /**
     * 
     * Delete a plugin's specific option
     * @param string $option_name
     */
    public static function delete_option($option_name){
        return delete_option('wp_multisite_cron_'.$option_name);
    }


    /**
     * 
     * get the plugin's path url
     */
    public static function get_plugin_url(){
        return get_bloginfo('url') . '/' . PLUGINDIR . '/' . dirname(plugin_basename(__FILE__));
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;cron_call 함수에서 200번 행을 중심으로 다음 블록이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//Add the url to the stack
$chs[$blog_id]=curl_init();
curl_setopt($chs[$blog_id], CURLOPT_URL, $cron_url);
curl_setopt($chs[$blog_id], CURLOPT_HEADER, 0);
curl_multi_add_handle($mh, $ch);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 먼저 컬 핸들러를 초기화합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$chs&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열. 그런 다음, 그 값들을 사용하는 대신에, 당신은 다음을 추가하려고 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$ch&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 멀티 핸들러에 변수가 있습니다. 아마 null일 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;적절한 오류 보고 설정 및 결과 확인을 통해&lt;/font&gt;&lt;/font&gt;&lt;code&gt;curl_multi_add_handle&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 핸들 추가 작업이 실패한 것을 확인할 수 있을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.php.net/manual/en/function.curl-multi-add-handle.php&quot; rel=&quot;nofollow&quot; papago-id=&quot;8-1&quot;&gt;php 설명서&lt;/a&gt;에서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int curl_multi_add_handle ( resource $mh , resource $ch )
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반환 값&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;성공 시 0을 반환하거나 CULM_XXX 오류 코드 중 하나를 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집: 제가 해결책에 대해 충분히 설명하지 못했을 수도 있지만, 대신해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;curl_multi_add_handle($mh, $ch);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 함께&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;curl_multi_add_handle($mh, $chs[$blog_id]);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/11815851/php-script-not-working-to-replace-wordpress-cron-for-multi-site&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>wordpress</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/749</guid>
      <comments>https://codebag.tistory.com/749#entry749comment</comments>
      <pubDate>Fri, 20 Oct 2023 13:39:02 +0900</pubDate>
    </item>
    <item>
      <title>브라우저에서 뒤로 버튼 클릭 감지</title>
      <link>https://codebag.tistory.com/748</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;브라우저에서 뒤로 버튼 클릭 감지&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;이 질문에는 이미 다음&lt;/b&gt;과 같은 &lt;b papago-id=&quot;1-1&quot;&gt;답변이 있습니다&lt;/b&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/1844491/intercepting-call-to-the-back-button-in-my-ajax-application&quot; dir=&quot;ltr&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 AJAX 응용프로그램의 백 버튼으로 호출 가로채기&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(13개 답변)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;닫힘&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;4-1&quot; title=&quot;2014-06-04:10:56Z&quot; papago-attr-id=&quot;1&quot;&gt;9년 전&lt;/span&gt;에.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;   &lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 뒤로 버튼을 클릭했는지 여부를 감지해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 위해 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;window.onbeforeunload = function (e) {
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 뒤로 버튼을 클릭하면 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이 이벤트는 사용자가 브라우저의 다시 로드 버튼을 클릭할 경우에도 실행됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 어떻게 고쳐요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아약스에 관한 한...&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지의 특정 부분을 탐색하기 위해 AJAX를 사용하는 대부분의 웹 애플리케이션을 사용하는 동안 뒤로 누르는 것은 큰 &lt;em papago-id=&quot;8-1&quot;&gt;문제&lt;/em&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 '버튼을 비활성화해야 한다는 것은 당신이 뭔가 잘못하고 있다는 것을 의미한다'는 것을 받아들이지 않고, 사실 서로 다른 측면의 개발자들은 오랫동안 이 문제에 부딪혀 왔습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 해결책은 이렇습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;window.onload = function () {
    if (typeof history.pushState === &quot;function&quot;) {
        history.pushState(&quot;jibberish&quot;, null, null);
        window.onpopstate = function () {
            history.pushState('newjibberish', null, null);
            // Handle the back (or forward) buttons here
            // Will NOT handle refresh, use onbeforeunload for this.
        };
    }
    else {
        var ignoreHashChange = true;
        window.onhashchange = function () {
            if (!ignoreHashChange) {
                ignoreHashChange = true;
                window.location.hash = Math.random();
                // Detect and redirect change here
                // Works in older Firefox and Internet Explorer 9
                // * it does mess with your hash symbol (anchor?) pound sign
                // delimiter on the end of the URL
            }
            else {
                ignoreHashChange = false;
            }
        };
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 크롬과 파이어폭스에서 작동합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;브라우저가 &quot;언로드 전에 켜짐&quot;을 지원하지 않는 경우 다음을 시도하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;jQuery(document).ready(function($) {

  if (window.history &amp;amp;&amp;amp; window.history.pushState) {

    $(window).on('popstate', function() {
      var hashLocation = location.hash;
      var hashSplit = hashLocation.split(&quot;#!/&quot;);
      var hashName = hashSplit[1];

      if (hashName !== '') {
        var hash = window.location.hash;
        if (hash === '') {
          alert('Back button was pressed.');
        }
      }
    });

    window.history.pushState('forward', null, './#forward');
  }

});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 아는 가장 좋은 방법은:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;window.onbeforeunload = function (e) {
    var e = e || window.event;
    var msg = &quot;Do you really want to leave this page?&quot;

    // For Internet Explorer and Firefox
    if (e) {
        e.returnValue = msg;
    }

    // For Safari / Chrome
    return msg;
};
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;뒤로 버튼을 감지하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;window.onload = function () {
if (typeof history.pushState === &quot;function&quot;) 
{
    history.pushState(&quot;jibberish&quot;, null, null);
    window.onpopstate = function () 
    {
        history.pushState('newjibberish', null, null);
        // Handle the back (or forward) buttons here
        // Will NOT handle refresh, use onbeforeunload for this.
    };
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작동은 되지만 처음에 페이지에 표시되는 것을 감지하려면 크롬에서 쿠키를 만들어야 합니다. 쿠키로 제어하지 않고 페이지에 들어가면 브라우저가 뒤로 가기 버튼을 클릭하지 않고 뒤로 가기 작업을 수행하기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (typeof history.pushState === &quot;function&quot;) 
{
    history.pushState(&quot;jibberish&quot;, null, null); 
    window.onpopstate = function () {
        if (((x = usera.indexOf(&quot;Chrome&quot;)) != -1) &amp;amp;&amp;amp; 
              readCookie('cookieChrome') == null) 
        {
            addCookie('cookieChrome', 1, 1440);      
        } 
        else 
        {
            history.pushState('newjibberish', null, null);  
        }
    };
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;0-0&quot;&gt;그리고&lt;/em&gt; 아주 &lt;em papago-id=&quot;0-0&quot;&gt;중요&lt;/em&gt;한 건&lt;/font&gt;&lt;/font&gt;&lt;code&gt;history.pushState(&quot;jibberish&quot;, null, null);&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;브라우저 기록을 복제합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 고치죠?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;뒤로 버튼은 브라우저의 기능이기 때문에 기본 기능을 변경하기 어려울 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 몇 가지 해결 방법이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기사를 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;&lt;a href=&quot;https://www.irt.org/script/311.htm&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Q311 브라우저의 &quot;뒤로&quot; 버튼을 비활성화하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 뒤로 버튼을 비활성화해야 하는 것은 프로그래밍 문제/결함을 보여주는 좋은 지표입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;양식을 이미 제출했는지 저장하는 session variable 설정이나 cookie 설정과 같은 방법을 찾고 싶습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 당신이 Ajax 내비게이션을 다루려고 하는 것이 아니라 당신의 사용자들이 백 버튼을 사용하는 것을 막으려고 하는 것이라고 가정합니다. 이것은 UI 개발의 거의 모든 원칙을 위반하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 몇 가지 가능한 해결책입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;http://tkyk.github.com/jquery-history-plugin/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery History&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://www.codeproject.com/KB/ajax/Salajax.aspx&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;살라작스&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://www.ajaxonomy.com/2007/web-design/a-better-ajax-back-button-solution&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;A Better Ajax Back 버튼&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/6359327/detect-back-button-click-in-browser&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>jQuery</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/748</guid>
      <comments>https://codebag.tistory.com/748#entry748comment</comments>
      <pubDate>Fri, 20 Oct 2023 13:38:51 +0900</pubDate>
    </item>
    <item>
      <title>Angularjs Clientside인지 Serverside인지 또는 둘 다인지 여부</title>
      <link>https://codebag.tistory.com/747</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angularjs Clientside인지 Serverside인지 또는 둘 다인지 여부&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버측: 데이터베이스에 연결하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클라이언트 쪽에서 사용하고 있었는데 서버 쪽에서도 사용 가능한가요?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버 쪽에서 사용할 수 없는 경우 pph 또는 nodejs를 사용해야 합니까(데이터 대역폭이 큰 웹사이트를 설계해야 함)?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 순전히 고객측입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버 쪽에서 데이터베이스에 연결하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클라이언트 측 데이터베이스를 사용하거나 서버에서 적절한 프로토콜을 사용하여 데이터를 가져오거나(일반적으로 이것은 Ajax를 통해 액세스되는 웹 서비스입니다).&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버 쪽에서 사용하지 않는다면 pph와 nodejs 중 어느 것이 더 나을지..&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(저는 엄청난 데이터와 대역폭을 사용하는 웹사이트를 설계해야 합니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;많은 측정 가능한 요건이 없는 &quot;Better&quot;는 매우 주관적입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://angularjs.org&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-0&quot;&gt;Angular JS&lt;/a&gt;는 데이터 바인딩 등을 위한 클라이언트 측 자바스크립트 프레임워크입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular JS와 함께 &lt;a href=&quot;http://nodejs.org/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;10-1&quot;&gt;Node JS&lt;/a&gt;를 서버측 작업에 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 PHP, Java 등과 같은 다른 서버 사이드 언어...&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular JS는 클라이언트 측에서만 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 경험에 의하면, NodeJS(특히 Express)와 가장 잘 작동한다는 것을 알게 되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS framework)를 사용할 수 있지만 다른 서버측 언어도 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AFAIK NodeJs는 빅데이터 관리를 보다 쉽게 해줍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/22301920/is-angularjs-clientside-or-serverside-or-both&lt;/font&gt;&lt;/p&gt;</description>
      <category>sourcecode</category>
      <category>AngularJS</category>
      <author>codebag</author>
      <guid isPermaLink="true">https://codebag.tistory.com/747</guid>
      <comments>https://codebag.tistory.com/747#entry747comment</comments>
      <pubDate>Fri, 20 Oct 2023 13:38:42 +0900</pubDate>
    </item>
  </channel>
</rss>