<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>프로그래밍 공부 이야기</title>
    <link>https://study-programming-tstory.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Mon, 3 Aug 2026 22:33:33 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>샤샤샤샤</managingEditor>
    <item>
      <title>c++ 클래스</title>
      <link>https://study-programming-tstory.tistory.com/157</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;c++ 은 클래스를 지원한다. 클래스는 쉽게 말해 함수와 변수를 담고 있는 객체다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분할 컴파일&lt;br /&gt;c++은 분할 컴파일을 지원한다. 같은 클래스를 여러개의 파일로 관리할 수 있다.&lt;br /&gt;#include &quot;클래스이름&quot;&lt;br /&gt;과 같이 적으면, 해당 파일은 이 클래스에 종속된다.&lt;br /&gt;따라서 헤더 파일에는 클래스의 선언만 하고, 소스 파일에 함수, 변수 등을 선언하는 방식으로 사용 가능하다.&lt;br /&gt;&lt;br /&gt;클래스의 컴파일&lt;br /&gt;헤더 파일은 단 한번 컴파일로 모든 헤더 파일을 컴파일하게 된다.&lt;br /&gt;즉 만약 내가 A라는 헤더파일을 만들고 B라는 헤더파일을 만들었다고 가정해보자. 이때 나는 두개의 클래스를 각각 include 할 필요가 없다. 하나만 include 해도 나머지 역시 자동으로 컴파일되기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#pragma&amp;nbsp;once&lt;br /&gt;컴파일시 한번만 정의되도록 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추상화&lt;br /&gt;함수의 선언과 실제 구현을 구분할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1762951633284&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//A.h 파일

#pragma once
class A {
public:
    void out();
};&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1762951661842&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// AFunc.cpp파일
#include &quot;A.h&quot;
#include &amp;lt;iostream&amp;gt;
    void A::out() {
	    std::cout &amp;lt;&amp;lt; &quot;A입니다.&quot;;

    }&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1762951673348&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// main코드

#include &quot;A.h&quot;

using namespace std;


int main() {
	A a;
	a.out();

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>공부/C++</category>
      <category>c++</category>
      <category>클래스</category>
      <author>샤샤샤샤</author>
      <guid isPermaLink="true">https://study-programming-tstory.tistory.com/157</guid>
      <comments>https://study-programming-tstory.tistory.com/157#entry157comment</comments>
      <pubDate>Wed, 12 Nov 2025 22:01:35 +0900</pubDate>
    </item>
    <item>
      <title>c++ 함수2</title>
      <link>https://study-programming-tstory.tistory.com/156</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;인라인 함수&lt;br /&gt;컴파일시, 함수가 저장된 메모리 주소를 가르키는 것이 아닌, 함수 자체가 해당 부분에 삽입되도록 하는 함수다. 즉, 프로그램이 실행되며 메모리 주소 00001 에서 a라는 함수를 호출할때, a가 저장된 01000 으로 이동하는 대신, 컴파일 시점에 00001의 a호출 부분에 아예 a함수를 삽입해버리는 것이다. 그러면 00001에서 01000 으로 이동하는 대신, 그냥 순서대로 코드를 실행시키면 된다. &lt;br /&gt;인라인 함수는 성능 향상의 이점이 있지만 함수가 간단하면 차이는 미미하다.&lt;/p&gt;
&lt;pre id=&quot;code_1762784974203&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

using namespace std;

inline int func(int);

int main() {
    cout &amp;lt;&amp;lt; func(5);
}

int func(int a) {
    return a*a;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수 선언 앞에 inline을 붙여 만들수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디폴트 매개변수&lt;br /&gt;매개변수의 기본값을 지정해준다. 매개변수가 들어오지 않을때 해당 값이 매개변수로 인식된다.&lt;/p&gt;
&lt;pre id=&quot;code_1762785186546&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

using namespace std;

 int func(int a = 3);

int main() {
    cout &amp;lt;&amp;lt; func() &amp;lt;&amp;lt; std::endl; // 9
    cout &amp;lt;&amp;lt; func(5) &amp;lt;&amp;lt; std::endl;  // 25
}

int func(int a) {
    return a*a;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디폴트 매개변수는 함수의 선언 시점에 매개변수 이름을 정의해주며 값을 넣어주면 된다.&lt;br /&gt;디폴트 매개변수는 여러 매개변수의 가장 오른쪽에 선언해야 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참조 변수&lt;br /&gt;c++ 에서 새롭게 도입한 변수. 참조 변수를 사용하면 함수 내부에서 구조체를 사용해도 복사본이 아닌 원본을 가르키게 된다. 일찍이 사용한 주소 연산자 &amp;amp; 를 사용한다. 즉, &amp;amp;는 코드 문맥에 따라 주소연산자가 되거나 참조연산자가 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1762786117289&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

using namespace std;

 void funcA(int* a, int* b);
 void funcB(int&amp;amp; a, int&amp;amp; b);
 void funcC(int, int);

int main() {
    int a1 = 100;
    int b1 = 200;

    cout &amp;lt;&amp;lt; &quot;처음: &quot; &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; &quot;a1: &quot; &amp;lt;&amp;lt; a1 &amp;lt;&amp;lt; &quot;, b1: &quot; &amp;lt;&amp;lt; b1 &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; &quot;포인터를 이용한 값 교환&quot; &amp;lt;&amp;lt; endl;
    funcA(&amp;amp;a1, &amp;amp;b1);
    cout &amp;lt;&amp;lt; &quot;포인터를 이용한 값 교환한 뒤:&quot; &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; &quot;a1: &quot; &amp;lt;&amp;lt; a1 &amp;lt;&amp;lt; &quot;, b1: &quot; &amp;lt;&amp;lt; b1 &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; &quot;참조를 이용한 값 교환&quot; &amp;lt;&amp;lt; endl;
    funcB(a1, b1);
    cout &amp;lt;&amp;lt; &quot;참조를 이용한 값 교환한 뒤:&quot; &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; &quot;a1: &quot; &amp;lt;&amp;lt; a1 &amp;lt;&amp;lt; &quot;, b1: &quot; &amp;lt;&amp;lt; b1 &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; &quot;값 이용한 값 교환&quot; &amp;lt;&amp;lt; endl;
    funcC(a1, b1);
    cout &amp;lt;&amp;lt; &quot;값 이용한 값 교환한 뒤:&quot; &amp;lt;&amp;lt; endl;
    cout &amp;lt;&amp;lt; &quot;a1: &quot; &amp;lt;&amp;lt; a1 &amp;lt;&amp;lt; &quot;, b1: &quot; &amp;lt;&amp;lt; b1 &amp;lt;&amp;lt; endl;
}

// 포인터로 전달
 void  funcA(int* a, int* b){
     int temp;
     temp = *a;
     *a = *b;
     *b = temp;
}


 // 참조로 전달
 void funcB(int&amp;amp; a, int&amp;amp; b) {
     int temp;
     temp = a;
     a = b;
     b = temp;
 }

 // 값으로 전달
 void funcC(int a, int b) {
     int temp;
     temp = a;
     a = b;
     b = temp;
 }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;두 매개변수 값을 바꾸는 함수다. 이를 실행한 결과는 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;469&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clVbbR/dJMcaawRafx/SkT3kqYfIPK4iBt24XbkFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clVbbR/dJMcaawRafx/SkT3kqYfIPK4iBt24XbkFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clVbbR/dJMcaawRafx/SkT3kqYfIPK4iBt24XbkFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclVbbR%2FdJMcaawRafx%2FSkT3kqYfIPK4iBt24XbkFK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;802&quot; height=&quot;469&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;469&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 처음 포인터를 이용해서 값이 바뀌었고, 이후 다시 참조를 이용해서 값이 다시 바뀌었다.&lt;br /&gt;반면 값을 매개변수로 받은 함수는, 함수 내부에서 복사본을 만들어 사용하기 때문에 값이 그대로인 것을 볼 수 있다.&lt;br /&gt;따라서 함수 내부에서 원본에 접근하고자 하면, 참조변수, 또는 포인터를 매개변수로 받아야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수의 오버로딩&lt;br /&gt;매개변수를 달리해서 같은 이름의 함수를 여러개 만드는 기능. 이때 매개변수는 같지만 리턴값이 다른 두 함수로 오버로딩하는 것 역시 안된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수의 템플릿&lt;br /&gt;c++ 은 템플릿이라는 기능을 제공한다. 다른 언어의 제네릭과 비슷한 개념으로, 매개변수 타입을 미리 지정해두지 않고, 런타임에 들어오는 형식에 맞게 지정되는 기능이다.&lt;br /&gt;아래의 코드를 보자.&lt;/p&gt;
&lt;pre id=&quot;code_1762950724197&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

using namespace std;

template &amp;lt;class ANY&amp;gt;
ANY sum(ANY, ANY);

int main() {
    int a = 100;
    int b = 200;

    float aFloat = 1.1;
    float bFloat = 2.1;

    cout &amp;lt;&amp;lt; sum(a, b) &amp;lt;&amp;lt; endl;  // 300
    cout &amp;lt;&amp;lt; sum(aFloat, bFloat);  // 3.2
}

template &amp;lt;class ANY&amp;gt;
ANY  sum(ANY a, ANY b){
     return a + b;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 함수가 각기 다른 타입의 매개변수를 받아, 각기 다른 타입의 결과를 리턴한다.&lt;br /&gt;다만 이때 하나 주의할건, ANY는 하나의 타입만 될 수 있다는 거다. 아래와 같은 코드는 불가능하다.&lt;/p&gt;
&lt;pre id=&quot;code_1762950845569&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

using namespace std;

template &amp;lt;class ANY&amp;gt;
ANY sum(ANY, ANY);

int main() {
    int a = 100;

    float aFloat = 1.1;

    cout &amp;lt;&amp;lt; sum(a, aFloat) &amp;lt;&amp;lt; endl;
}

template &amp;lt;class ANY&amp;gt;
ANY  sum(ANY a, ANY b){
     return a + b;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>c++</category>
      <category>함수</category>
      <author>샤샤샤샤</author>
      <guid isPermaLink="true">https://study-programming-tstory.tistory.com/156</guid>
      <comments>https://study-programming-tstory.tistory.com/156#entry156comment</comments>
      <pubDate>Wed, 12 Nov 2025 21:34:09 +0900</pubDate>
    </item>
    <item>
      <title>c++ 함수</title>
      <link>https://study-programming-tstory.tistory.com/155</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;c++ 는 컴파일러가 main을 가장 마지막에 컴파일 하지 않는다. 따라서 main에서 사용된 함수가 main 아래에서 선언된 경우, 컴파일 되지 않은 함수를 인식하지 못해 오류가 발생한다.&lt;/p&gt;
&lt;pre id=&quot;code_1762686839882&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

using namespace std;

int main()
{
	hello();
}

void hello() {
	cout &amp;lt;&amp;lt; &quot;hello world&quot;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 hello 는 main아래에 있어서 컴파일 시점에 오류가 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 막기 위해 함수 선언만 main위에 먼저 하고, 아래에서 다시 구현할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1762686916748&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void hello();

int main()
{
	hello();
}

void hello() {
	cout &amp;lt;&amp;lt; &quot;hello world&quot;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파라미터와 전달 인자&lt;br /&gt;함수를 호출할때 전달되는 값이 전달 인자, 함수 내부에서 사용되는 변수가 파라미터다. 전달인자란 실제 값, 파라미터는 함수 내부 변수라고 이해하면 편하다.&lt;/p&gt;
&lt;pre id=&quot;code_1762687159882&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

using namespace std;

void hello(int);

int main()
{
	hello(3);
}

void hello(int n) {
	cout &amp;lt;&amp;lt; &quot;hello world: &quot; &amp;lt;&amp;lt; n ;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수의 선언에서는 파라미터의 이름을 생략해도 문제가 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수와 배열&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수는 배열을 직접 return 해줄수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수와 구조체&lt;br /&gt;함수는 내부에서 구조체를 직접 파라미터로 받을수도 있고, 직접 구조체를 return할수도 있다. 그러나 이때 복사본을 만들어서 이로 작업하기 때문에 메모리를 많이 소모하게 되고, 복사 시간도 오래 걸리게 된다.&lt;br /&gt;이를 피하기 위해서는 아래와 같이 값이 아니라 메모리 주소(포인터) 로 넘길수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1762780899793&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

using namespace std;

struct Human {
    int age;
};

void increaseAge(Human* h) {  // 포인터로 전달
    h-&amp;gt;age += 1;              // 원본에 직접 접근
}

int main() {
    Human person;
    person.age = 20;

    increaseAge(&amp;amp;person);     // 주소 전달
    cout &amp;lt;&amp;lt; person.age &amp;lt;&amp;lt; endl;  
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수와 포인터&lt;br /&gt;함수 역시 특정 메모리에 저장되며, 메모리 주소를 가지고 있다. 따라서 포인터 변수에 함수를 담을 수 있다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1762784443669&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

using namespace std;

string func(string);

int main() {
    string(*p)(string);
    p = func;
    cout &amp;lt;&amp;lt; (*p)(&quot;hello&quot;);
}

string func(string a) {
    return a;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 string(*p)(string); 은 함수의 포인터가 된다. 앞에서 부터 분석해보면 string을 반환값으로 받으며 p라는 이름의 * 포인터인, (string) 을 매개변수로 받는, 함수의 포인터라는 의미다.&lt;br /&gt;그리고 이 포인터를 함수처럼 호출하는 것이 바로 (*p)(&quot;hello&quot;); 인 것이다.&lt;/p&gt;</description>
      <category>공부/C++</category>
      <category>c++</category>
      <category>함수</category>
      <author>샤샤샤샤</author>
      <guid isPermaLink="true">https://study-programming-tstory.tistory.com/155</guid>
      <comments>https://study-programming-tstory.tistory.com/155#entry155comment</comments>
      <pubDate>Mon, 10 Nov 2025 22:21:44 +0900</pubDate>
    </item>
    <item>
      <title>c++ 포인터</title>
      <link>https://study-programming-tstory.tistory.com/154</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;포인터&lt;br /&gt;모든 변수는 메모리의 특정 주소에 저장된다. 주소는 다음과 같이 알 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1762664549374&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

int main()
{
    int x;
    std::cin &amp;gt;&amp;gt; x;
    std::cout &amp;lt;&amp;lt; &amp;amp;x;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞에 &amp;amp;를 붙이면 알 수 있다.&lt;br /&gt;다만 이렇게 하려면, 반드시 값변수를 선언해야 한다. 먼저 값 변수를 선언하지 않고, 메모리 주소로 선언하는 변수가 바로 포인터다.&lt;br /&gt;포인터는 다음과 같이 선언 가능하다.&lt;/p&gt;
&lt;pre id=&quot;code_1762665003025&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

int main()
{
    int x = 3;
    int* y = &amp;amp;x;
    int *z = y;
    std::cout &amp;lt;&amp;lt; y &amp;lt;&amp;lt; std::endl; // 실제 y의 주소
    std::cout &amp;lt;&amp;lt; *y &amp;lt;&amp;lt; std::endl; // y의 값
    std::cout &amp;lt;&amp;lt; z &amp;lt;&amp;lt; std::endl; 
    std::cout &amp;lt;&amp;lt; *z &amp;lt;&amp;lt; std::endl; 

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*를 띄어쓰기 하고 붙이거나, 그냥 바로 붙여도 상관없다.&lt;br /&gt;실제 해당 메모리 주소가 표현하는 값을 알고 싶으면 변수명 앞에 *를 붙이면 된다.&lt;br /&gt;&lt;br /&gt;포인터는 배열로 선언할 수도 있다.&lt;br /&gt;이때 배열 내부 요소들은 해당 값들의 주소를 가르키게 되며, 배열 포인터 자체는 첫번째 요소를 가르킨다.&lt;/p&gt;
&lt;pre id=&quot;code_1762665380548&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using namespace std;

int main()
{
	int arr[3] = { 10, 20, 30 };
	int* x = arr;

	cout &amp;lt;&amp;lt; *x &amp;lt;&amp;lt; endl;     // 10
	cout &amp;lt;&amp;lt; *(x + 1) &amp;lt;&amp;lt; endl; // 20
	cout &amp;lt;&amp;lt; *(x + 2) &amp;lt;&amp;lt; endl; // 30
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 다음과 같이 출력해보자.&lt;/p&gt;
&lt;pre id=&quot;code_1762665409846&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using namespace std;

int main()
{
	int arr[3] = { 10, 20, 30 };
	int* x = arr;
	x = x + 1;

	cout &amp;lt;&amp;lt; *x &amp;lt;&amp;lt; endl;     // 20
	cout &amp;lt;&amp;lt; *(x + 1) &amp;lt;&amp;lt; endl; // 30
	cout &amp;lt;&amp;lt; *(x + 2) &amp;lt;&amp;lt; endl; // 의미없는 값
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;x+1의 의미는 배열을 메모리 주소를 한칸 뒤로 옮긴다는 것이다. 따라서 x의 첫번째 요소가 20, 두번째 요소가 30이 되고, 3번째 요소는 그 뒤의 메모리, 즉 뭔지 모를 값이 나오게 된다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포인터의 활용 new&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체지향언어는 실행 시간에 동적으로 메모리를 할당받을 수 있다는 장점이 있다. 그리고 이렇게 동적으로 변하는 메모리를 다루는 도구가 포인터다.&lt;br /&gt;구조체 역시 포인터로 생성 가능하며, 이때 new 예약어를 사용해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1762666853528&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

using namespace std;

struct Human { // 구조체 생성
	int age;
	char name[20]; 
};

int main()
{
	Human* human = new Human; // 포인터로 구조체 Human형식의 변수 생성

	cout &amp;lt;&amp;lt; &quot;나이를 입력하세요&quot;;
	cin &amp;gt;&amp;gt; human -&amp;gt; age; // 구조체 내부의 변수에 값 할당

	cout &amp;lt;&amp;lt; &quot;이름을 입력하세요&quot;;
	cin &amp;gt;&amp;gt; (*human).name; // 구조체 내부의 변수에 값 할당. -&amp;gt; 와 같은 동작

	cout &amp;lt;&amp;lt; &quot;이름은 &quot; &amp;lt;&amp;lt; human-&amp;gt;name &amp;lt;&amp;lt; &quot;입니다.&quot;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 new로 포인터 변수를 사용했으면 이제 메모리를 해제해줘야 한다. &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;더이상 사용하지 않아 메모리 공간을 낭비하고 싶지 않으면, 포인터를 삭제해줘야 한다. 배열 역시 한번의 delete[] 함수로 해제가 가능하다.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1762667465375&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

using namespace std;

struct Human {
	int age;
	char name[20];  // 문자열을 직접 가리키는 포인터
};

int main()
{
	Human* human = new Human;

	cout &amp;lt;&amp;lt; &quot;나이를 입력하세요&quot;;
	cin &amp;gt;&amp;gt; human -&amp;gt; age;

	cout &amp;lt;&amp;lt; &quot;이름을 입력하세요&quot;;
	cin &amp;gt;&amp;gt; (*human).name;

	cout &amp;lt;&amp;lt; &quot;이름은 &quot; &amp;lt;&amp;lt; human-&amp;gt;name &amp;lt;&amp;lt; &quot;입니다.&quot;;
	delete human;
	cout &amp;lt;&amp;lt; &quot;이름은 &quot; &amp;lt;&amp;lt; human-&amp;gt;name &amp;lt;&amp;lt; &quot;입니다.&quot;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 코드는 delete 이후의 human-&amp;gt;name 에서 에러가 발생한다. human 의 포인터가 삭제되면서, human 의 메모리 주소가 아무것도 없기 때문이다.&lt;/p&gt;</description>
      <category>공부/C++</category>
      <category>c++</category>
      <category>포인터</category>
      <author>샤샤샤샤</author>
      <guid isPermaLink="true">https://study-programming-tstory.tistory.com/154</guid>
      <comments>https://study-programming-tstory.tistory.com/154#entry154comment</comments>
      <pubDate>Sun, 9 Nov 2025 15:33:34 +0900</pubDate>
    </item>
    <item>
      <title>c++ 기본 문법</title>
      <link>https://study-programming-tstory.tistory.com/153</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;기본 자료형&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) char : 문자 한글자를 담는 자료형. 기본 1바이트다.&lt;br /&gt;2) short : 2바이트의 정수를 담을 수 있는 자료형. 2^16 만큼 표현 가능하다.&lt;br /&gt;3) int : 4바이트의 정수를 담을 수 있는 자료형. 2^32 만큼 표현 가능하다.&lt;br /&gt;4) long(long long int) : 8바이트를 담을수 있는 자료형. 2^64 까지 표현 가능하다. 본래 long long int 이니 long으로 줄여서 표현한다.&lt;br /&gt;5) float: 4바이트. 소수를 담을수 있다. 소수점 7자리까지 정확하게 표현 가능하다.&lt;br /&gt;6) double: 8바이트. 소수를 담을수 있다. 소수점 15~16 자리까지 정확하게 표현 가능하다.&lt;br /&gt;7) bool : 1바이트. 0과 1만 표현 가능하며, 0은 false, 1은 true 를 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전처리기 지시문 &lt;br /&gt;컴파일 전에 다른 파일을 포함시키기 위한 분법. 코드 상단에 #include &amp;lt;라이브러리 이름&amp;gt; 과 같이 사용한다. 컴파일 과정을 거치기 전, 컴파일러가 알아서 해당 파일을 불러와 컴파일 소스 상단에 해당 라이브러리의 소스를 붙여넣는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네임스페이스&lt;br /&gt;쉽게 말하자면 함수, 변수, 열거체 등의 이름이 존재하는 모든 것에 대해, 꼬리표를 다는 것이라고 생각하면 편하다.&lt;br /&gt;예를 들면 다음과 같다.&lt;br /&gt;a라이브러리의 out() 함수와 b 라이브러리의 out() 함수의 이름이 같아서 서로 충돌하는 상황이 발생할 수도 있다. 이를 막기 위해 a의 out()을 호출한다, 와 같이 명확한 명시가 필요하다.&lt;br /&gt;이것이 바로 namespace다. a::out()와 같이 호출하면 a의 out()함수를 호출한다.&lt;br /&gt;그러나 이름이 충돌하지도 않는데, 매번 이렇게 적어주는건 불필요하게 코드만 길어지고 개발자의 수고만 늘게 된다. 이를 막기 위해 상단 전처리기 지시문 아래에 using namespace a; 와 같이 적어서 전역적으로 사용 가능하다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;main 함수&lt;br /&gt;프로그램의 시작점. 기본적으로 c++ 코드는 main에서 실행된다. 따라서 프로젝트 1개는 1개의 main함수를 가질수 있다.&lt;br /&gt;&lt;br /&gt;입출력&lt;br /&gt;출력은 cout() 함수를 통해 가능하다. 이때 hello world 를 출력한다고 하면, cout(&quot;hello world&quot;) 가 아니다.&lt;br /&gt;입출력 함수는 비트 연산자 &amp;lt;&amp;lt; 와 &amp;gt;&amp;gt; 를 내부적으로 오버로딩하고 있기에, 이를 통해서 출력해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1762661309338&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

int main()
{
    std::cout &amp;lt;&amp;lt; &quot;Hello World!&quot;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 &amp;lt;&amp;lt; 는 뒤의 문자(문자열)을 출력하라는 의미가 된다. 본래 &amp;lt;&amp;lt;는 비트 하나만큼 옆으로 움직이라는 의미나, 입출력 함수에서는 출력, 입력받으라는 의미가 된다.&lt;br /&gt;따라서 입출력은 아래와 같이 해야한다.&lt;/p&gt;
&lt;pre id=&quot;code_1762661488096&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

int main()
{
    int x;
    std::cin &amp;gt;&amp;gt; x;
    std::cout &amp;lt;&amp;lt; x;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;char[] 와 같은 문자 배열을 출력할때, 빈 값을 만나야만 출력이 멈춘다. 따라서 char[] 형을 출력하고자 하면 배열의 마지막 요소에 빈 값을 의미하는&amp;nbsp; \0 을 명시적으로 넣어줘야 한다. 않그러면 \0을 만날때까지 계속 메모리를 읽는다.&lt;/p&gt;</description>
      <category>공부/C++</category>
      <category>c++</category>
      <category>기본</category>
      <author>샤샤샤샤</author>
      <guid isPermaLink="true">https://study-programming-tstory.tistory.com/153</guid>
      <comments>https://study-programming-tstory.tistory.com/153#entry153comment</comments>
      <pubDate>Sun, 9 Nov 2025 13:54:44 +0900</pubDate>
    </item>
    <item>
      <title>오픈미션 미션 정하기</title>
      <link>https://study-programming-tstory.tistory.com/152</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이번 미션에서는 자유 주제다. 아무거나 자신의 한계를 도전해볼만한 주제를 정해서 과제를 수행해서 결과물을 제출해야 한다. 일정은 최대 3주.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 고려한 주제는 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 내가 원하는 커스텀 AI 만들기&lt;br /&gt;2. 나만의 언어 새롭게 만들기&lt;br /&gt;3. 톰캣같은 서버 구축하기&lt;br /&gt;4. jvm 커스텀하여 내가 원하는 문법 추가하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1번은 너무 비현실적인 목표라고 생각했다. ai를 학습시킬 방법이 없을 뿐더러, RAG만 올리는 것은 내 목표와 다르고 너무 쉽기 때문이다. 3번은 반대로 너무 난이도가 높다고 생각해서 포기했다. 나는 최대한 외부 라이브러리를 사용하지 않고 저수준까지 내가 구현하는 방식으로 만들고 싶은데, 3주 안에 할 분량이 아니라고 판단이 되었다. 4번은 단순 구현은 너무 간단하고, 깊게 들어가려면 너무 어려워서 패스했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 2번, 나만의 언어 만들기를 목표로 설정했다. 최대한 라이브러리를 사용하지 않고, 과제 코드가 돌아갈만한 수준의 언어를 만드는 것은 충분히 어렵고 아슬아슬하게 할만한 목표라고 판단했다. 구현 언어는 자바 대신 c++로 정했다. 자바 인터프리터가 c와 c++로 이뤄진 만큼, 나역시 c++ 로 구현하는게 좋을것 같았다. 문제는 내가 c++에 대해 아는게 하나도 없다는것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;판다코딩님의 유튜브 강의를 보며 공부한 다음, 이를 바탕으로 구현할 예정이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=GqhZ5_RtNpQ&amp;amp;list=PLgqG2uj21HgkcfVtlr5rPekQl5VWJEnIB&amp;amp;index=1&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=GqhZ5_RtNpQ&amp;amp;list=PLgqG2uj21HgkcfVtlr5rPekQl5VWJEnIB&amp;amp;index=1&lt;/a&gt;&lt;/p&gt;</description>
      <category>사이드 프로젝트/우테코-오픈미션</category>
      <category>오픈미션</category>
      <category>우테코</category>
      <author>샤샤샤샤</author>
      <guid isPermaLink="true">https://study-programming-tstory.tistory.com/152</guid>
      <comments>https://study-programming-tstory.tistory.com/152#entry152comment</comments>
      <pubDate>Sun, 9 Nov 2025 12:39:12 +0900</pubDate>
    </item>
    <item>
      <title>C# - 디버깅 포인트가 제대로 안잡히고 함수를 스킵하는 문제</title>
      <link>https://study-programming-tstory.tistory.com/151</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;상황:&lt;br /&gt;디버깅 포인트를 설정하고 디버깅을 시도했을때, 디버깅 포인트에서 실행이 멈추지 않고 스킵되거나 변수가 안잡히고 최적화되는 문제&lt;br /&gt;&lt;br /&gt;원인:&lt;br /&gt;Debug 모드가 아닌 Release 모드로 실행했음.&lt;br /&gt;&lt;br /&gt;해결:&lt;br /&gt;Debug 모드로 디버깅.&lt;/p&gt;</description>
      <category>에러 기록</category>
      <category>C#</category>
      <category>디버깅</category>
      <category>에러</category>
      <author>샤샤샤샤</author>
      <guid isPermaLink="true">https://study-programming-tstory.tistory.com/151</guid>
      <comments>https://study-programming-tstory.tistory.com/151#entry151comment</comments>
      <pubDate>Fri, 13 Dec 2024 23:52:51 +0900</pubDate>
    </item>
    <item>
      <title>네트워크 경로와 가상 디렉토리</title>
      <link>https://study-programming-tstory.tistory.com/150</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;네트워크 경로&lt;br /&gt;네트워크를 통해서 접근 가능한 경로를 말한다.&lt;br /&gt;\\서버이름\공유이름\폴더 와 같이 표기하며, 이때 실제 경로는 해당 서버 -&amp;gt; 공유 이름 폴더 -&amp;gt; 폴더 로 이어진다.&lt;br /&gt;이때 해당 네트워크 경로로 접근 가능한 사용자는 윈도우의 특정 사용자 또는 그룹으로 지정 가능하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1475&quot; data-origin-height=&quot;912&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ehjvoq/btsLesxLRAe/KmkC4nGPg5pVTnX0K8hrB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ehjvoq/btsLesxLRAe/KmkC4nGPg5pVTnX0K8hrB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ehjvoq/btsLesxLRAe/KmkC4nGPg5pVTnX0K8hrB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fehjvoq%2FbtsLesxLRAe%2FKmkC4nGPg5pVTnX0K8hrB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1475&quot; height=&quot;912&quot; data-origin-width=&quot;1475&quot; data-origin-height=&quot;912&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가상 디렉토리&lt;br /&gt;실제 파일 시스템의 폴더를 서버에서 다른 경로로 지정하는 기능이다. &lt;br /&gt;D:/서버 폴더/data 라는 디렉토리가 있다고 가정하자. 원래라면 서버가 작동하는 컴퓨터 내부에 서버 폴더가 있고, 그 하위에 data 라는 폴더가 있을 것이다.&lt;br /&gt;이때 data 를 가상 디렉토리로 설정하여 C:/새폴더 로 매칭시키면, 서버가 자신 하위의 /data 로 접근할때, 실제로는 /data가 진짜 매칭된 위치, 즉 C드라이브 내부의 새폴더로 매칭되는 것이다.&lt;br /&gt;IIS 에서는 편하게 이를 사용하기 위해 가상 디렉토리를 간단하게 생성할 수 있는 기능을 지원한다.&lt;br /&gt;&lt;br /&gt;따라서 앞서 말한 네트워크 경로를 이용하여 웹 서버와 파일 서버를 분리하는 식으로 활용할수 있다.&lt;br /&gt;&lt;br /&gt;이때 웹 서버와 파일 서버는 액티브 디렉토리(Active Directory) 로 관리되고 있고 같은 도메인에 속해있거나, 아니면 아이디와 비밀번호가 같으면 접근이 가능하다.&lt;br /&gt;&lt;br /&gt;즉, 두 컴퓨터 모두 계정 id가 test 이고 비밀번호가 1234 이면 네트워크 경로를 통해 접근이 가능하다는 것이다. 따라서 네트워크 경로를 사용한다면 보안에 엄격한 주의가 필요하다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>공부</category>
      <category>C#</category>
      <category>IIS</category>
      <category>가상 디렉토리</category>
      <category>네트워크 경로</category>
      <category>윈도우</category>
      <author>샤샤샤샤</author>
      <guid isPermaLink="true">https://study-programming-tstory.tistory.com/150</guid>
      <comments>https://study-programming-tstory.tistory.com/150#entry150comment</comments>
      <pubDate>Wed, 11 Dec 2024 21:15:01 +0900</pubDate>
    </item>
    <item>
      <title>ASP.NET 에러 - '~'의 형식 이니셜라이저에서 예외를 Throw 했습니다.</title>
      <link>https://study-programming-tstory.tistory.com/149</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. 상황&lt;br /&gt;로컬에서는 문제없이 돌아가던 코드가 배포환경에서 오류가 발생&lt;br /&gt;&lt;br /&gt;2. 원인&lt;br /&gt;web.config 또는 app.config 파일에서 가져오는 외부 변수가 정의되지 않음.&lt;/p&gt;
&lt;pre id=&quot;code_1733918084027&quot; class=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;csharp&quot;&gt;&lt;code&gt; &amp;lt;add key=&quot;키이름&quot; value=&quot;값&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 식으로 코드 내부에서 가져다가 사용하는데, 배포 과정에서 해당 문구가 빠지게됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 해결&lt;br /&gt;app.config에 변수 정의&lt;/p&gt;</description>
      <category>에러 기록</category>
      <category>.NET</category>
      <category>ASP</category>
      <category>C#</category>
      <category>에러</category>
      <author>샤샤샤샤</author>
      <guid isPermaLink="true">https://study-programming-tstory.tistory.com/149</guid>
      <comments>https://study-programming-tstory.tistory.com/149#entry149comment</comments>
      <pubDate>Wed, 11 Dec 2024 20:56:07 +0900</pubDate>
    </item>
    <item>
      <title>SVN 커밋 에러 - [xxx] is not under version control출처:</title>
      <link>https://study-programming-tstory.tistory.com/148</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;상황:&lt;br /&gt;파일을 커밋하려고 하는데 해당 문구가 나오면서 커밋이 안됨&lt;br /&gt;&lt;br /&gt;원인:&lt;br /&gt;상위폴더가 커밋되지 않은 상태에서 하위폴더 커밋 시도.&lt;br /&gt;또는 커밋이 그냥 꼬임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해결:&lt;br /&gt;1. 상위 폴더와 하위 폴더를 같이, 또는 순서에 맞춰 커밋한다.&lt;br /&gt;2. 커밋이 꼬였으니 svn을 끊었다가 다시 연결한다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; - 1. 프로젝트 -&amp;gt; 우클릭 -&amp;gt; Team -&amp;gt; Disconnect&lt;br /&gt;&amp;nbsp; &amp;nbsp; - 2. also delete meta data ... 이런 문구가 적힌 옵션 클릭. svn 메타 데이터도 삭제하는 옵션이다.&lt;br /&gt;&amp;nbsp; &amp;nbsp; - 3. svn add/ 또는 &lt;span style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot;&gt;프로젝트 -&amp;gt; 우클릭 -&amp;gt; Team -&amp;gt; Share Project 를 통해 다시 svn 연결&lt;/span&gt;&lt;/p&gt;</description>
      <category>에러 기록</category>
      <category>SVN</category>
      <category>에러</category>
      <author>샤샤샤샤</author>
      <guid isPermaLink="true">https://study-programming-tstory.tistory.com/148</guid>
      <comments>https://study-programming-tstory.tistory.com/148#entry148comment</comments>
      <pubDate>Tue, 3 Dec 2024 21:26:39 +0900</pubDate>
    </item>
  </channel>
</rss>