- MoreEffectiveC++/Miscellany . . . . 324 matches
''program in future tense''는, 변화의 수용하고, 준비한다. 라이브러에 추가될 새로운 함수, 앞으로 일어날 새로운 오버로딩(overloading)을 알고, 잠재적으로 모호성을 가진 함수들의 결과를 예측한다. 새로운 클래스가 상속 계층에 추가될 것을 알고, 이러한 가능성에 대하여 준비한다. 새로운 어플리케이션에서 코드가 쓰이고, 그래서 새로운 목적으로 함수가 호출되고, 그런 함수들이 정확히 동작을 유지한다. 프로그래머들이 유지 보수를 할때, 일반적으로 원래의 개발자의 영역이 아닌, 유지 보수의 몫을 안다. 그러므로, 다른 사람에 의해서 소프트웨어는 이해, 수정, 발전의 관점에서 구현하고 디자인된다.
이런 좋은 소프트웨어를 만들기 위한 방법으로, 주석이나, 기타 다른 문서 대신에 C++ 내부에 디자인으로 구속해 버리는 것이다. 예를들자면 '''만약 클래스가 결코 다른 클래스로 유도되지를 원치 않을때''', 단시 주석을 헤더 파일에 넣는 것이 아니라, 유도를 방지하기 위하여 C++의 문법을 이용한 기술로 구속 시킨다.;이에 대한 방법은 '''Item 26'''에 언급되었다. 만약 클래스가 '''모든 인스턴스를 Heap영역에 생성시키고자 할때''', 클라이언트에게 말(문서)로 전달하는 것이 아니라. '''Item 27'''과 같은 접근으로 제한 시켜 버릴 수 있다. 만약 클래스에 대하여 복사와 할당을 막을려고 할때는, 복사 생성자와 할당(assignment) 연산자를 사역(private)으로 만들어 버려라. C++은 훌륭한 힘과, 유연성, 표현성을 제공한다. 이러한 언어의 특징들을 당신의 프로그래밍에서 디자인의 정책을 위해서 사용하라.
"변화한다.", 험난한 소프트웨어의 발전에 잘 견디는 클래스를 작성하라. (원문:Given that things will change, writeclasses that can withstand the rough-and-tumble world of software evolution.) "demand-paged"의 가상 함수를 피하라. 다른 이가 만들어 놓지 않으면, 너도 만들 방법이 없는 그런 경우를 피하라.(모호, 원문:Avoid "demand-paged" virtual functions, whereby you make no functions virtual unless somebody comes along and demands that you do it) 대신에 함수의 ''meaning''을 결정하고, 유도된 클래스에서 새롭게 정의할 것인지 판단하라. 그렇게 되면, 가상(virtual)으로 선언해라, 어떤 이라도 재정의 못할지라도 말이다. 그렇지 않다면, 비가상(nonvirtual)으로 선언해라, 그리고 차후에 그것을 바꾸어라 왜냐하면 그것은 다른사람을 편하게 하기 때문이다.;전체 클래스의 목적에서 변화를 유지하는지 확신을 해라.
모든 클래스에서 할당(assignment), 복사를 잡아라. "비록 아무것도 하지 않는 것"이라도 말이다. 왜냐하면 그것들이 지금 할수 없는건 미래에도 할수 없다는 의미이다. 만약 이러한 함수들이 구현하기에 어렵게 한다면, 그것을 private로 선언하라. 미래에도 동작시키게 하지 않다는 의미다. 컴파얼러가 만들어내는 함수에 대한 모호한 호출을 할리가 없다. (기본 할당 생성자나 기본 복사 생성자가 종종 발생되는 것처럼)
원리를 구현하기 위해 특이하게 하지 마라.:연산자와 함수를 자연스럽고 명시적인 문법으로 제공하라. built-in(기본 자료) 형으로 구현하라:의심될때는 int로 하라
어떤이가 무언가를 '''할수있다는것''' 알게되면 그들을 그것을 '''할것이다.''' 그들은 예외를 던질 것이다. 그들은 그들 스스로에게 객체를 할당할 것이다. 그들은 값을 제공하기전에 객체를 사용할 것이다. 그들은 객체를 제공하겠지만, 결코 사용하지 않는다. 그들은 커다란 값을 제공할 것이다. 그들은 아주 작은 값을 제공할 것이다. 그들은 null 값을 제공할 것이다. '''일반적으로 만약 컴파일이 되면 어떤이가 그것을 할것이다.''' 결과적으로 당신의 클래스를 정확히 사용하는건 쉽게, 이상하게 사용하는건 어렵게 만들어라. 클라이언트가 실수를 하도록 해라 그리고 당신의 클래스들이 그러한 에러들을 방지하고, 찾고, 수정할수 있게 만들어라. (예를들어 Item 33 참고)
당신의 코드를 변화가 필요할때, 그 효과를 지역화(지역화:localized) 시키도록 디자인 해라. 가능한한 캡슐화 하여라:구체적인 구현은 private 하라. 광범위하게 적용해야 할곳이 있다면 이름없는(unamed) namespace나, file-static객체 나 함수(Item 31참고)를 사용하라. 가상 기초 클래스가 주도하는 디자인은 피하라. 왜냐하면 그러한 클래스는 그들로 부터 유도된 모든 클래스가 초기화 해야만 한다. - 그들이 직접적으로 유도되지 않은 경우도(Item 4참고) if-than-else을 개단식으로 사용한 RTTI 기반의 디자인을 피하라.(Item 31참고) 항상 클래스의 계층은 변화한다. 각 코드들은 업데이트 되어야만 한다. 그리고 만약 하나를 읽어 버린다면, 당신의 컴파일러로 부터 아무런 warning를 받을수 없을 것이다.
여기에서 B는 D의 기초 클래스이다. 다른 말로 하자면 이 작성자는 만약 다음과 같은 경우에 B는 가상 파괴자(virtual destroctor)가 필요 없어 보인다.
그 의미는 클라이언트 코드에 대하여 약간의 변화가 -delete문-결과적으로 클래스 B의 정의까지 변화해야 하는 필요성을 보여준다. 그런한 상황이 발생하면, B의 클라이언트들은 모두 재 컴파일 해야 한다. 아까, 이 필자의 충고를 따르면, 확장 코드에 대한 클라이언트의 라이브러리도 재 컴파일, 재 연결해야 한다. 이는 소프트웨어 디자인에 효과를 미틴다.
* 만약 public base class가 가상 파괴자를 가지고 있지 않다면, 유도된 클래스나, 유도된 클래스의 멤버들이 파괴자를 가지고 있지 않다.
그렇지만 새로운 클래스가 B로부터 유도되면 바뀌어야 한다.
* 만약 다중 상속 상태에서 어떠한 파괴자가 있다면, 모든 기본 클래스가 아마 가상 파괴자(virtual destructor)가 되어야 할것이다.
이렇게 반복에서 말하는거 같이 현재의 시류를 생각하는걸 주시하라. 클라이언트가 '''지금''' 늘어나고 있는 의견들에 대하여 어떻게 해야 하는가? 어떤 클래스 멤버가 '''지금''' 파괴자를 가지고 있는가? 계층상에 어떤 클래크가 '''지금''' 파괴자를 가지는가?
미래의 시류로 생각하는 관점은 완전히 다르다. 지금 어떻게 클래스를 사용하느냐를 묻는것 대신에, '''어떻게 클래스를 디자인 하느냐를 묻는다.''' 미래 지향적 생각으로는 이렇게 말한다. 만약 기초 클래스로 사용된 클래스가 '''디자인''' 된다면 그 클래스는 가상 파괴자를 가져야 한다. 그러한 클래스는 지금과 미래 모두 정확히 동작해야 한다. 그리고 그들오 부터 클래스들이 파생될때 다른 라이브러리의 클래스에게 영향을 끼쳐서는 안된다. ( 최소한, 파괴자로 인한 논란 만큼, 영향이 없어야 한다. 추가적인 변화가 클래스에 필요하면 다른 클라이언트들오 아마 영향을 받을 것이다.)
상업용 클래스 라이브러리(C++표준 라이브러리 상의 string 스펙의 날짜를 앞당기려는 회사)는 가상 파괴자를 가지고 있지 않은 sting클래스를 포함한다. 그 벤더의 설명은?
확실히 vtbl 문제는 합법적인 접근이다. (Item 24참고) 대다수 String클래스의 구현에서 오직 하나의 char*를 각각의 String 객체가 가지고 있다. 그래서 각 String객체에 추가되는 vptr도 두배의 양을 차지한다. 허용하지 않으려는 이유는 이해하기 쉽다. String같은 클래스를 무겁게 사용하면 눈에 띠는 성능 저하가 있다. 앞서 언급한 경우 클래스당 성능 저하는 약 20%정도를 가지고 온다. (Item 16참고)
어떤 것이 더 많은 문제를 일으키는 것으로, 밴더들의 주목을 받고 있을까? "우리는 String*을 사용하는 목적을 가지지 않는다. 그래서 이는 별 문제가 되지 않는다." 그건 아마 사실일 것이다. 하지만 그들의 String클래스는 수많은 개발자들이 사용가능한 것이다. 수많은 개발자들이 C++의 수준이 제각각이다. 이러한 개발자들이 String상에서의 비가상 파괴자(no virtual destructor)를 이해할까? 그들이 비가상 파괴자를 가진 String때문에 String으로 유도된 새로운 클래스가 모험 비슷한 것을 알고 있을까? 이런 벤더들은 그들의 클라이언트들이 가상 파괴자가 없는 상태에서 String*를 통하여 삭제가 올바르게 작동하지 않고, RTTI와 String에 대한 참조가 아마 부정확한 정보를 반환한다는걸 확신시킬까? 이 클래스가 정확히 쓰기 쉬운 클래스일까? 부정확하게 쓰기 어려운 클래스일까?
이 벤더는 물론 String클래스에 관한 유도해서는 안되도록 디자인 된 문서들을 제공할 것이다. 하지만, 프로그래머들이 문서를 보는 도중에 그 부분을 놓쳤다면 어떻게 하겠는가?
... // 이제 해당 객체는 포인터처럼 다룬다. 하지만 delete를 부르지 말아야 한다.
하지만 정확하지 않게 동작하는 유도된 클래스의 사용을 억제하는 것은 문법적으로 상당히 불편함을 낳는다. (String에서 이런 문법적으로 불편한 면이 그리 강조되지 않다. 그렇지만 다른 클래스에서 이러한 문법적인 불편함을 따지는 면이 중요하다.)
- EffectiveC++ . . . . 242 matches
1. 상수 포인터(constant pointer)를 정의하기가 다소 까다로워 진다는 것.
2. 상수의 영역을 클래스로 제한하기 위해선 상수를 멤버로 만들어야 하며
멤버 변수를 만들어야 한다.
* inline: 함수 호출로 인한 오버헤드를 줄일수 있는.. 거시기. 궁금하면 책찾아보세요.
매크로는 말 그대로 치환이기 때문에 버그 발생할 확률이 높음. 상수선언이나 함수선언같은 경우는 가급적 const 나 inline으로 대체하는게 좋겠지. (으.. 그래도 실제로 짤때는 상수 선언할때는 #define 남용 경향이..[[BR]]
동적 메모리 할당을 행하는 클래스들은 메모리를 할당하기 위해서 생성자에 new를 쓴다. (CString class같은것들?)[[BR]]
그러나, 나중에 이렇게 만든 클래스를 누군가가 개선될경우 그리고, 개선된 클래스에서 포인터 멤버를 추가하게[[BR]]
* ''Initialization of the pointer in each of the constructors. If no memory is to be allocated to the pointer in a particular constructor, the pointer should be initialized to 0 (i.e., the null pointer). - 생성자 각각에서 포인터 초기화''
* ''Deletion of the existing memory and assignment of new memory in the assignment operator. - 포인터 멤버에 다시 메모리를 할당할 경우 기존의 메모리 해제와 새로운 메모리의 할당''
* ''Deletion of the pointer in the destructor. - 소멸자에서 포인터 삭제''
세번째 '''소멸자에서 포인터 삭제'''에 관한 것을 제대로 안해주면 메모리 유출(memory leak)으로 그냥 처리되기 때문에 클래스에 포인터 멤버를 추가할 때마다 반드시 명심해야 한다.
typedef void (* new_handler) {}; // 함수 pointer
// 연산자 new가 충분한 메모리를 할당하지 못할 경우 호출될 함수
''- 할당 루틴들이 new 핸들러 함수(memory 할당시 예외 처리같은 거들) 를 지원하고 [[BR]]
- 할당해제 루틴들이 널 포인터에 대처할 수 있다.[[BR]]''
멤버가 아닌 operator new
operator new 가 하부 클래스로 상속된다면 어떻게 될까? [[BR]]
그런데, 이 클래스를 위해 만들어진 operator new 연산자가 상속될 경우. [[BR]]
상속받은 클래스내에 operator new연산자를 다시 재정의 해줘야 한다. [[BR]]
멤버가 아닌 operator delete
- MoreEffectiveC++/Techniques1of3 . . . . 240 matches
* Item 25: 생성자와 비멤버 함수를 가상으로 돌아가게 하기.
가상 생성자, 이것에 관해서 생각해 보기는 좀 생소하다. 사실 가상 함수를 부를려면, 객체에대한 참조나, 포인터를 가지고 있어야 하는데, 생성할때 부터 가상(virtual) 함수를 사용한다? 좀 이상하지 않은가? 어떨때, 어떻게 이 '''가상 생성자''' 라는걸 써먹을수 있을꺼?
list 클래스는 STL로 이루어져 있는데, Item 35를 참고하면 정보를 얻을수 있다. 단순히 이중 연결 리스크(double linked list)라고 생각하면 무리가 없을 것이다.
readComponent가 무엇을 어떻게 하는지 궁리해 보자. 위에 언급한듯이 readComponent는 리스트에 넣을 TextBlock나 Graphic형의 객체를 디스크에서 읽어 드린 자료를 바탕으로 만들어 낸다. 그리고 최종적으로 만들어진 해당 객체의 포인터를 반환해서 list의 인자를 구성하게 해야 할것이다. 이때 마지막 코드에서 가상 생성자의 개념이 만들어 져야 할것이다. 입력되 는자료에 기초되어서, 알아서 만들어 인자. 개념상으로는 옳지만 실제로는 그렇게 구현될수는 없을 것이다. 객체를 생성할때 부터 형을 알고 있어야 하는건 자명하니까. 그렇다면 비슷하게 구현해 본다?
가상 생성자의 방식의 한 종류로 특별하게 가상 복자 생성자(virtual copy constructor)는 널리 쓰인다. 이 가상 복사 생성자는 새로운 사본의 포인터를 반환하는데 copySlef나 cloneSelf같은 복사의 개념으로 생성자를 구현하는 것이다. 다음 코드에서는 clone의 이름을 쓰였다.
보다시피 클래스의 가상 복사 생성자는 실제 복사 생성자를 호출한다. 그러므로 "복사" 의미로는 일반 복사 생성자와 수행 기능이 같다 하지만 다른 점은 만들어진 객체마다 제각각의 알맞는 복사 생성자를 만든다는 점이 다르다. 이런 clone이 NewsLetter 복사 생성자를 만들때 NLComponent들을 복사하는데 기여를 한다. 어떻게 더 쉬운 작업이 되는지 다음 예제를 보면 이해 할수 있을 것이다.
=== Making Non-Member Functions Act Virtual : 비멤버 함수를 가상 함수처럼 동작하게 하기 ===
생성자는 실제로 가상 함수가 될수 없다. 마찬가지로 비멤버 함수들 역시 마찬가지 이리라, 하지만 그러한 기능이 필요할 떄가 있다. 바로 앞 예제에서 NLComponent와 그것에서 유도된 클래스들을 예를 들어 보자면 이들을 operator<<으로 출력을 필요로 할때 이리라. 뭐 다음과 같이 하면 문제 없다.
// operator<<의 가상 함수
하지만 출력해야할 스트림 객체가 righ-hand 객체라는것이 사용자 입장에서 불편하게 만든다. 우리가 보통 사용하는 것처럼 스트림 객체에 출력할 객체를 넣는 다는 개념이 적용되지 않는 것이리라. 하지만, 전역 함수나 friend함수를 이용해서 구현한다면 더이상 가상함수로 구현할수가 없게 된다. 여기서의 방법이 비멤버 함수를 이용하는 것이다.
다음과 같이 가상 함수로 출력을 구현하고, 전역이든, namespace로 묶여 있든, 비 멤버 함수로 스트림 객체와의 출력의 고리를 연결시켜서, 비멤버 함수가 가상함수처럼 돌아가도록 구현한다.
가상 함수의 역할을 비멤버(non-member)함수로 구현한 사례이다. 비 멤버 함수이지만 inline을 통해서 가상 함수와의 직접 연결 통로를 만들었다.
비멤버 함수의 가상(virtual)관련 사용에 대하여 더 다루자면 내용이 복잡해 진다. 이에 대한 관련 사항은 Item 31을 참고하라
friend Printer& thePrinter(); // 이 friend 함수가 유일한 객체 하나를 유지 시키고
해당 디자인은 세가지의 중점으로 이해 하면 된다. '''첫번째''' Printer클래스의 생성자를 private(사역)인자로 설정한다. 이는 객체 생성을 제한한다. '''두번째''' 전역 함수인 thePrinter를 Printer클래스의 friend로 선언한다. 그래서 이 thePrinter가 첫번째에서의 제한에 상관없이 관여 가능하도록 만든다. '''마지막으로(세번째)''' 전역함수인 thePrinter 내부에 정적(static) Printer 객체를 만든다. 이는 오직 하나만의 객체를 thePrinter내부에 유지시킨다.
하지만 이렇게 구현시에는 thePrinter가 "'''전역 공간을 사용해야 한다.'''" 것으로 코드를 약하게 만든다. 알다 시피, 전역 공간의 사용은 되도록이면 피해야 하는 방법이며, thePrinter를 Printer클래스 내부에 숨기기를 추천하다. thePrinter를 Printer클래스 내부 메소드로 넣어 버리고, friend를 삭제해 보자.
class Printer { // namespace로서 이 클래스는
Printer& thePrinter() // 이 friend 함수 역시 전역이 아닌
'''첫번째'''로 만들어지는 객체의 위치이다. 위의 제시된 두가지의 방법에서, Printer 정적(staitc) 객체가 하나는 friend로 클래스의 제어권을 획득한 함수 내부에 있고, 또 하나는 클래스 멤버 메소드 내부에 있다. 함수에 있는 경우에는 정적(static) 객체는 항상 만들어져 있다. 이 의미는 해당 코드의 프로그램이 시작될때 부터 아예 객체가 만들어 진다는 의미이다. 즉, 한번도 그 객체를 사용하지 않아도, 객체는 이미 만들어져 비용을 지출하게 한다. 반면에, 함수 멤버 메소드 내부에 정적(static)객체를 만들 후자의 경우에는 객체를 만드는 역할을 하는 메소드인 Printer::thePrinter 가 제일 처음 호출될때 객체가 생성된다. 이것은 C++에서 "사용하지 않는 객체에 대한 비용은 지불하지 않는다."의 설계 다소 복잡한 이념에 근간을 둔 개념이다. 그리고 이러한 복잡한 개념은 당신을 해깔리게 만든다.
또 이 둘의 다른 취약점은 초기화 되는 시간이다. 우리는 함수의 경우에 초기화 시간을 정확히 알수 있다. 아예 처음 이니까 하지만 멤버 메소드로 구현시에는 모호하다. C++는 확실히 특별하게 해석해야 할 부분(단일 객체에서 소스 코드 몸체 부분 따위)은 정적 인자들에 대한 초기화 순서가 보장 된다. 하지만 서로 다른 해석 부분(translation unit)에 있는 정적 객체들의 초기화 순서에 대해서는 말할수가 없다. 이것은 머리를 아프게만 할뿐이다.
- C/C++어려운선언문해석하기 . . . . 176 matches
다루겠습니다. 우리가 매일 흔히 볼 수 있는 선언문을 비롯해서 간간히 문제의 소지를 일으킬 수 있는 const 수정자와 typedef 및 함수
포인터를 다룬 후 마지막으로 "오른쪽에서 왼쪽으로" 규칙을 알아 봅니다.
포인터로 넘어가서 다음과 같은 선언문을 보게되면,
'변수 p를 int *형으로 선언한다' 라고 해석할 수 있고 다시 말하면 '변수 p를 int형을 가리키는 포인터로 선언한다'라고 할 수 있습니
다. 여기서 잠깐 샛길로 빠져서 포인터 연산자(*) 또는 참조 연산자(&)는 변수 형 (int)에 붙이는 것 보다 변수(p)에 붙이는것이 항상
위의 선언문을 처음 보게 되면 변수 p와 변수 q가 마치 int를 가리키는 포인터형 (int *) 변수로 선언된 것 처럼 보입니다. 하지만 사실
변수 p만 int를 가리키는 포인터형으로 선언되었고 변수q는 int형으로 선언된 것입니다. (역자주: int *p; int *q; 처럼 각각 따로 선언
우리는 또한 포인터를 가리키는 포인터를 선언할 수 있습니다.
원리만 따지자면 이 관계는 무한히 반복될 수 있습니다. 따라서 우리는 float형을 가리키는 포인터를 가리키는 포인터를 가리키는 포인
변수 p는 int형을 요소로 하는 크기가 4인 배열을 가리키는 포인터(a pointer to an array of 4 ints)이며, 변수 q는 int형 포인터를 요
const가 포인터와 결합되면 조금 복잡해집니다. 예를 들어서 다음과 같은 변수 p, q가 선언되었습니다.
그럼 여기서 퀴즈, const int형을 가리키는 포인터와 int형을 가리키는 const 포인터를 구별해보세요.
사실 두 변수 모두 const int를 가리키는 포인터입니다. int 형을 가리키는 const 포인터는 다음과 같이 선언됩니다.
위에서 p와 q는 const int형 변수이기 때문에 *p 나 *q의 값을 변경할 수 없습니다. r은 const 포인터이기 때문에 일단 위와 같이 선언
위에서 나온 두 가지 선언문을 결합하여 const int 형을 가리키는 const 포인터를 선언하려고 하면 다음과 같습니다.
변수 p, q 모두 char를 가리키는 포인터 변수가 됩니다. typedef가 사용되지 않았다면 q는 char를 가리키는 포인터 변수가 아니라 char 형 변수였을 텐데 솔직히 이런 사실을 모르는 경우 실수하기 쉽상이죠.
// char형을 가리키는 포인터
// char형을 가리키는 포인터를 리턴하는
// 함수
// char형을 가리키는 포인터을 리턴하는
- MoreEffectiveC++/Techniques2of3 . . . . 158 matches
a~e까지 모두 "Hello"라는 같은 값을 가지고 있는 다른 객체이다. 이 클래스는 참조 세기가 적용되지 않았기 때문에 모두 각각의 값을 가지고 있다. 문자열의 할당(assignment) 연산자는 아마 다음과 같이 구현되어 있을 것이다.
참조 세기를 하는 String 클래스를 만드는건 어렵지는 않지만, 세세한 부분에 주목해서 어떻게 그러한 클래스가 구현되는지 주목해 보자. 일단, 자료를 저장하는 저장소가 있고, 참조를 셀수 있는 카운터가 있어야 하는데, 이 둘을 하나로 묶어서 StringValue 구조체로 잡는다. 구조체는 String의 사역(private)에 위치한다.[[BR]]
char *data; // 값 포인터
다음과 같다. 여기에서 "More Effective C++" 라는 문자열을 공유한다면, 참조세기가 이루어 지는 것일 거다. 그러기 위해서 String의 복사 생성자는, 참조 카운터를 올리고, 자료를 새로 생성할것이 아니라, 그냥 포인터만 세팅해 주는 일을 해야 한다. 이런 과정을 구현하면
// String 클래스의 복사 생성자, 초기화 목록으로 StringValue의 포인터를 세팅한다.
여기서의 요점은 참조세기가 적용되지 않은 String 클래스보다 더 효율이 높아 진다는 점이다. 이 책 전반에 계속 언급했듯이, 생성과 파괴 같은 시간과, 공간의 많은 비용을 소모하는 식이 아닌, 해당 포인터만을 복사하므로, 일단, 생성시의 비용을 아낀다.
참조세기가 적용된 문자열에 대하여 둘러 봤는데, 이번에는 배열에 관한(array-bracket) 연산자들 "[]" 이녀석들에 관해서 생각해 보자. 클래스의 선언은 다음과 같다.
(이 함수는 원래의 C++에서 배열의 사용 개념과 같이, index의 유효성을 점검하지 않는다. 이에 대한 감은은 참조 세기의 주제에 떨어져 있고, 추가하는 것도 그리 어려운일이 아니라 일단은 제외한다.)
=== Pointers, References, and Copy-on-Write : 포인터, 참조, 쓰기에 기반한 복사 ===
이런것을 해결할수 있는 방법으로는 최소한 세가지를 생각할수 있는데, '''첫번째'''는 이것을 없는걸로 취급하고, 무시 해 버리는 것이다. 이러한 접근 방향은 참조 세기가 적용되어 있는 클래스 라이브러리에 상당한 괴로움을 덜어 주는것이다. 하지만 이러한 문제를 구현상에서 완전히 무시할수는 없는 노릇이다. '''두번째'''로 생각할수 있는 방법은 이러한것을 하지 말도록 명시하는 것인데, 역시나 복잡하다. '''세번째'''로, 뭐 결국 제거야만 할것이다. 이러한 분제의 제거는 그리 어렵지는 않다. 문제는 효율이다. 이런 중복에 관련한 문제를 제거하기 위해서는, 새로운 자료 구조를 만들어 내야하고, 이것의 의미는 객체간에 서로 공유하는 자료가 줄어 든다는 의미이다. 즉, 비용이 많이 들어간다. 하지만 어쩔수 없지 않을까?
만약 Item 30에 언급되는 proxy 클래스 방법을 사용해서 읽는 작업과, 쓰는 작업에 대한 것을 구분한다면 StringValue 객체의 숫자를 좀더 줄일수 있을 것이다. 그건 다음 장에서 보자.
=== A Reference-Counting Base Class : 참조-세기 기초 클래스 ===
제일 처음에 해야 할일은 참조세기가 적용된 객체를 위한 (reference-counded object) RCObject같은 기초 클래스를 만드는 것이다. 어떠한 클라스라도 이 클래스를 상속받으면 자동적으로 참조세기의 기능이 구현되는 형식을 바라는 것이다. 그러기 위해서는 RCObject가 가지고 있어야 하는 능력은 카운터에 대한 증감에 대한 능력일 것이다. 게다가 더 이상, 사용이 필요 없는 시점에서는 파괴되어야 한것이다. 다시말해, 파괴되는 시점은 카운터의 인자가 0이 될때이다. 그리고 공유 허용 플래그에 대한(shareable flag) 관한 것은, 현재가 공유 가능한 상태인지 검증하는 메소드와, 공유를 묶어 버리는 메소드, 이렇게만 있으면 될것이다. 공유를 푼다는 것은 지금까지의 생각으로는 불가능한 것이기 때문이다.
RCObject는 생성되고, 파괴되어 질수 있어야 한다. 새로운 참조가 추가되면 현재의 참조는 제거되어야 한다. 공유 상태에 대해 여부를 알수 있어야 하며, disable로 설정할수 있어야 한다. 파괴자에 대한 실수를 방지하기 위하여 베이스 클래스는 파괴자를 가상 함수로선언해야 된다. 여기에서는 순수 가상 함수(pure virtual function)로 선언한다.
RCObject::~RCObject() {} // 파괴자는 그것이 순수 가상 함수라도
의문 하나, 흥미롭게도 처음에 refCount를 0으로 세팅한다. 이건 직관적이지 못하게 보이는데, 확실히 새로 만들어지는 RCObject의 생성자는 새로 만들어진 RCObject를 참조하고 있을 것이기 때문이다. 하지만 이러한 이유는, 새로운 객체가 할당된 뒤에 유도된 클래스 스스로, refCount를 증가 시켜주기위해서 이다. 이것이 사용자에게 더 명시적인 코드를 작성하게 된다.
의문 셋, 할당(assignment) 연산자는 아까 공유 문제를 뒤집어 버리는 것 처럼 보인다. 하지만 이 객체는 기초 클래스이다. 어떤 상황에서 이를 유도하는 다른 클래스가 공유 flag를 비활성화 시키는지 확신 할수 없기 때문에, 일단 아무것도 하지 않고, 현재의 객체를 반환하게 해 두었다.
자, RCObject는 기초 클래스이며, 차후 데이터를 저장하는 공간은 RCObject의 자식에게서 구현되어 진다. 그래서 opreator=은 유도 된 클래스에서 원할때 이 참조 객체를 바꾸기 위하여, RCObject::operator= 형식으로 불러야 한다. 이하, 거의다 소스 자체를 이해해야 한다. 해당 RCObject를 이용해서 유도된 클래스의 모양은 다음과 같으며, 모든 코드는 구현하지 않겠지만, 지금까지의 개념으로 이해할수 있을 것이다.
이 StringValue버전은 이전에 보던것과 거의 동일한 형태를 보인다.단, refCount를 다루는 것만이 RCObject의 멤버 함수로서 모든 기능을 후행하는 것이다. 이 것의 더 구체적인 코드는 다음 장에서 보이는 스마트 포인터를 이용한 자동 참조 카운팅 기능을 덧붙이면서 어차피 모든 코드를 서술할 것이다.
이번 주제의 nested class의 모습을 보면 그리 좋와 보이지는 않을 것이다.처음에는 생소하겠지만, 이러한 방버은 정당한 것이다. nested클래스의 방법은 수많은 클래스의 종류중 단지 하나 뿐이다. 이것을 특별히 취급하지는 말아라.
- 새싹교실/2012/startLine . . . . 150 matches
* 입, 출력 함수(printf, scanf)와 테스트 함수(assert).
* 왜 테스트 함수를 써야 하는가.
* 정확하게 알지 못 하는 부분들(함수, call by value, call by reference, 구조체, 포인터)
* 서민관 - 간단하게 재현이가 C문법 알고있는 부분 알아보기, 함수 만들어보기, 전체적인 계획 설명, gcc 사용법. 일단 제어문과 간단한 함수 문법까지도 알고 있는 것 같다. 어제 일도 있어서 긴장을 많이 했는데 그래도 생각보다 어렵지는 않았다. 앞으로는 좀 더 예제등을 준비해야겠다.
* 서민관 - 제어문의 사용에 대한 수업(if문법, switch.. for...) 몇몇 제어문에서 주의해야 할 점들(switch에서의 break, 반복문의 종료조건등..) 그리고 중간중간에 쉬면서 환희가 약간 관심을 보인 부분들에 대해서 설명(윈도우 프로그래밍, python, 다른 c함수들) 저번에 생각보다 진행이 매끄럽지 않아서 이번에도 진행에 대한 걱정을 했는데 1:1이라 그런지 비교적 진행이 편했다. 그리고 환희가 생각보다 다양한 부분에 관심을 가지고 질문을 하는 것 같아서 보기 좋았다. 새내기들이 C를 배우기가 꽤 힘들지 않을까 했는데 의외로 if문이나 for문에서 문법의 이해가 빠른 것 같아서 좀 놀랐다. printf, scanf나 기타 헷갈리기 쉬운 c의 기본문법을 잘 알고 있어서 간단한 실습을 하기에 편했다.
* 함수의 역할과 인자/리턴 타입에 따른 함수의 종류.
* 함수의 사용.
* swap 함수를 통해서 알아본 현재 시점에서 함수의 문제.
* 간단한 이전 시간(if문, 반복문)의 복습과 배열의 사용에 대해 알아보았다. 그리고 이번 시간에 주로 한 내용은 함수가 왜 필요한지와 함수를 만드는 법, 함수를 사용하는 법 등이었다. 개인적으로는 함수를 꽤 중요하게 생각하는 만큼 함수의 필요성을 잘 캐치해 줬으면 좋겠다. 그리고 새삼 드는 생각이지만 환희의 질문이 중요한 부분을 잘 찌른다는 생각이 든다. 별다른 언급도 없었는데 함수 내에서 변수의 scope나 함수 내부의 이름 겹침 등에 대한 질문이 있었다. 그리고 중간에 함수 사용의 예제로 printf문을 약간 이상하게 쓴 코드를 보여줬는데 의외로 감을 잘 잡은 것 같았다. 현재 진행상황으로는 다음에 포인터를 다뤄야 할텐데 함수를 쓰는 것을 조금 더 연습을 시킬지 바로 포인터를 나갈지 고민이다. 당장 포인터를 했다가 어려워하지 않을까 모르겠다. - [서민관]
- 함수란? 함수의 정의, 만드는 예제
* 재현, 성훈이의 함수에 대한 지식 확인.
* swap 함수를 만들어보고 문제점 확인.
* 포인터의 개념, 프로그램 실행시 메모리의 구조.
* malloc 함수를 이용한 메모리 할당.
* 배열과 포인터의 관계.
* 처음에 간단하게 재현, 성훈이의 함수에 대한 지식을 확인했다. 그 후에 swap 함수를 만들어 보고 실행시의 문제점에 대해서 이야기를 했다. 함수가 실제로 인자를 그대로 전달하지 않고 값을 복사한다는 것을 이야기 한 후에 포인터에 대한 이야기로 들어갔다. 개인적으로 새싹을 시작하기 전에 가장 고민했던 부분이 포인터를 어떤 타이밍에 넣는가였는데, 아무래도 call-by-value의 문제점에 대해서 이야기를 하면서 포인터를 꺼내는 것이 가장 효과적이지 않을까 싶다. 그 후에는 주로 그림을 통해서 프로그램 실행시 메모리 구조가 어떻게 되는지에 대해서 설명을 하고 포인터 변수를 통해 주소값을 넘기는 방법(call-by-reference)을 이야기했다. 그리고 malloc을 이용해서 메모리를 할당하는 것과 배열과 포인터의 관계에 대해서도 다루었다. 개인적인 느낌으로는 재현이는 약간 표현이 소극적인 것 같아서 정확히 어느 정도 내용을 이해했는지 알기가 어려운 느낌이 있다. 최대한 메모리 구조를 그림으로 알기 쉽게 표현했다고 생각하는데, 그래도 정확한 이해도를 알기 위해서는 연습문제 등이 필요하지 않을까 싶다. 성훈이는 C언어 자체 외에도 이런저런 부분에서 질문이 많았는데 아무래도 C언어 아래 부분쪽에 흥미가 좀 있는 것 같다. 그리고 아무래도 예제를 좀 더 구해야 하지 않을까 하는 생각이 든다. - [서민관]
* 포인터의 기초와 포인터를 이용한 swap 함수 구현, 값 변환. 그리고 malloc의 형태 기초와 좀 더 쉽게 쓰는 법 익힘. 다음엔 malloc을 이용한 응용프로그램 구현을 해보고 싶다. - [최재현]
* 포인터의 정의, 포인터 변수의 정의, malloc 함수, fflush() 함수, getchar() 함수, 메모리의 heap과 stack 영역, (int)a와 *(*(int a))의 차이, 포인터의 OS별 크기(DWORD 크기를 따라간다. 32bit/64bit),
해봐야 할 것 - 디버깅, 가변인자함수 조사, 복습. - [이성훈]
* swap 함수에 대해서 복습.
- MoreEffectiveC++/Efficiency . . . . 125 matches
대부분 프로그래머들은 그들의 프로그램에 관한 특성에 관하여 멍청한 직관력을 가지고 있다. 왜냐하면 프로그램 성능의 특징은 아주 직관적이지 못하다. 결과적으로 남에 눈에는 띄지 않고 말할수 많은 노력이 성능 향상을 위해 프로그램의 관련된 부분에 쏟아 부어 진다. 예를들어서 아마, 계산을 최소화 시키는 알고리즘과 데이터 구조가 프로그램에 적용 되다. 그렇지만 만약에 입출(I/O-bound)력 부분 적용된다면 저것은 허사가 된다. 증가되는 I/O 라이브러리는 아마 컴파일러에 의하여 바뀐 그 코드에 의해 교체될것이다. 그렇지만, 프로그램이 CPU-bound에 대한 사용이라면 또 이건 별로 중요한 포인터(관점)이 되지 않는 것이다.
프로파일러(profiler:분석자)는 각각의 구문이 몇번이나 실행되는가 아니면 각각의 함수들이 몇번이나 불리는거 정도를 알려주는 유틸리티이다. 성능(performance)관점에서 당신은 함수가 몇번 분리는가에 관해서는 그리 큰 관심을 두지 않을 것이다. 프로그램의 사용자 수를 세거나, 너무 많은 구문이 수행되어 불평을 받는 라이브러리를 사용하는 클라이언트의 수를 세거나, 혹은 너무 많은 함수들이 불리는 것을 세는 것은 다소 드문 일이기도 하다. 하지만 만약 당신의 소프트웨어가 충분이 빠르다면 아무도 실행되는 구문의 수에 관해 관여치 않는다. 그리고 만약 너무 느리면 반대겠지. (이후 문장이 너무 이상해서 생략, 바보 작성자)
몇번이나 구문이 실행되는가, 함수가 실행되는가는 때때로 당신의 소프트웨어 안의 모습을 이야기 해준다. 예를들어 만약 당신이특별한 형태의 객체를 수백개를 만든다고 하면, 생성자의 횟수를 세는것도 충분히 값어치 있는 일일 것이다. 게다가 구문과, 함수가 불리는 숫자는 당신에게 직접적인 해결책은 제시 못하겠지만, 소프트웨어의 한면을 이해하는데 도움을 줄것이다. 예를들어서 만약 당신은 동적 메모리 사용을 해결하기 위한 방법을 찾지 못한다면 최소한 몇번의 메모리 할당과 해제 함수가 불리는것을 아게되는것은 유용한 도움을 줄지도 모른다. (e.g., operators new, new[], delete and delete[] - Item 8참고)
이런 같은 관점을 이제 막 5년차 C++프로그래머에 대입 시켜본다. 컴퓨터 과학에서, 우리는 그러한 뒤로 미루기를 바로 ''''lazy evaluation''''(구지 해석하면 '''필요시 연산, (최)후 연산, 늦은 연산'''정도라 할수 있겠다.)이라고 말한다. 당신이 lazy evaluation을 사용하면 당신의 클래스들이 최종적으로 원하는 결과가 나올 시간까지 지연되는 그런 상태로 코딩을 해야 한다. 만약 결과값을 결국에는 요구하지 않는다면, 계산은 결코 수행되지 않아야 한다. 그리고 당신의 소프트웨어의 클라이언트들과 당신의 부모님은 더 현명하지 않아야 한다.( 무슨 소리냐 하면, 위의 방치우기 이야기 처럼 부모님이나 클라이언트들이 lazy evaluation기법의 일처리로 해결을 하지 않아도 작업에 대한 신경을 안써야 한다는 소리 )
class String { ... }; // 문자열 클래스 (이건 밑의 언급과 같이 표준 스트링 타입과
이와 같은 구문의 사용으로, String의 convertToUpperCase 함수를 적용하면, s2의 값의 복사본을 만들어야 하고, 수정되기전에 s2에 그걸 s2의 종속되는 데이터로 만들어야 한다. convertToUpperCase 내부에 우리는 lazy 상태가 더이상 지속되지 않도록 하는 코드를 넣어야 한다.:s2가 마음대로 다룰수 있도록 s2의 공유된 값의 사본을 복사해야 한다. 반면에 만약 s2가 결코 수정되지 않을 것이라면, 이러한 s2만의 값을 복사하는 일련의 과정이 필요 없을 것이다. 그리고 s2가 존재하는 만큼 값도 계속 존재해야 한다. 만약 더 좋게, s2가 앞으로 결코 변하지 않는다면, 우리는 결코 그것의 값에 대한 노력을 할필요가 없을 것이다.
이것은 우리에게 적용 관점에서 상당히 난제이다. 우리가 원하는 것에 이르기 위하여 operator[] 안쪽에 각기 다른 작업을 하는 코드가 필요하다.(읽기와 쓰기에 따라서 따로 작동해야 한다.) 어떻게 우리는 operator[]가 읽기에 불리는지 쓰기에 불리는지 결정할수 있을까? 이런 잔인한 사실은 우리를 난감하게 한다. lazy evaluation의 사용과 Item 30에 언급된 proxy 클래스(위임 클래스, DP에서의 역할과 비슷할것이라 예상) 는 우리가 수정을 위하여 읽기나 쓰기 행동을 하는지의 결정을 연기하게 한다.
객체의 각 필드는 필요한 데이터의 포인터로 표현되어 있고, LargeObject의 생성자는 null로 초기화 된다. 그런 null 포인터는 아직 데이터 베이스에서 해당 필드의 정보를 안읽었다는 걸 의미한다. 데이터를 접근하기 전에 LargeObject의 각 멤버 함수는 반드시 이 필드의 포인터를 검사한다. 만약 포인터가 null이라면 데이터를 사용하기 전에 반드시 데이터 베이스에서 읽어 온다.
'''lazy fetching'''을 적용 하면, 당신은 반드시 field1과 같은 const멤버 함수를 포함하는 어떠한 멤버 함수에서 실제 데이터 포인터를 초기화하는 과정이 필요한 문제가 발생한다.(const를 다시 재할당?) 하지만 컴파일러는 당신이 const 멤버 함수의 내부에서 데이터 멤버를 수정하려고 시도하면 까다로운(cranky) 반응을 가진다. 그래서 당신은 "좋와, 나는 내가 해야 할것을 알고있어" 말하는 방법을 가지고 있어야만 한다. 가장 좋은 방법은 포인터의 필드를 mutable로 선언해 버리는 것이다. 이것의 의미는 어떠한 멤버 함수에서도 해당 변수를 고칠수 있다는 의미로, 이렇게 어떠한 멤버 함수내에서도 수행할수 있다. 이것이 LargeObject안에 있는 필드들에 mutable이 모두 선언된 이유이다.
mutable 키워드는 최근에 C++에 추가되어서, 당신의 벤더들이 아직 지원 못할 가능성도 있다. 지원하지 못한다면, 당신은 또 다른 방법으로 컴파일러에게 const 멤버 함수 하에서 데이터 멤버들을 고치는 방안이 필요하다. 한가지 가능할 법인 방법이 "fake this"의 접근인다. "fake this"는 this가 하는 역할처럼 같은 객체를 가리키는 포인터로 pointer-to-non-const(const가 아닌 포인터)를 만들어 내는 것이다. (DeleteMe 약간 이상) 당신이 데이터 멤버를 수정하기를 원하면, 당신은 이 "fake this" 포인터를 통해서 수정할수 있다.:
// 자 이것이 fake This 인데, 저 포인터로 this에 대한 접근에서 const를 풀어 버리는 역할을 한다.
포인터를 넘기는 부분
이 함수는 *this의 constness성질을 부여하기 위하여 const_cast(Item 2참고)를 사용했다.만약 당신이 const_cast마져 지원 안하면 다음과 같이 해야 컴파일러가 알아 먹는다.
자, 그럼 다시 한번 LargeObject내의 포인터들에 관하여 생각해 보자. 사용하기전에 각각의 포인터들을 검사하는 것에 비해서, 모든 포인터들이 null로 초기화 되어 있는것은 에러의 가능성을 가지고 있다. 다행히도, 이런 우려는 Item28의 ''smart pointers''의 이용으로 편이성을 제시한다. 만약 LargeObject내부에서 smart pointer를 사용한다면 당신은 아마도 더이상 포인터를 mutable하게 선언할 필요가 없을것이다. 당신이 mutable을 필요로 하는 상황이, smart pointer클래스들의 적용으로 가기 때문에 위의 내용은 좀 임시적인것이다. 이런 문제에 관해 한번 생각해 봐라
'''''lazy evaluaion''''' 방법에서는 저건 너무 엄청난 수행을 하는 방법이라 하고, 그래서 그것을 수행하지 않는다. 대신에 m3내부에 m1과 m2의 합을 했다는 것만을 기럭해 둔다. 그런 자료 구조는 아마도 m1과 m2나 그이상의 더하기를 하기 위한 포인터 외에는 아무런 정보를 유지할 필요가 없을 것이다. 명백히 이건 m1,m2에 대한 실제 더하기보다 훨씬 빠르고 말할것도 없이 훨씬 적은 메모리를 사용할 것이다.
그러므로 몇가지의 m1에 대한 할당이 m3를 변화시키지 않는다는 확신을 가지고 있어야 한다. Matrix<int>의 내부에 할당된 operator 내부에 m3의 값이 m1의 계산 이전에 계산되어 있거나, m1의 과거 값에 대한 복사본을 가지고 있고 m3는 그것에 의존해야 한다. 다른 함수들도 이러한 행렬의 변경을 위하여 다른 형식의 함수들도 이런 비슷한 것을 감안해야 할것이다.
이제까지 언급했던 예제 코드들을 다시 한번 봐라 당신은 클래스 인터페이스만이 주어진다면 그것이 eager, lazy인지 알수는 없을 것이다. 그것의 의미는 eager evaluation도 역시 곧바로 적용 가능하고, 반대도 가능하다는 의미이다. 만약, 연구를 통해서 클래스의 구현에서 병목 현상을 보이는 부분이 보인다면, 당신은 lazy evaluation의 전략에 근거한 코드들을 적용 할수 있을 것이다. 당신의 클라이언트들은 이러한 변화가 성능의 향상으로 밖에 보이지 않는다. 고객(클라이언트들)들이 좋와하는 소프트웨어 향상의 방법, 당신이 자랑스로워하는 lazy가 될수 있다. (DeleteMe 모호)
자, 다음 예제를 생각해 보자. 수치 데이터의 큰 calloections을 나타네는 클래스들을 위한 템플릿이다.
min, max, avg에 함수는 현재의 해당 collection의 최소값, 최대값 평균을 반환하는 값이라고 생각해라, 여기에서 이들이 구현될수 있는 방법은 3가지 정도가 있다. eager evaluation(즉시연산)을 이용해서 min, max, avg가 호출될때마다 해당 연산을 하는 방법. lazy evaluation(게으른연산)을 해서 해당 함수값이 반환하는 값이, 실제로 연산에 필요할때 마지막에 계산에서 연산해서 값을 얻는 방법. 그리고 over-eager evaluation(미리연산)을 이용해서 아예 실행중에 최소값, 최대값, 평균값을 collection내부에 가지고 있어서 min, max, avg가 호출되면 즉시 값을 제공하는 방법-어떠한 계산도 필요 없이 그냥 즉시 돌리는거다. 만약 min, max, avg가 자주 호출된다면 collection의 최소값, 최대값, 평균값을 이용하는 함수들이 collection 전역에 걸쳐서 계산을 필요로 할수 있다. 그렇다면 이런 계산의 비용은 eager,lazy evaluaton(게으른연산, 즉시연산)에 비하여 저렴한 비용을 지출하게 될것이다.(필요값이 즉시 반환되니)
이런 일을 행하는데에 가장 간단한 방법은 이미 계산된 값을 저장시켜 놓고, 다시 필요로할때 쓰는거다. 예를들어 당신이 직원들에 관한 정보를 제공하는 프로그램을 만든다고 가정하자, 그리고 당신이 자주 쓰인다고 예상할수 있는 정보중 하나는 직원들의 개인방(사무실 or 침실 or 숙소) 번호 이다. 거기에 직원들의 정보는 데이터 베이스에 저장되어 있다고 가정한다. 하지만 대다수(당신이 작성하는거 말고) 프로그램을 위하여 직원들의 개인방 번호는 잘 쓰이지 않는다. 그래서 데이터 베이스에서 그것을 찾는 방법에 관한 최적화가 되어 있지 않다. 당신은 직원들의 개인방 번호를 반복적으로 요구하는 것에 대한 데이터 베이스가 받는 과도한 스트레스에 어플리케이션단에서 특수한 구조로 만드는 걸 피하려면, findCubicleNumber 함수로서 개인방 번호를 캐시(임시저장) 시켜 놀수 있다. 이미 가지고 있는 개인방 번호에 대하여 연속적으로 불리는 요구는 데이터 베이스에 매번 쿼리(query)를 날리는것보다는 캐쉬를 조사하여 값을 만족 시킬수 있다.
- AcceleratedC++/Chapter13 . . . . 113 matches
몇 가지 추가사항을 제외하면 한클래스와 다른 클래스가 동일한 경우가 많다는 데에 착안해서 나온 개념이다.
double thesis; // 논문관련 점수를 저장하는 멤버변수
Grad 클래스는 Core로 부터 파생되었다(Derived from), 상속받았다(inherits from), 혹은 Core는 Grad의 base class 이다 라는 표현을 사용한다.
상속받은 클래스는 그 부모클래스의 생성자, 소멸자, 대입연산자를 제외한 그외의 모든 클래스의 요소를 물려받는다.
또한 파생 클래스는 부모 클래스의 메소드를 재정의 하여서 자신에게 맞도록 수정하여 동작하는 것을 허용한다.
private 보호 레이블로 지정된 멤버는 그 클래스 자체, friend 함수를 통해서만 직접적으로 접근이 가능하다. 이 경우 상속된 클래스에서는 부모 클래스의 private 멤버로의 접근이 필요한데 이럴때 '''protected'''라는 키워드를 사용하면 좋다.
protected 레이블로 지정된 멤버들은 자식 클래스에서 직접적인 접근이 가능다. 그러나 클래스의 외부에서는 접근이 안되기 때문에 캡슐화의 장점을 유지시킬 수 있다.
Core, Grad의 생성자 4가지. 각기의 클래스에 따라 다르게 행동하게 되는 read, grade 함수. Core 클래스의 name, read-common 함수.
'''Grad::read 함수의 오버로딩'''
상기의 클래스는 Grad의 멤버 함수로 부모 클래스의 read_common, read_hw의 함수를 그대로 상속받았다는 것을 가정한다.
in >> thesis; // thesis는 Core가 아니라 Grad의 멤버 변수이므로 범위 지정 연산자를 사용해서는 안된다.
'''thesis가 적용된 점수를 리턴하는 Grad::grade() 함수'''
return min(Core::grade(), thesis); // min()은 <algorithm>에 정의된 함수이다.
'''파생 클래스의 생성단계'''
|| * 전체 객체에 대한 공간을 할당 [[HTML(<BR/>)]] * 기본 클래스 생성자 호출, 기본클래스 공간 초기화 [[HTML(<BR/>)]] * 생성자의 초기설정자''( ): { 사이에 존재하는 것들 )''를 이용해서 파생클래스의 멤버 초기화 [[HTML(<BR/>)]] * 파생 클래스의 생성자의 본체를 실행한다. ||
상기의 함수는 sort에 의해서 각 요소의 판단식으로 사용되는 함수이다. 이 함수는 부모객체인 Core 객체 뿐만아니라, 자식 객체인 Grad객체도 대입하여 사용하는 것이 가능하다.
'''Grad 클래스가 사용가능한 이유'''
비록 함수가 요구하는 인자값은 Core 클래스 이지만 Grad는 Core를 기반으로해서 파생된 클래스이기 때문에 이 경우 name();를 호출하게 되면 g 객체의 Core::name() 부분이 호출된다.
다시 말해서 Grad가 Core의 자식 클래스 이므로 Grad객체를 통해서 Core클래스의 함수를 바인딩시켜 사용하는 것이 가능하다는 뜻이다. ''(대신에 이 함수의 안에서는 Grad의 Core 의 요소들만을 취한다.)''
'''grade와 유사한 기능을 하는 compare_grade 함수'''
- MoreEffectiveC++/Exception . . . . 86 matches
귀여븐 동물들 클래스를 만들어 보자.
일단 여러분은 파일에서 부터 puppy와 kitten와 키튼의 정보를 이렇게 읽고 만든다. 사실 Item 25에 언급할 ''virtual constructor''가 제격이지만, 일단 우리에 목적에 맞는 함수로 대체한다.
pa에 해당하는 processAdoption()은 오류시에 exception을 던진다. 하지만, exception시에 해당 코드가 멈춘다면 "delete pa;"가 수행되지 않아서 결국 자원이 새는 효과가 있겠지 그렇다면 다음과 같이 일단 예외 처리를 한다. 물론 해당 함수에서 propagate해주어 함수 자체에서도 예외를 발생 시킨다.
여기에서 재미있는 기법을 이야기 해본다. 차차 소개될 smart pointer와 더불어 Standard C++ 라이브러리에 포함되어 있는 auto_ptr template 클래스를 이용한 해결책인데 auto_prt은 이렇게 생겼다.
예외 발생시에 함수가 종료되면 auto_ptr상의 객체는 무조건 해제된다.
자자 예를들어서 이런 함수에서 예외 처리를 해야할것이다.
이렇게 해도 여전히 문제는 남는다. 무엇이냐 하면, 만약 BookEntry의 생성자중에서 AudioClip 객체 생성중에 예외를 propagate하면 바로 위 코드중 pb 포인터에 null을 반환해 버린다. 반납된 이렇게 되면 이미 정상적으로 생성된 theImage를 지우지 못하는 사태가 발생해 버리는 것이다.
자 이렇게 해주면 문제 될것이 없다. 자 이상태에 refactoring이 필요한 코드들이 보일것이다 하겠다. delete부분을 함수로 역어 네는 것이다.
이런 const 포인터의 경우에는 반드시 초기화 리스트를 이용하여 인자를 초기화 해주어야 하는 경우이다.
다음 예제는 online 컴퓨터 세션을 위한 Session 클래스를 생각해 본 것이다. 각 세션 객체들은 생성과 파되된 날짜를 기록해야만 한다.
자 이건 괜찮아 보인다. 하지만 저 logDestruction상에서 예외가 발생한다면 어쩌게 할것인가? 해당 소스는 Session의 파괴자 안에서는 예외를 잡지 못한다. 그래서 해당 파괴자를 호출한 자에게 예외를 던진(전달한)다. 그렇지만 다른 에러들이 던져진 상황에서 파괴자가 스스로 자신을 부른거라면 함수의 종료가 자동으로 이루어지기를 원할 것이다. 그리고 당신의 프로그램은 이쯤에서 머추어 버릴 것이다. -해석이 이상하군, 암튼 다른 예외 처리시에 세션 파괴자 로그시 예외가 발생한다면 프로그램이 멈춘다는 소리다.
* Item 12: 가상 함수 부르기나, 인자 전달로 처리와 예외전달의 방법의 차이점을 이해하라.
다음의 가상함수의 선언과 같이 당신은 catch 구문에서도 비슷하게 인자들을 넣을수 있다.
그래서 아마 함수호출에서 인자 전달과 과 예외가 전달되는 것이 기본적으로 같은것이라고 생각 할지도 모른다. 분명 둘은 비슷한 면이 있다. 하지만 중요한 차이점 역시 존재 한다.
자, 비슷한 면은 언급해보면, 함수 예외 모두 에 인자를 전달할때 세가지로 전달할수 있다. 값(by value)이냐 참조(by reference)냐, 혹은 포인터(by pointer)냐 바로 이것이다. 하지만 이 함수와 예외에서의 인자의 전달 방식은 구동 방법에서 결정적인 차이점을 보인다. 이런 차이점은 당신이 함수를 호출할때 최종적으로 반환되는 값(returns)이 해당 함수를 부르는 위치로 가지만, 예외의 경우에 throw의 위치와 return의 위치가 다르다는 점에서 기인한다.
다음 함수에서 Widget의 인자 전달과 예외에서의 전달을 생각해 보자.
해당 사본은 구지 복사할 필요가 없을 것이다. 하지만 catch 는 복사해 나가고 그래야만 catch 에서 localWidget의 사본을 편집해서 이용할수 있다. 이러한 복사의 규칙은 함수 전달과 예외 인자 전달의 차이점을 설명해 준다.
객체가 예외를 위하여 복사가 될때 복사는 해당 객체의 복사생성자(copy constructor)에 의하여 수행 된다. 이 복사생성자는 객체의 dynamic형이 아닌 static 형에 해당하는 클래스중 하나이다. 개념의 확인을 위해 위 소스의 수정 버전을 생각해 보자
전달된 객체는 간단히 참조로 잡을수 있다;그것은 상수 참조로 전달될 필요성은 없다. 그러나 상수 참조가 아닌 전달 임시 객체들은 함수를 부르는걸 허용하지 않는다.
우린 아직 포인터 전달에 의한 걸 의논하지 않았다. 하지만 포인터를 이용해 예외를 던지(전달:throw)하는 것은 함수상에서 포인터를 전달(pass)하는 것과는 다른걸 알수 잇을 것이다. 즉, 포인터의 복사본이 이동하는데, 이렇게 되면 pointer를 전달하는 쪽의 영역에서 throw에 의해 튀어 나가면 포인터가 가리키고 있는 객체는 소멸되므로 포인터에 의한 예외 전달(던지는것:throw)는 피해야 한다. (전역의 static 객체의 포인터라면 이야기는 달라진다. 뒤에 다룬다.)
- Gof/FactoryMethod . . . . 84 matches
객체 생성을 위한 인터페이스를 정의하라, 그렇지만 sub 클래스들이 구현사항을 결정할수 있도록 하자. [[BR]]
Factory Method는 sub 클래스에 대해 구현 사항을 결정할수 있게 만든다.
Framework(이하 Framework 그대로)는 객체사이의 관게를 정의하고, 유지하기 위하여 가상 클래스들을 사용한다. Framework는 종종 이러한 클래스들을 기반으로 객체의 생성에 책임을 진다.
여러 문서를 사용자에게 보여줄수 있는 어플리케이션에 대한 Framework에 대하여 생각해 보자. 이러한 Framework에서 두가지의 추상화에 대한 요점은, Application과 Document클래스 일것이다. 이 두 클래스다 추상적이고, 클라이언트는 그들의 Application에 알맞게 명세 사항을 구현해야 한다. 예를들어서 Drawing Application을 만들려면 우리는 DrawingApplication 과 DrawingDocument 클래스를 구현해야 한다. Application클래스는 Document 클래스를 관리한다. 그리고 사용자가 Open이나 New를 메뉴에서 선택하였을때 이들을 생성한다.
Application(클래스가 아님)만들때 요구되는 특별한 Document에 대한 Sub 클래스 구현때문에, Application 클래스는 Doment의 Sub 클래스에 대한 내용을 예측할수가 없다. Application 클래스는 오직 새로운 ''종류'' Document가 만들어 질때가 아니라, 새로운 Document 클래스가 만들어 질때만 이를 다룰수 있는 것이다. 이런 생성은 딜레마이다.:Framework는 반드시 클래스에 관해서 명시해야 되지만, 실제의 쓰임을 표현할수 없고 오직 추상화된 내용 밖에 다를수 없다.
Factory Method 패턴은 이에 대한 해결책을 제시한다. 그것은 Document의 sub 클래스의 생성에 대한 정보를 캡슐화 시키고, Framework의 외부로 이런 정보를 이동 시키게 한다.
Application의 Sub 클래스는 Application상에서 추상적인 CreateDocument 수행을 재정의 하고, Document sub클래스에게 접근할수 있게 한다. Aplication의 sub클래스는 한번 구현된다. 그런 다음 그것은 Application에 알맞은 Document에 대하여 그들에 클래스가 특별히 알 필요 없이 구현할수 있다. 우리는 CreateDocument를 호출한다. 왜냐하면 객체의 생성에 대하여 관여하기 위해서 이다.
* 클래스가 그것이 생성하는 클래스에 관해서 예상할수 없을때
* 클래스가 그것의 sub 클래스가 객체 생성에 최적화를 시키고 싶을때
* 클래스가 몇개의 helper sub클래스에게 책임을 위임하거나, 당신이 helper sub클래스에 관한 정보를 특성화 시키기를 원할때
Creator는 factor method가 정의되어 있는 Creator의 sub클래스에게 의지한다 그래서 Creator는 CooncreteProduct에 적합한 인스턴스들을 반환한다.
Factory method는 당신의 코드에서 만들어야한 Application이 요구하는 클래스에 대한 기능과 Framework가 묶여야할 필요성을 제거한다. 그 코드는 오직 Product의 인터페이스 만을 정의한다.; 그래서 어떠한 ConcreteProduct의 클래스라도 정의할수 있게 하여 준다.
factory method의 잠재적인 단점이라고 한다면 클라이언트가 아마도 단지 특별한 ConcreteProduct객체를 만들기위해서 Creator클래스의 sub클래스를 가지고 있어야 한다는 것일꺼다. 클라이언트가 어떤 식으로든 Creator의 sub클래스를 만들때의, sub클래스를 만드는 것자체는 좋다. 하지만 클라이언트는 이런것에 신경쓸 필요없이 로직 구현에 신경을 써야 한다.
1. ''서브 클래스와 소통 통로 제공''(''Provides hooks for subclasses.'') Factory Method를 적용한 클래스에서 객체의 생성은 항상 직접 만들어지는 객체에 비하여 유연하다. Factory Method는 객체의 상속된 버전의 제공을 위하여, sub클래스와 연결될수 있다.(hook의 의미인데, 연결로 해석했고, 그림을 보고 이해해야 한다.)
Ducument에제에서 Document클래스는 factory method에 해당하는, 자료를 열람하기 위한 기본 파일 다이얼로그를 생성하는 CreateFileDialog이 호출을 정의할수 있다. 그리고 Document sub클래스는 이러한 factory method를 오버 라이딩해서 만들고자 하는 application에 특화된 파일 다이얼로그를 정의할수 있다. 이러한 경우에 factory method는 추상적이지 않다. 하지만 올바른 기본 구현을 제공한다.
2. ''클래스 상속 관게에 수평적인(병렬적인) 연결 제공''(''Connects parallel class hierarchies.'') 여태까지 factory method는 오직 Creator에서만 불리는걸 생각해 왔다. 그렇지만 이번에는 그러한 경우를 따지는 것이 아니다.; 클라이언트는 수평적(병렬적)인 클래스간 상속 관계에서 factory method의 유용함을 찾을수 있다.
병렬 클래스 상속은 클래스가 어떠한 문제의 책임에 관해서 다른 클래스로 분리하고, 책임을 위임하는 결과를 초례한다. 조정할수 있는 그림 도형(graphical figures)들에 관해서 생각해 보자.;그것은 마우스에 의하여 뻗을수 있고, 옮겨지고, 회정도 한다. 그러한 상호작용에 대한 구현은 언제나 쉬운것만은 아니다. 그것은 자주 늘어나는 해당 도형의 상태 정보의 보관과 업데이트를 요구한다. 그래서 이런 정보는 상호 작용하는, 객체에다가 보관 할수만은 없다. 게다가 서로다른 객체의 경우 서로다른 상태의 정보를 보관해야 할텐데 말이다. 예를들자면, text 모양이 바뀌면 그것의 공백을 변화시키지만, Line 모양을 늘릴때는 끝점의 이동으로 모양을 바꿀수 있다.
이러한 제한에서는 모양에따라, 각 상테에 따라 객체를 분리하는 것이 더 좋을 것이고, 각자 필요로하는 상태를 유지 해야한다. 서로 다른 모양은 서로다른 Manipulator의 sub클래스를 사용해서 움직여야 한다.이러한 Manipulator클래스와 상속은 병렬적으로 이루어 진다. 다음과 같은 모양 같이 말이다.
Figure클래스는 CreateManipulator라는, 서로 작용하는 객체를 생성해 주는 factory method이다. Figure의 sub클래스는 이 메소드를 오버라이드(override)해서 그들에게 알맞는 Manipulator sub클래스의 인스턴스를 (만들어, )반환한다. Figure 클래스는 아마도 기본 Manipulator인스턴스를 (만들어,) 반한하기 위한 기본 CreateManipulator를 구현했을 것이다. 그리고 Figure의 sub클래스는 간단히 이러한 기본값들을 상속하였다. Figure클래스 들은 자신과 관계없는 Manipulator들에 대하여 신경 쓸필요가 없다. 그러므로 이들의 관계는 병렬적이 된다.
Factory Method가 두게의 클래스의 상속 관계에서 어떻게 이러한 연결과정을 정의하는지 주목하라. 그것은 서로 고유의 기능을 부여시키는 작업을 한다.
- AcceleratedC++/Chapter9 . . . . 79 matches
|| 클래스 타입 || string, vector, istream 등 기본언어를 가지고 구현된 타입 ||
C++은 클래스 타입과 같은 사용자가 정의한 어플리케이션 고유의 타입을 정의할 수 있는 많은 기능은 지원한다.
4.2.1절 Student_info 구조체를 다루는 함수를 작성하고, 이를 한개의 헤더파일로 통합을 하는 것은 일관된 방법을 제공하지 않기 때문에 문제가 발생한다.
본 장에서는 기존의 구조체를 확장하여 함수를 작성하고 이런식의 문제를 해결할 수 있는 방법을 알려준다.
프로그래머는 구조체를 다루기 위해서 구조체의 각 멤버를 다루는 함수를 이용해야한다. (Student_info 를 인자로 갖는 함수는 없기 때문에)
=== 9.2.1 멤버 함수 ===
'''상기의 구조체안에 Student_info 를 다룰 수 있는 멤버함수를 추가한 것'''
std::istream& read(std::istream&); //입력 스트림으로 부터 입력을 받아서 4개의 멤버변수를 초기화한다.
double grade() const; //내부 멤버변수를 활용하여 점수를 계산하고 double 형으로 리턴한다.
//함수 명의 뒤에 const를 붙이면 멤버 변수의 변형을 할 수 없는 함수가 된다. (구조적으로 좋다)
* s:Student_info 라면 멤버함수를 호출하기 위해서는 s.read(cin), s.grade() 와 같이 함수를 사용하면서 그 함수가 속해있는 객체를 지정해야함. 암묵적으로 특정객체가 그 함수의 인자로 전달되어 그 객체의 데이터로 접근이 가능하게 된다.
이 함수에서 알아야할 3가지
* 함수의 이름이 Student_info::read이다
* Student_info의 멤버함수이므로 Student_info 객체를 정의할 필요도 인자로 넘길 필요도 없다.
::를 사용함으로써 호출되는 grade를 객체의 멤버함수가 아니라 전역 grade의 형으로 사용하는 것이 가능하다.
객체에서는 const 객체 내부의 데이터들을 const형으로 다룰 수는 없지만, 멤버함수를 const 멤버함수로 만듦으로써 변형에 제한을 줄 수 있다.
* const 객체에 대해서는 const 멤버함수가 아닌 함수는 호출 할 수 없다.
=== 9.2.2 비멤버 함수들 ===
이전에 사용되었던 compare와 같은 함수를 어떤식으로 정의해야 할 것인가?
compare함수는 동일한 형의 2개의 Student_info를 받아서 서로를 비교하는 역할을 한다. 이런함수를 처리하는 일반적인 방법이 있는데, 9.5, 11.2.4, 11.3.2, 12.5, 13.2.1 에서 배우게됨.
- AcceleratedC++/Chapter11 . . . . 77 matches
실제로 클래스를 제작할 경우에는 클래스의 생성, 복사, 대입, 소멸의 고려하여 설계되어야한다.
이장에서는 STL vector클래스의 약식 버전을 만들어 보면서 일반적인 형태의 자료형을 만드는 방식을 익힌다.
클래스를 설계할때에는 우선 인터페이스를 결정해야한다. 인터페이스의 결정에는 실제로 그 객체를 이용한 프로그램을 작성해보는 것이 좋다.
이상의 것들이 이장에서 구현할 vector 의 clone 버전인 Vec 클래스를 구현할 메소드들이다.
템플릿은 함수뿐만 아니라 클래스에서도 사용하는 것이 가능하다.
begin, end, size 함수를 구현해야 하므로 이러한 작업을 위해서 '''첫 요소의 주소, 마지막 요소를 하나 지난 주소, 요소들의 개수'''를 저장할 수 있어야한다.
T* limit; // 마지막 요소에서 하나를 지난 곳의 포인터
템플릿은 단지 틀일 뿐이며, 사용할때 type parameter로 준 형에 따라서 실제의 클래스를 생성한다.
// 표준 vector 클래스는 크기와 함께 초기화 요소를 인자로 받는 생성자도 제공한다.
Vec() { create(); } // 아직으로선느 구현부분에서 정해진 것이 없기 때문에 임시적으로 함수를 만들어서 넣었다.
T* limit; // 마지막 요소에서 하나를 지난 곳의 포인터
인자의 기본형을 지정해주면 한개의 함수정의로도 2가지의 생성자의 역할을 할 수 있기 때문에 편리하다.
back_inserter(T)함수를 통해서 동적으로 크기를 변경시키기 위해서 '''value_type, push_back''' 타입을 정의함. (value_type 은 현재 저장된 요소가 어떤 타입인지를 알려줌)
list의 반복자를 구현하는 경우라면 ++ 연산을 통해서 노드로 연결된 다음 노드를 리턴하는 함수를 오버로딩해야하나, 여기서는 배열의 요소를 가리키므로 단순이 포인터를 리턴하는 것 만으로 우리는 임의 접근 반복자를 구현하는 것이 가능하다.
Vec() { create(); } // 아직으로선느 구현부분에서 정해진 것이 없기 때문에 임시적으로 함수를 만들어서 넣었다.
iterator limit; // 마지막 요소에서 하나를 지난 곳의 포인터
절적한 typedef를 추가하고, 멤버 데이터의 형도 여기에 맞추어서 변경하였음.
상기의 연산을 가능하게 하기 위해서는 operator[], size() 함수를 정의 해야한다.
만약 오버로드 연산자가 멤버함수가 아니라면(friend 함수) 좌측 피연산자는 첫번째 인수, 우측 피연산자는 두번재 인수로 나타낼 수 있다.
만약 멤버 함수로 연산자가 정의 되어 있다면 좌측 피연산자는 함수를 호출한 객체로 간주되고 오버로드 연산자는 인자로 우측의 피연산자만을 인자로 취한다.
- JavaStudy2003/두번째과제/노수민 . . . . 75 matches
Run쪽 옵션이 틀린건가;; 오류가 아니라 메인 클래스가 없다는 등의 다양한 메시지가 뜨면서 안돼요; 결국 간단한 소스를 올립니다
* 클래스 : 특정한 종류의 모든 객체들에 적용할 수 있는 변수와 메소드를 정의하는 '소프트웨어적인 설계도' 이다.
* 인스턴스 : 클래스에 대한 변수를 선언하는 것을 '인스턴스를 생성한다'고 하고, 이 변수를 인스턴스라 한다.
* 객체 : 실세계에 적용 - 자동차(클래스) -> 아반테, 누비라, 그랜저, 티고 등 (객체)
* 상속 : 자동차 클래스에 버스 클래스, 트럭 클래스, 자가용 클래스가 속한다면,
자동차 클래스는 상위 클래스, 버스,트럭,자가용 클래스를 하위클래스라 하며, 이들의 관계에서 "하위클래스는 상위클래스를 상속한다"고 한다.
자바에 메소드(함수) 다중정의, 매소드 재정의가 있다.
=== 클래스 정의 및 인스턴스(객체) 생성 ===
* 클래스 정의
class 클래스이름 {
클래스이름 클래스인스턴스이름 = new 클래스이름();
클래스이름 클래스인스턴스이름;
클래스인스턴스이름 = new 클래스이름();
* public - 같은 클래스, 하위클래스 등 같은 패키지의 모든 클래스에서 접근가능
* private - 같은클래스 내에서만 접근가능
* protected - 같은 클래스, 하위클래스 등 같은 패키지의 모든 클래스에서 접근가능
* 생략 : 같은 클래스 또는 같은 패키지의 모든 클래스에서 접근가능, 하위클래스에서 접근 불가능
* 자바에서는 함수 다중 정의만을 제공함
클래스이름(형식매개변수 리스트) { … }
클래스이름(형식매개변수 리스트) {
- JavaStudy2004/클래스상속 . . . . 66 matches
상속은 객체 지향 프로그램에서 가장 중요한 개념 중의 하나이다. 이것은 자바클래스를 직접 디자인하는 문제에 영향을 미친다.상속은 다른 클래스의 정보를 동적으로 액세스하도록 해주기 위해서 그 클래스와 다른 클래스와의 차이를 명시해주면 된다.
각 클래스는 상위클래스(superclass)를가지며 하나 이상의 하위클래스(subclass)를 가진다.클래스들의 계층을 따라 내려가는 것을 상속된다고 한다.
하위클래스는 상위클래스로부터 모든 메소드와 변수들을 상속받는다.상위클래스가 필요한 행위를 정의했으면 재정의하거나 다른 클래스로부터 복사할 필요도 없다. 상속받은 클래스는 자동적으로 상위클래스의 행위를 자동적으로 가지게 된다.자바 클래스 계층의 제일 위에는 Object라는 클래스가 있다. 모든 클래스는 이 클래스로부터 상속을 받는다. 각 클래스들은 특별한 목적에 맞추어 특정 정보를 추가적으로 가지게 되는 것이다.
자바 클래스를 새로 작성할 때 대부분 다른 클래스가 가지는 정보와 몇 가지의 추가적인 정보를 가지게 할 것이다. 예를 들어 새로운 Button을 만들려고 한다면 클래스에 Button으로부터 상속받을 수 있도록 정의하기만 하면 된다. 따라서 Button과 다른 특징에 대해서만 신경 쓰면 된다.
=== 클래스 계층 만들기 ===
많은 클래스를 만들기 위해서는 기존의 클래스 계층을 이용할 수도 있고, 자신만의 클래스 계층을 만들 필요도 있다. 이러한 계층을 만들기 위해서는 몇 가지 생각할 점이 있다.
* 다른 클래스에 공통적인 정보를 추출해서 상위클래스에 넣고 하위클래스에서 다시 사용하도록 한다.
* 한 클래스의 행위를 바꾸면 자동적으로 하위클래스의 행위를 바꾸게 한다. 따라서 재컴파일할 필요가 없다.
예를 들어 Motorcycle클래스와 같이 Car라는 클래스를 만드는 것을 생각하자. Car와 Motorcycle은비슷한 특징들이 있다. 이 둘은 엔진에 의해 움직인다. 또 변속기와 전조등과 속도계를 가지고 있다. 일반적으로 생각하면, Object라는클래스 아래에 Vehicle이라는 클래스를 만들고 엔진이 없는 것과 있는 방식으로 PersonPoweredVehicle과 EnginePoweredVehicle 클래스를 만들 수 있다. 이 EnginePoweredVehicle 클래스는 Motorcycle, Car, Truck등등의 여러 클래스를 가질 수 있다. 그렇다면 make와 color라는 속성은 Vehicle 클래스에 둘 수 있다.
인스턴스 변수의 경우 클래스에 새로운 변수를 만들었다면, 현재 클래스의 변수와 상위클래스에서 정의된 모든 변수를 가질수 있다. 따라서 모든 클래스들의 조합으로 현재의 객체를 위한 템플릿을 형성하게되고 필요한 정보를 채우는 것이다.
메소드도 비슷하게 작동한다.새로운 객체는 상위클래스의 모든 메소드 이름을 액세스한다. 그러나 메소드가 호출될 때마다 동적으로 메소드 정의가 선택된다. 특정 객체에 대한 메소드를 호출하면 자바는 제일 먼저 그객체 클래스의 메소드 정의를 살펴본다. 그 객체 클래스에 정의되지 않았다면 그 메소드 정의를 발견할 때까지 상위클래스를 찾게될 것이다.
만일 하위클래스에서 상위클래스의 메소드의 이름과 인자의 타입을 똑같이 가진 메소드를 정의한다고 하면 어떻게 되는가? 이것은 계층적으로 아래에 있는 것이 먼저 실행되게 되어 있다. 이러한 방식으로 임의로 상의클래스의 메소드를 감추고 하위클래스에 필요한 메소드를 정의할 수 있다. 바로 중복(overriding)이라고 부르는 것이다.
=== Point 클래스 ===
* 클래스 이름 얻어오기
=== Shape 클래스 ===
* 클래스 이름 얻어오기
=== Circle 클래스 ===
=== Rectangle 클래스 ===
===== 클래스 =====
* Unit 클래스
- 새싹교실/2012/AClass . . . . 61 matches
* 2주차(5/16) - 함수, 배열 + Search
* 3주차(5/23) - 다차원배열, 포인터 + Search, Sort
* 4주차(5/30) - 구조체, 2중포인터 + Stack, Queue
1. 함수가 무엇인지 쓰고, 예제 프로그램을 하나 만들어 주세요.
1. 함수형이 무엇인지 쓰고, void타입은 왜 return하지 않는지 써주세요.
1. 재귀함수가 무엇인지 써 주세요.
1. 재귀함수를 이용한 프로그램을 하나 짜 보세요.(eg.1~n까지의 합, n!구하기등)
--> 라이브러리에서 우리가 사용하는 함수를 불러오기 위해써주는 것
9.101부터200까지의 모든 정수를 더해서 반환하는 '함수'를 작성해주세요.(main문에는 sum=Sum(); printf("%d",sum);이 있도록해주세요)
10.재귀함수를 이용해 n!을 출력하는 프로그램을 작성해 주세요.
12.재귀함수를 이용해 1부터10까지를 더하는 프로그램을 작성해 주세요.
1. srand()함수가 무엇인지 찾아쓰고, time()을 이용해 랜덤으로 숫자를 하나 출력하는 프로그램을 작성해주세요.
1. 포인터가 무엇인지 쓰고, 포인터를 선언하는 방법을 쓰세요.
1. 배열과 포인터의 공통점과 차이점을 찾아보고, 써보도록 하세요.
* 배열개념, 함수 배웠습니다. 과제 일요일까지 내기, 프린트 해오기. 수정 사항 이었습니다.
* 함수, 재귀함수, 배열.
* 재귀함수 : 자기 자신함수를 다시 불러서 사용하는 함수
* 함수, 배열을 배웠는데 수업시간에 배웠던것 같은데 아직은 헷갈린다
6.포인터를 이용해 함수 swap 짜보기(대부분의 책 예제에 있습니다. 따라 써보고 코드를 이해해 보세요)
9.포인터를 이용한 예제코드 하나를 짜 보세요.
- HolubOnPatterns/밑줄긋기 . . . . 56 matches
* 현실에서는 한 패턴에 참여하고 있는 객체와 클래스가 동시에 다른 패턴에서도 사용되는 경우가 매우 많다.
* 패턴에 입문한 지 얼마 안 되는 초보자일수록 무언가 멋져 보이는 클래스 다이어그램에 관심을 쏟는데, 더욱 중요한 것은 '패턴의 의도'(혹은 목적)와 '동적인 행동양식'이다.
* "객체는 메소드라 불리는 함수가 있는 자료 구조이며 메소드가 자료 구조를 조작한다."라는 설명을 보았을지도 모르겠다. 허튼소리! 당치 않다.
* 이러한 착각은 흔히 C를 배우고 C++을 배울 때, '객체'가 아닌 문법 클래스'를 쉽게 설명하려고 "클래스는 structure(data) + method(to do) 이다." 라는 요상한 설명을 접하게 되면 하게 되는 것 같습니다. 처음에 이런 설명을 접하게 되면 나중에는 생각을 바꾸기 어려워지죠 (아니 귀찮아지는 건가...) -_-;; - [박성현]
* 정답. 클래스는 구조체+메소드에요 라는 설명을 열혈강의 c++에서 본듯..? - [서지혜]
* 2학년땐 나도 저렇게 생각했다ㅜㅜㅜ [Spring/탐험스터디]에서도 얘기했지만 그래서 객체지향설계라면 메소드만 있는 클래스는 존재해선 안된다고 말한 적도 있음ㅜㅜㅜㅜ 부끄럽다... - [김수경]
* 이건 6피의 중심에서 외치고 싶은 말. 많은 후배들이 이런 질문을 한다. ''C로는 객체지향 못하는거 아니에여?'' ;;;;;;; 혹은 ''OOP로 짜고있어요 ㅋ''해서 보면 자바로 짠다는 것 외엔 도대체 객체지향의 원리가 어디에 녹아있는지 알 수 없는 코드라거나... 클래스 쓰면 다 OO냐ㅜㅜ 그렇게 간단하면 학교에서 왜 한학기나 할애해서 배우겠어. - [김수경]
* 좋은 클래스는 getter와 setter메소드를 갖지 않는데, 이런 메소드는 구현 상세를 노출시키기 때문에 결과적으로 유지 보수를 어렵게 만들기 때문이다. 예를 들어 getter 메소드의 리턴 타입이 바뀌게 되면 getter를 정의하는 객체뿐 아니라 'getter'를 호출하는 모든 코드 또한 바꾸어 주어야 한다. 잠시 후에 getter와 setter 메소드 없이 시스템을 디자인하는 방법에 대해 설명할 것이다. 기대해도 좋다.
* 이미 데이터를 갖고 있는 객체가 일을 하게 하는것은 어떨까? 다시 말해 신의 클래스에서 접근 메소드를 통해 가져온 데이터를 갖고 어떤 작업을 하는 코드를 이 데이터를 저장하고 있는 객체로 옮기면 어떨까? 접근 메소드는 사라지고 코드는 단순해진다.
* 구현은닉이라는 원리는 객체 지향 시스템의 품질을 평가하는 좋은 지표가 된다. 클래스의 구현을 마음대로 바꾸어도, 심지어 기존 클래스를 버리고 새로운 클래스를 작성하더라도 이를 사용하는 객체의 코드에는 영향을 미치지 않을 수 있는가?
* 이러한 '추측에 의한 디자인하기'전략은 사용하지도 않는 메소드를 작성하는데, 즉 필요치 않은 기능을 클래스에 추가하는 데 불필요한 시간을 낭비하게 한다.
* 재미있네요. 나는 mfc는 객체 지향적이다 라는 말과 알수없는 클래스들을 만들어 놓고 객체지향이라고 한 말을 들은적이 있습니다. - [서지혜]
* C++을 배우고 자바를 배우면 익숙한 구현 상속을 많이 사용하게 되지. C++에도 인터페이스의 개념이 있지만 시작부터 구체 클래스를 만드는 습관때문에 거의 쓰지 않았었다. - [서지혜]
=== 인터페이스 vs. 클래스 ===
* 구현 상속이 도대체 왜 나쁠까? 명시적으로 구체 클래스의 이름을 사용하면 특정 구현에 종속되는데 이는 결과적으로 수정을 필요 이상으로 어렵게 만든다.
==== 깨지기 쉬운 기반 클래스 문제 ====
* 기반 클래스는 기반 클래스만을 따로 떨어뜨려 놓고 안전하게 수정할 수 없으며, 모든 파생 클래스를 함께 살펴보고 테스트해 보아야 한다.
* 슈퍼 클래스를 수정하면 알수없는 새끼 에러들이 창발한다ㅋㅋㅋ - [서지혜]
* 구현 상속을 사용하면 기반 클래스를 수정할 때마다 파생 클래스들이 제대로 작동하는지를 테스트해야 한다.
* 기반 클래스를 수정할 때마다 파생 클래스를 검토해 보아야 한다면 이는 기반 클래스를 확장하고 있는 것이 아니라 인터페이스를 구현하고 있는 것이다.
- 작은자바이야기 . . . . 55 matches
* 클래스와 객체
* 클래스와 그 멤버에 적용하는 기본 modifier들의 개념 및 용법을 다뤘습니다.
* static modifier에 대해 애매하게 알고 있었는데 자세하게 설명해주셔서 좋았습니다. static은 타입을 통해서 부르는거라거나 원래 모든 함수가 static인데 객체지향의 다형성을 위해 static이 아닌 함수가 생긴거라는 설명은 신기했었습니다. object.method(message) -> MyType::method(object, method) 부분이 oop 실제 구현의 기본이라는 부분은 잊어버리지 않고 잘 기억해둬야겠습니다. 근데 파이썬에서 메소드 작성시 (self)가 들어가는 것도 이것과 관련이 있는건가요? -[서영주]
* 제가 "원래 모든 함수가 static"이라는 의미로 말한건 아닌데 오해의 소지가 있었나보군요. 사실 제가 설명한 가장 중요한 사실은 말씀하신 예에서 object의 컴파일 타입의 method() 메서드가 가상 메서드라면(static이 아닌 모든 Java 메서드), 실제 어떤 method() 메서드를 선택할 것이냐에 관한 부분을 object의 런타임 타입에 의한다는 부분이었지요. 그러니까 object는 컴파일 타입과 동일하지 않은 런타임 타입을 가질 수 있으며, 다형성의 구현을 위해 implicit argument인 object(=this)의 런타임 타입에 따라 override된 메서드를 선택한다는 사실을 기억하세요. (Python에선 실제 메서드 내에서 사용할 formal parameter인 self를 explicit하게 선언할 수 있다고 보면 되겠지요.) - [변형진]
* JNI라는 기법을 사용해 네이티브 라이브러리를 연결하여 함수를 호출할 수 있음을 배웠습니다.
* native modifier로 함수의 인터페이스를 선언할 수 있고, 마샬링, 언마샬링 과정에서 성능 손실이 있을 수 있음을 이야기했습니다.
* 대표적인 불변객체인 String 클래스가 내부적으로 어떻게 구현되고, 어떻게 불변성을 유지하는 지를 살펴보았습니다.
* c++에서 상호배제 관련으로 mutex나 critical section같은거 엄청 배웠었는데 자바에서는 synchronized를 이용해서 쉽게 처리할 수 있다는게 신기했습니다. os 수업 들은지 오래 됐는데 멀티프로세스와 멀티스레드 수업을 다시 들으니까 설명을 참 잘 해주셔서 좋았습니다. 함수에만 붙일 수 있는게 아니고 보호자원을 가진 객체를 이용한 synchronized(this){ ... } 같은 부분은 나중에 스레드를 쓸 경우에 참고가 될 것 같습니다. 그리고 인터페이스와 리플렉션을 이용한 초기화를 보니 생각을 잘 하면 구체클래스가 코드에 안드러나게 할 수 있다는 점도 볼만했습니다. -[서영주]
* 전체적으로 다른 언어에서는 볼 수 없는 자바의 문법 + 객체지향 원칙을 중점적으로 다룬 시간이었습니다. 중간중간 다른 이야기들(builder 패턴, 저작권)이 들어갔지만 그래도 다룬 주제는 명확하다고 생각합니다. 다만 그걸 어떻게 쓰느냐는 흐릿한 느낌입니다. 그건 아마도 각 원칙들이나 interface, 객체 등에 대한 느낌을 잡기 위해서는 경험이 좀 필요하기 때문이 아닌가 싶습니다 ;;; 수경이가 말한 대로 한 번이라도 해 본 사람은 알기 쉽다는 말이 맞지 않을까 싶네요. 그리고 전체적으로 이야기를 들으면서 현재 프로젝트 중인 코드가 자꾸 생각나서 영 느낌이 찝찝했습니다. 세미나를 들으면서 코드를 생각하니까 고쳐야 될 부분이 계속 보이는군요. 그래도 나름대로 코드를 깔끔하게 해 보려고 클래스 구조도 정리를 좀 하고 했는데 더 해야 할 게 많은 느낌입니다. ㅠㅠ 그 외에도 이번 시간에 들었던 메소드의 책임이 어디에 나타나야 하는가(객체 or 메소드) 라거나 상속을 너무 겁내지 말라는 이야기는 상당히 뚜렷하게 와 닿아서 좋았습니다. 아. DIP에서 Logic과 native API 사이에 추상화 레이어를 두는 것도 상당히 좋았는데 기회가 되면 꼭 코드로 보고 싶습니다. 아마 다음에 보게 되겠지만. - [서민관]
* 지난시간에 이은 Inner Class와 Nested Class의 각각 특징들 Encapsulation이라던가 확장성, 임시성, 클래스 파일 생성의 귀찮음을 제거한것이 새로웠습니다. 사실 쓸일이 없어 안쓰긴 하지만 Event핸들러라던가 넘길때 자주 사용하거든요. {{{ Inner Class에서의 this는 Inner Class를 뜻합니다. 그렇기 때문에 Inner Class를 포함하는 Class의 this(현재 객체를 뜻함)을 불러오려면 상위클래스.this를 붙이면 됩니다. }}} Iterator는 Util이지만 Iterable은 java.lang 패키지(특정 패키지를 추가하지 않고 자바의 기본적인 type처럼 쓸수있는 패키지 구성이 java.lang입니다)에 포함되어 있는데 interface를 통한 확장과 재구성으로 인덱스(index)를 통한 순차적인 자료 접근 과는 다른 Iterator를 Java에서 범용으로 쓰게 만들게 된것입니다. 예제로 DB에서 List를 한꺼번에 넘겨 받아 로딩하는것은 100만개의 아이템이 있다면 엄청난 과부하를 겪게되고 Loading또한 느립니다. 하지만 지금 같은 세대에는 실시간으로 보여주면서 Loading또한 같이 하게 되죠. Iterator는 통해서는 이런 실시간 Loading을 좀더 편하게 해줄 수 있게 해줍니다. 라이브러리 없이 구현하게 되면 상당히 빡셀 것 같은 개념을 iterator를 하나의 itrable이란 인터페이스로 Java에서는 기본 패키지로 Iterable을 통해 Custom하게 구현하는 것을 도와주니 얼마나 고마운가요 :) 여튼 자바는 대단합니다=ㅂ= Generic과 Sorting은 다른 분이 설명좀. - [김준석]
* 리플렉션과 제네릭스를 써서 map -> object와 object -> map을 하는 부분을 해봤습니다. 자바의 일반적인 세 가지 방식의 클래스 내 변수에 대해 getClass, getFields, getMethods를 사용해 private, 나 접근자가 있는 경우의 값을 받아왔습니다. getter를 사용해서 변수 값을 받아올 때 이름이 get으로 시작하는 다른 함수를 제외하기 위해 method.getParameterTypes().length == 0 같은 부분은 이렇게 체크해야 된다는 부분은 나중에 제네릭스 관련으로 써먹을만 할 것 같습니다. 그리고 mapToObject에서는 문제가 없었지만 objectToMap의 경우에는 제네릭스의 type erase때문에 Class<T> expectedType = T.class; 같은 코드를 사용할 수 없어서 map.put(field.getName(), (T)field.get(obj));에서 형변환의 타입 안전성을 위해 인자로 Class<T> valueType을 받아오고 valueType.isAssignableFrom(field.getType())로 체크를 하는 부분도 공부가 많이 됐습니다. - [서영주]
* Introspector : 클래스를 BeanInfo로 만들 수 있음.
* util함수들을 많이 제공함. 한 번에 결과가 나옴.
* google의 guava는 함수의 체이닝을 많이 사용함.
* 함수의 체이닝을 위해서는 generics가 필요함. static method로는 체이닝을 할 수 없음.
* Data 부분을 인터페이스로 분리 - 내부에서 FactoryMethod 패턴을 사용. factory를 통해서 객체를 생성한다. new를 사용하지 않기 때문에 구체 클래스를 숨길 수 있다.
* CsvData - data의 구체 클래스. 내부에서 속도의 향상을 위해서 역색인 방식을 사용.
* 값을 가져오는 함수를 getProperty와 get의 두 가지를 제공한다.
* java.sql.driver 인터페이스를 com.mysql.jdbc.driver 클래스로 구현, java.sql.connection 인터페이스를 com.mysql.jdbc.connection 클래스로 구현
Driver driver = new com.mysql.jdbc.Driver(); // 처럼 직접 구체클래스로 new를 하는 대신
- AcceleratedC++/Chapter12 . . . . 53 matches
일반적인 C++의 기본형 데이터처럼 클래스도 여러가지의 연산자를 재정의 함으로써 마치 값처럼 동작하도록 할 수 있다.
이 장에서는 여러가지 연산자, 형변환을 클래스의 제작자가 제어하는 방법에 대해서 배운다.
12장에서는 string 클래스의 클론 버전인 Str 클래스를 제작한다. Str 클래스는 string 클래스의 형변환과 연산자의 구현에 초점을 맞추어서 제작한다.
이 클래스는 복사 생성자, 대입 연산자, 소멸자가 하는 모든일을 Vec클래스에 일임한다.
클래스는 기본적으로 복사 생성자, 대입 연산자의 기본형을 제공한다. 위의 클래스는 이런 연산에 대한 기본적인 요건을 만족하기 때문에 const char* 가 const Str& 로 변환되어서 정상적으로 동작한다.
상기의 클래스에는 Str(const char*) 타입의 생성자가 존재하기 때문에 이 생성자가 Str 임시 객체를 생성해서 마치 '''사용자 정의 변환(user-define conversion)'''처럼 동작한다.
이 구현의 세부적인 작동방식은 모두 Vec 클래스로 위임하였다. 대신에 const 클래스와 const 가 아닌 클래스에 대한 버전을 제공하였고, 표준 string 함수와의 일관성 유지를 위해서 string 대신에 char& 형을 리턴하도록 하였음.
입력 연산자는 일견 객체의 상태를 바꾸기 때문에 멤버함수로 선언이 되어야 한다고 생각하기 쉽다. 그러나 이항 연산자의 경우 파라메터의 맵핑이 좌항의 경우 첫번째 우항의 경우 두번째인자로 받는데, 이렇게 될 경우 멤버함수로 >>연산자를 오버로딩하면 우리가 워하는 결과를 얻을 수 없다.
상기와 같은 이유로 operator>>는 비멤버함수로서 선언이 되어야 한다.
s.data.clear(); // compile error. private 멤버로 접근
do s.data.push_back(c); // compile error. private 멤버로 접근
상기의 함수는 Str 자료형에 입력을 하기 때문에 Str 형에 대한 쓰기 권한이 필요하다. 그러나 9.3.1절처럼 단순히 입력 함수를 만들게 되면 일반 사용자가 객체의 내부 구조를 건드릴 수 있는 인터페이스를 제공하는 꼴이 되기 때문에 옳지 못하다.
따라서 우리는 operator>>를 public 멤버로 만들고 data에 대한 쓰기 권한을 가지게 해서는 안된다.
이런 경우의 함수를 '''friend''' 로 정의 하여 해결하는 것이 가능하다.
함수를 friend 로 정의하면 인자로 받은 형에대해서는 형의 접근자가 무시된다.
friend 함수는 접근제어 레이블에 영향을 받지 않기 때문에 어디에 선언을 해도 무관하나, 가능하면 클래스 선언의 최초 부분에 놓는 것이 좋다.
* operator+는 각 인수로 받는 객체의 값을 변화시키지 ㅤㅇㅏㅎ는다. 따라서 비멤버함수로 구현하는 것이 적당하다.
상기에서 구현된 operator+= 는 Vec를 copy함수를 이용해서 구현하였다.
이런식으로 동작하게 하면 임시 변수의 생성으로 인한 오버헤드가 상당함으로 알 수 있다. 이런 문제를 해결하기 위해서 string 클래스는 자동변환에 의존하지 않고, 피연산자들의 모든 조합에 대해 결합 연산자를 제공한다.
이항연산자는 비 멤버함수로 설계하는 것이 좋다. 이유는 멤버함수의 경우 첫번째 인자가 객체의 특정형으로 고정되기 때문에 자동 형변환을 이용할 수 없기 때문이다. 즉 대칭성(symmetry)를 유지하는 것이 가능하다.
- AcceleratedC++/Chapter6 . . . . 52 matches
* 근데 이것보다 더 일반적인, (즉 컨테이너에 독립적인) 방법이 있다. 컨테이너의 멤버함수를 이용하는 것이 아닌, 표준 알고리즘을 이용하는 것이다. 위의 것과 동일한 기능을 한다.
* 다음으로 반복자 어댑터(Iterator Adapters)를 살펴보자. 반복자 어댑터는 컨테이너를 인자로 받아, 정해진 작업을 수행하고 반복자를 리턴해주는 함수이다. copy알고리즘에 쓰인 back_inserter는 ret의 뒤에다가 copy를 수행한다는 것이다. 그럼 다음과 같이 쓰고 싶은 사람도 있을 것이다.
* 5장에서 공부한 것 중에 주어진 string을 공백을 기준으로 잘라서, vector에다 넣은 다음 리턴해주는 함수가 있었다.(split) 이것을 좀 더 간단히 만들어보자. 앞의 것은 굉장히 알아보기 힘들게 되어있다.
* find_if의 인자를 보면, 앞의 두개의 인자는 범위를 의미한다. 첫인자~두번째인자 말이다. 마지막 인자는 bool형을 리턴하는 함수를 넣어준다. 즉 predicater이다. 그러면 find_if는 주어진 범위 내에서 predicator를 만족하는 부분의 반복자를 리턴해 준다.
* isspace는 표준 라이브러리에서 지원하는 함수임에다 불구하고, 왜 따로 만들었을까? 바로 isspace는 여러 언어 버젼으로 오버로딩 되어 있기 때문이다. 템플릿 함수의 인자로 오버로딩된 함수를 넘겨주는 것은 쉽지 않다. 어떤 버젼인지 알수가 없기 때문이다. 이것이 우리가 isspace역할을 하는 함수를 새로 만든 이유다.
* 5장에서는 string(i,j) 대신에, substr이라는 함수를 이용했었는데, 이번에 쓰지 않은 이유는 substr은 반복자를 인자로 받지 않기 떄문이다.
* 참 깔끔하다. rbegin()은 역시 반복자를 리턴해주는 함수이다. 거꾸로 간다. equal함수는 두개의 구간을 비교해서 같을 경우 bool 의 true 값을 리턴한다. 파라매터로 첫번째 구간의 시작과 끝, 두번째 구간의 시작 iterator 를 받는다. 두번째 구간의 끝을 나타내는 iterator 를 요구하지 않는 이유는, 두개의 구간의 길이가 같다고 가정하기 때문이다. 이는 equal 함수의 동작을 생각해 볼때 합당한 처리이다.
// find_if 함수의 테스팅에 이용되는 함수이다. char은 string 의 iterator의 값이다.
//이 예제의 핵심 함수이다.
* find_if(b, e, p) 문자열 시퀀스 [b, e)에서 함수 p를 통해 테스트한다.
* static 스토리지 지정자는 함수의 최초 생성시 저장공간에 단 한번만 할당되며, 다시 호출을 하여도 새로 할당되지 않는다.
==== 모든 과제를 제출했는지를 판별하는 함수 ====
find함수는 처음두개의 전달인자 범위에서 세번째 전달인자의 값을 찾지 못하면 2번째 전달인자를 리턴한다. (찾으면 첫번째전달인자
empty멤버함수: 컨테이너가 비어 있으면 true, 아니면 false리턴
==== 초기 median_analysis 함수 ====
// 이 함수는 제대로 동작하지 않습니다.
transform함수: 처음2개의 전달인자 범의의 값들을 4번째함수에 대입 리턴값을 3번째 주소부터 넣음(?)
1. grade함수는 오버라이딩된 함수이므로 컴파일러가 전달인자를 파악하지 못함
새로운 함수 grade_aux 작성
median_anlysis함수 수정
- CToAssembly . . . . 52 matches
프로그램을 실행하기위해 필요한 함수들을 모아둔 기본 라이브러리나 사용자가 만든 라이브러리는 사용자 소프트웨어에 포함된다.
C/C++같은 고급언어의 컴파일러는 고급언어를 어셈블리코드로 변환할 수 있다. GNU C/C++ 컴파일러의 -S 옵션은 프로그램 소스에 해당하는 어셈블리코드를 생성한다. 반복, 함수 호출, 변수 선언과 같은 기본적인 구조가 어셈블리어로 어떻게 대응하는지 알면 C 내부를 이해하기 쉽다. 이 글을 이해하기위해서는 컴퓨터구조와 Intel x86 어셈블리어에 익숙해야 한다.
= 함수(subroutine) =
복잡한 프로그램을 만들때 우리는 해결할 문제를 체계적으로 나눈다. 그리고 필요할때마다 호출할 함수를 작성한다. 목록 3은 어셈블리어 프로그램의 함수 호출과 반환을 보여준다.
call 명령어는 실행을 함수 foo로 옮긴다. foo의 ret 명령어는 실행을 다시 main의 호출 다음에 나오는 명령어로 옮긴다.
일반적으로 함수는 함수가 사용할 변수들을 정의한다. 이 변수들을 유지하려면 공간이 필요하다. 함수 호출시 변수값을 유지하기위해 스택을 사용한다. 프로그램 실행중에 반복되는 재귀호출시(recursive call) activation record가 유지되는 방법을 이해하는 것이 중요하다. esp나 ebp같은 레지스터 사용법과 스택을 다루는 push와 pop같은 명령어 사용법은 함수호출과 반환방식을 이해하는데 중요하다.
프로그램의 메모리 일부를 스택으로 사용하기위해 비워두었다. Intel 80386 이상의 마이크로프로세서에는 스택 최상위 주소를 저장하는, 스택포인터(stack pointer)라는 esp 레지스터가 있다. 아래 그림 1은 스택에 저장된 세 정수값 49, 30, 72를 보여준다 (정수는 각각 4 바이트를 차지한다). esp 레지스터는 스택 최상위 주소를 저장한다.
스택포인터 레지스터는 4만큼 감소하고, 숫자 15를 4 바이트(주소 1988, 1989, 1990, 1991)에 저장한다.
명령어 popl %eax는 스택 최상위에 있는 값(4 바이트)을 eax 레지스터에 복사하고 esp를 4만큼 증가한다. 만약 스택 최상위에 있는 값을 레지스터에 복사하고 싶지 않다면? 명령어 addl $4, %esp를 실행하여 스택포인터만 증가하면 된다.
목록 3에서 명령어 call foo는 호출을 마친후 실행할 명령어의 주소를 스택에 넣고 foo로 분기한다. 함수는 ret에서 끝나고, 실행을 스택 최상위에서 가져온 주소에 있는 명령어로 옮긴다. 물론 스택 최상위에 유효한 반환주소가 있어야 한다.
먼저 스택포인터의 값을 기준포인터 레지스터(base pointer register) ebp에 복사한다. 기준포인터는 스택의 다른 위치를 접근할때 사용할 고정된 기준점이다. foo를 호출한 코드에서도 ebp를 사용하므로, 값을 esp 값으로 대체하기 전에 스택에 복사한다. 명령어 subl $4, %esp는 스택포인터를 감소하여 정수를 담기위한 (4 바이트) 공간을 만든다. 다음 줄은 값 10을 ebp에서 4를 뺀 (4 바이트) 주소에 복사한다. 명령어 movl %ebp, %esp는 스택포인터를 foo 시작시 가졌던 값으로 되돌리고, popl %ebp는 기준포인터 레지스터의 값을 되돌린다. 스택포인터는 이제 foo를 시작하기 전과 같은 값을 가진다. 아래 표는 main 시작과 목록 4의 (main에서 반환을 제외한) 각 명령어 실행후 레지스터 ebp, esp와 3988에서 3999까지 스택 주소의 내용이다. 우리는 main의 첫 명령어 실행전에 ebp는 값 7000, esp는 값 4000을 가지며, 스택 주소 3988에서 3999까지 임의의 값 219986, 1265789, 86이 저장되있다고 가정한다. 또, main에서 call foo 다음에 나오는 명령어의 주소가 30000이라고 가정한다.
함수로 파라미터를 전달하기위해 스택을 사용할 수 있다. 우리는 함수가 eax 레지스터에 저장한 값이 함수의 반환값이라는 (우리가 사용하는 C 컴파일러의) 규칙을 따른다. 함수를 호출하는 프로그램은 스택에 값을 넣어서 함수에게 파라미터를 전달한다. 목록 5는 sqr이라는 간단한 함수로 이를 설명한다.
sqr의 첫번째 줄을 주의있게 살펴라. 함수를 부르는 측은 ebx의 내용을 스택에 넣고 명령어 call을 실행한다. 호출시 반환주소를 스택에 넣는다. 그리고 sqr는 스택 최상위에서 4 바이트 떨어진 곳에서 파라미터를 읽을 수 있다.
목록 6은 C 프로그램과 어셈블리어 함수를 보여준다. 파일 main.c에 C 함수가 있고 sqr.s에 어셈블리어 함수가 있다. cc main.c sqr.s를 입력하여 파일들을 컴파일하고 같이 링크한다.
반대도 매우 간단하다. 목록 7은 C 함수 print와 이 함수를 호출하는 어셈블리어를 보여준다.
지역변수의 공간은 스텍포인터를 감소하여 스택에 확보하고, 단순히 스택포인터를 늘려서 할당된 공간을 되돌린다. 그러면 GNU C가 전역변수에 대해서는 어떤 코드를 생성할까? 목록 9가 해답을 준다.
Libc wrapper는 시스템호출 규칙이 변경되는 경우 프로그램을 보호하고, 커널에 그런 시스템호출이 없는 경우 POSIX 호환 인터페이스를 제공하기위해 만들어졌다. 그러나, 유닉스 커널은 보통 거의 POSIX에 호환한다: 즉 대부분의 libc "시스템콜"의 문법은 실제 커널 시스템호출의 문법과 (반대로도) 정확히 일치한다. 그러나 libc를 버리지않는 이유는 시스템콜 wrapper외에 printf(), malloc() 등 함수도 있기때문이다.
리눅스 시스템호출은 int 0x80을 통해 한다. 리눅스는 일반적인 유닉스 호출 규칙과 다른 "fastcall" 규칙을 사용한다. 시스템함수 번호는 eax에, 아규먼트는 스택이 아닌 레지스터를 통해 전달한다. 따라서 ebx, ecx, edx, esi, edi, ebp에 아규먼트 6개까지 가능하다. 아규먼트가 더 있다면 간단히 구조체를 첫번째 아규먼트로 넘긴다. 결과는 eax로 반환하고, 스택을 전혀 건드리지 않는다.
명령어 cc -g fork.c -static으로 프로그램을 컴파일한다. gdb 도구에서 명령어 disassemble fork를 입력한다. fork에 해당하는 어셈블리코드를 볼 수 있다. -static은 GCC의 정적 링커 옵션이다 (manpage 참고). 다른 시스템호출도 테스트해보고 실제 어떻게 함수가 동작하는지 살펴봐라.
감싸인 함수(nested function)는 다른 함수 ("감싸는 함수(enclosing function") 안에서 정의되며, 다음과 같다:
- Cpp에서의멤버함수구현메커니즘 . . . . 52 matches
cout << endl << ":::::: Case 3 - 포인터 NULL로 하고 메소드 호출하기 " << endl;
:::::: Case 3 - 포인터 NULL로 하고 메소드 호출하기
==== Case2 - 포인터 NULL로 하고 메소드 호출하기 ====
* 첫째로, C++의 클래스와 인스턴스 생성을 알아봅시다.
* 둘째로, 인스턴스에 귀속된 멤버 함수들을 실행하는 것을 생각해 보겠습니다.
==== C++에서 클래스의 선언과 인스턴스의 생성입니다. ====
여기까지가, class 와 struct 키워드가 하는 동일한 작업입니다. 그리고, class 에는 몇가지 더 생각해야 하는데, 그중 하나가 foo 를 이용해서 어떠한 member 함수를 호출할 수 있는가 입니다.
그러나, 컴파일러인 우리는 이 정보를 지역 변수이든, new 로 할당이든 컴파일 시간에 인자의 type을 보고 함수 호출 유효성을 확인하고, 적절한 함수 포인터를 함수 호출하는 부분에 넣어 줄수 있습니다. 그리고 실행할 수 있는데 이 과정을 두번째에서 설명합니다.
==== instance 에 귀속된 멤버 함수들을 실행해 봅시다. ====
자 계속 우리는 컴파일러 입니다. 컴파일러인 우리는 member 함수 호출 부분을 함수의 실행코드를 가리키는 함수 포인터로 모두 교체하였습니다. 그리고 인간으로 돌아옵시다.
C++ 표준안에서 전역에서 함수 호출과, instance에 귀속된 멤버 함수들의 호출을 가리지 않습니다. 함수 선언과 멤버 함수 선언의 함수 실행 코드는 모두 동일 방법으로 선언되고, 모두 동일한 메커니즘의 함수 포인터를 이용해서 호출합니다.
'''전역 함수와 동일한 함수 선언의 형태라면 각각의 instance에 어떻게 접근하는가?'''
라는 함수는 각 instance의 id 라는 인자에 접근합니다.
그러나 {{{~cpp Foo::sayMyId()}}} 같은 아무런 인자 없는 함수의 실행코드가 함수 선언 영역에 세팅된다면, id 라는 인자에 접근할수 없습니다.
C++ 에서는 이런 한계를 class 에 귀속된 함수들의 처음 인자로 해당 class 의 포인터를 묵시적으로 선언해서 해결하고 있습니다. 즉,
라는 함수 실행 코드가 함수 영역에 선언될때 컴파일러가
라는 형태의 함수로 선언하고, 실행할수 있도록 만듭니다. 그리고, 호출한다면 {{{~cpp Foo*}}} 부분에
형태로 함수 포인터를 세팅해서 함수 코드를 실행합니다.
사족. 이러한 사연이 class내에서 static 멤버 함수를 선언하고 instance에서 호출할때 instance 의 멤버 변수에 접근하지 못하는 이유가 됩니다. static 함수로 선언 하면 묵시적으로 pointer 를 세팅하지 않고 함수를 호출합니다.
이렇게 나옵니다. (C++ 주석 빼고) 위에서 문제시 되는 부분은, 후반의 두가지 {{{~cpp sayHello() 와 sayMyId()}}} 일겁니다. 둘째 설명의 member 함수를 호출하는 메커니즘을 이해했다면
- HardcoreCppStudy/두번째숙제/CharacteristicOfOOP/변준원 . . . . 50 matches
프로그램상에서의 캡슐화의 의미는 프로그램 분석자나 설계자가 주어진 문제를 데이타와 함수들의 세부사항들은 개발의 차후단계에서 정의하고, 객체라는 덩어리 단위로 문제에 대해 생각하게 하는 추상화의 수단을 제공하는 데 있다.
속성 상속이라는 개념 역시 우리의 일상 생활에서 흔히 사용하는 개념을 프로그램으로 표현하기 위한 편리한 수단이다. 어떤 객체의 종류, 즉 클래스는 좀 더 세분화하여 분류할 수가 있는데 이렇게 세분화된 종류나 유형을 subtype 혹은 subclass라고 한다.
객체지향 프로그래밍에서 "속성 상속"은 새로운 클래스를 정의할 때 모든 것은 처음부터 다 정의하는 것이 아니라 이미 존재하는 유사한 클래스를 바탕으로 하여 필요한 속성만 추가하여 정의하는 경제적인 방법을 의미한다. 이 때 새로이 생기는 클래스를 subclass라 하고 그 바탕이 되는 클래스를 superclass라 한다. 이렇게 하면 클래스들 사이에서 공통으로 가지는 특성, 즉 데이타 구조나 함수들은 중복하여 정의하는 일을 줄일 수 있을 뿐 아니라, 특성을 수정하거나 추가시에 superclass의 정의만 고치면 그 subclass들도 변경된 속성을 자동적으로 상속받게 되므로 매우 편리하다.
객체 지향 프로그램의 중요한 특징으로 하나의 함수 이름이나 심볼이 여러 목적으로 사용될 수 있는 다형성(Polymorphism)을 들 수 있다. 객체 지향에서의 다형성이란, 복수의 클래스가 하나의 메세지에 대해 각 클래스가 가지고 있는 고유한 방법으로 응답할 수 있는 능력을 말한다. 즉, 별개로 정의된 클래스들이 ㅌ은 이름의 함수를 별도로 가지고 있어 하나의 메세지에 대해 각기 다른 방법으로 그 메세지를 수행할 수 있는 것을 의미한다. 예를 들어, 여러 가지 화일(file)들을 프린트 하는 함수를 생각해 보자. 화일에는 간단한 텍스트 화일(text file), 문서 편집기로 만든 포멧 화일(format file), 그래픽을 포함하는 화일(file with graphics) 등 여러 가지가 있다. 이들 각각의 화일들은 프린트 하는 방법이 모두 다르다, 객체 지향에서는 아래처럼 각 종류의 화일을 별도의 클래스로 정의하고, 각각의 화일 종류별로 Print라는 함수를 화일의 형태에 맞게 구현한다.
이렇게 생성된 화일 객체들은 모두 Print라는 메세지를 이해하며, 각 화일의 종류에 알맞게 프린트 할 수 있다. 이렇듯 다형성은 같은 이름의 함수를 여러 클래스가 각 클래스에 알맞게 달리 정의하고 같은 이름의 메세지에 응답할 수 있게 해준다.
정보 은폐란 캡슐속에 쌓여진 항목에 대한 정보를 외부에 감추는 것을 의미한다. 즉, 처리하려는 데이타 구조와 함수에 사용된 알고리즘 들을 외부에서 직접 접근하지 못하도록 하고 캡슐 내부의 함수들만이 접근하게 된다. 객체지향에 관한 서적이나 논문에서 이 두가지 개념이 중요시 소개되는 것은 바로 객체라는 것이 캡슐화와 정보 은폐의 원리를 실제의 프로그래밍 언어에서 실현한 것이기때문이다.
이 Public Interface는 언어에 따라 표현 양식이 다른데, C++에서는 "public"이란 특별 구문을 두어 "public"란에 들어간 항목들만 외부에 공개된다. Effel이란 언어에서는 "export"라는 란에 지정된 항목들만 외부에 공개된다. 앞에서 정의한 POINT라는 객체 정의를 보면 move와 setcolor의 함수들이 외부에서 관찰될 수 있는 public interface임을 알 수 있다. 여기서 한가지 유의할 점은 move와 setcolor라는 함수들이 외부에 보여져 불리워질 수 있는 함수들이라는 것이며 각 함수가 가지고 있는 코드나 알고리즘까지 보여지는 것은 아니라는 것이다. 한 함수가 외부에 보여지는 부분을 signature라고 하며 하나의 signature는 함수의 이름, 입력 매개변수(input parameter)와 출력 매개변수(output parameter)로 구성되어 있다.
위에서 살펴볼 캡슐화와 정보 은폐의 이점은 우선 객체 내부의 은폐된 데이타 구조가 변하더라도 주변 객체들에게 영향을 주지 않는다는 것이다. 예로서, 어떤 변수의 구조를 배열(array)구조에서 리스트(list) 구조로 바꾸더라도 프로그램의 다른 부분에 전혀 영향을 미치지 않는다. 또한 어떤 함수에 사용된 알고리즘을 바꾸더라도 signature만 바꾸지 않으면 외부 객체들에게 영향을 주지 않는다. 예를 들어, sorting 함수의 경우 처음 사용된 sequence sorting 알고리즘에서 quick sorting 알고리즘으로 바뀔때 외부에 어떤 영향도 주지 않는다. 이러한 장점을 유지보수 용이성(maintainability) 혹은 확장성(extendability)이라 한다.
추상 클래스(Abstract Class)
클래스 중에는 인스턴스(instance)를 만들어 낼 목적이 아니라 subclass들의 공통된 특성을 추출하여 묘사하기 위한 클래스가 있는데, 이를 추상 클래스(Abstract class, Virtual class)라 한다. 변수들을 정의하고 함수중 일부는 완전히 구현하지 않고, Signature만을 정의한 것들이 있다. 이들을 추상 함수(Abstract function)라 부르며, 이들은 후에 subclass를 정의할 때에 그 클래스의 목적에 맞게 완전히 구현된다. 이 때 추상 클래스의 한 subclass가 상속받은 모든 추상 함수들을 완전히 구현했을 때, 이를 완전 클래스(Concrete class)라고 부른다. 이 완전 클래스는 인스턴스를 만들어 낼 수 있다.
추상 클래스의 예로서 프린터 소프트웨어를 생각해 보자. 우선 모든 종류의 프린터들이 공통으로 가지는 특성을 정의한 추상 클래스 "Printer"가 있다고 한다면, 여기에는 프린터의 상태를 나타내는 변수, 프린터의 속도 등의 변수가 있으며 함수로는 프린팅을 수행하는 Print 등을 생각할 수 있다. 그러나 프린터마다(Dot matrix printer, Laser printer, Ink jet printer) 프린팅 하는 방법이 다르므로 이 추상 클래스 안에서는 Print라는 함수를 완전히 구현할 수 없다. 다만, 여기에는 Print 추상 함수의 Signature만 가지고 있으며, 실제의 구현은 여러 subclass에서 각 프린터 종류에 알맞게 하면 된다.
"Printer"라는 클래스는 추상 클래스로서 실존의 어떤 프린터 기능을 가지고 있지 않고, dot matrix printer나 laser printer 등의 완전 클래스들 간의 공통된 특성만 지정하고 있으므로, 그 인스턴스를 만드는 것은 무의미하다. 추상 클래스는 점진적 개발 방법(Incremental Development)에 유용하게 사용될 수 있으며, 공통 속성(attribute)의 추출 및 정의에 유용하므로 문제를 모델링하는데 편리함을 더해준다.
- JavaStudy2003/두번째과제/곽세환 . . . . 49 matches
행동 -> 메소드(함수)
클래스(Class):(벽돌틀)
클래스를 실제로 사용할 수 있도록 선언하는 것
상위클래스가 가지고 있는 특성들을 하위클래스에서 사용할 수 있다.
여러개의 클래스가 같은 메시지에 대해서 각자의 방법으로 작용할 수 있는 능력이다.
연산자 다중 정의(overloading),함수 다중 정의,함수 재정의(overriding)등이 있다.
나.클래스정의 및 인스턴스(객체) 생성
클래스 정의
class 클래스이름 {
클래스이름 클래스인스턴스이름 = new 클래스이름();
클래스이름 클래스인스턴스이름;
클래스인스턴스이름 = new 클래스이름();
public:같은 클래스, 하위클래스, 같은 패키지내에 있는 클래스에서 접근가능
private:같은 클래스에서만 접근가능
protected:같은 클래스, 하위클래스, 같은 패키지내에 있는 클래스에서 접근가능
friendly(생략):같은 클래스, 같은 패키지내에 있는 클래스에서 접근 가능
함수다중정의:같은 이름의 함수가 여러개 존재하는 것
연산자다중정의:같은 이름의 연산자가 클래스에 따라 다른 연산을 수행할 수 있도록 하는 것
클래스이름(형식매개변수 리스트) { … }
클래스이름(형식매개변수 리스트) {
- BigBang . . . . 46 matches
* 기본 함수들의 namespace
* [http://thenine.egloos.com/430823 main 함수의 리턴값]
==== 포인터 (Pointer) ====
==== 함수 (Function) ====
* 함수에 parameter 를 넘겨주지 않거나 return 이 없는 함수도 있음.
* 많은 기능을 잘게 쪼개기 위해 함수를 사용한다.
* global variable의 사용을 자제하자. 함수의 기능을 이해하기 어렵게 만든다.
* 포인터 값을 전달하는 Call-by-reference의 경우는, 포인터 값을 복사의 방식으로 전달하게 되므로, 일종의 call-by-value라고 볼 수 있다.
* 참조는 내부적으로 포인터를 이용한다.
* C/C++의 함수 호출 방법(Calling Convention)
* 함수 decorator : C++의 오버로딩을 하게 되면, 컴파일 타임에서 각각의 함수를 구분할 수 있도록 붙는 머릿말
* extern "C"를 이용하면 이러한 함수 decorator가 없어진다.
* const 멤버 함수의 효과
* int와 객체와의 곱셈을 구현, 남의 멤버함수
* 신기한 포인터 놀이
* 참고 : [Cpp에서의멤버함수구현메커니즘]
* 인스턴스는 NULL를 가리키지만, 실제로 실행될 때는 hello 함수만을 호출하기 때문이다. (문장 설명이 부족한데?)
* stack이나 heap에서 데이터를 free 할 때, 실제로 포인터만 이동이 된다. 그래서 실제로는 데이터가 메모리에 남아있게 된다(기존의 값을 초기화화 할 필요없이 할당 플래그만 해제하면 되므로). 중간에 다른 곳에서 호출이 될 경우에 데이터가 덮어 써지는 문제가 발생할 수 있으므로, dangling pointer를 조심해야 한다.
* namespace로 같은 이름을 가진 클래스들을 사용해보자
* 가변인자의 형을 검사하는 주체가 컴파일러가 아닌, 함수이기 때문이다.
- JavaNetworkProgramming . . . . 45 matches
public class AuthException extends IOException{ //사용자 예외를 정의할때 적당한 예외 클래스의 서브클래스가 되는것이 중요한데
*Thread 클래스 : 보통 상속받아서 사용
*Runnable 인터페이스 : Thread 클래스를 직접 상속받지 않은 클래스의 객체가 손쉽게 쓰레드를 생성할수 있도록 해줌
*ThreadGroup 클래스 : 여래개의 쓰레드르 그룹으로 만들어 손쉽계 Thread를 관리
*OutpuStream,InputStream : 모든 다른 스트림 클래스들의 수퍼클래스이다. 이 Chapter에서는 이둘 클래스 설명
*OutputStream 클래스 : OutputStream 클래스는 통신 채널로의 관문을 의미한다. 즉, OutputStream으로 데이터를 써넣으면 데이터는 연결된 통신 채널로 전송될 것이다.
*InputStream 클래스 : InputStream 클래스는 통신 채널로부터 데이터를 읽어 내는 관문을 의미한다. OutputStream에 의해 통신 채널로 쓰여진 데이터는 해당하는 InputStream에 의해 읽혀진다.
*FileOutputStream과 FileInputStream은 파일에 대한 바이트 기반의 스트림 엑세스를 제공하는 2개의 표준 클래스이다.
*File클래스 : 시스템에 독립적인 파일의 이름을 나타내고 실제 파일에 관한 정보를 결정하는 메소드뿐만아니라, 파일의 속성을 바꾸는 메소드도 제공
*FileDescriptor클래스 : FileDescriptor 객체는 하위 레벨의 시스템 파일 설명자로의 핸들이다. 파일 설명자는 열려진 파일을 의미하며, 읽기 작업이나 쓰기 작업을 위한 현재의 파일 내의 위치와 같은 정보들을 포함한다. RandomAccessFile이나 FileOutputStream, FileInputStream을 사용하지 않고는 유용하게 FileDescritor를 생성할수 있는 방법은 없다 . --;
*RandomAccessFile클래스 : 파일스트림을 사용하지않고 파일을 쉽게 다룰수 있음 장점은 파일스트림 클래스는 순차적 엑세스만이 가능하지만 이것은 임의의 엑세스가 가능하다. 여기선 RandomAccessFile클래스랑 파일 스트림을 같이 쓰는데 RandomAccessFile의 장점을 가지고 네트워크에서도 별다른 수정없이 사용할수있다. 예제는 밑에 --;
*FileOutputStream 클래스 : 연속적인 데이터가 파일에 쓰여질수 있도록 해줌
*FileInputStream 클래스 : 연속적인 데이터를 읽을수 있게 해줌 --;
//않으면 파일을 연다 파일을 열면 포인터는 자동으로 파일의 시작부분을 가리키미로
file.seek(position); //position의 위치로 파일 포인터 위치를 변경
return file.getFilePointer(); //현재 파일 포인터 위치를 돌려줌
*FileterOutputStream , FilterInputStream 클래스 : 이것은 입출력 스트림 필터에 대한 템플리트로 이미 존재하는 InputStream,OutputStream에 연결해서 요구된 내용을 연결된 스트림의 메소드로 전댈해 주는것 이외의 기능은 제공하지 않는다.
*LineNumberInputStream : LineNumberReader 클래스에 의해 쓸모가 없어진 이 스트림은 초보적인 수준으로 줄에 번호 매기는 기능을 제공한다.
*PrintStream : PrintWriter 클래스에 의해 쓸모가 없어진 이 클래스는 ASCII 텍스트 데이터의 출력기능을 제공한다.
*DataOutputStream,DataInputStream,BufferedOutputStream,BufferedInputStream,PrintStream,SequenceInputStream,LineNumberInputStream,PushbackInputStream 클래스에 관해서 좀 자세히 설명을 해놓고 있다.
- 새싹교실/2012/AClass/3회차 . . . . 45 matches
6.포인터를 이용해 함수 swap 짜보기(대부분의 책 예제에 있습니다. 따라 써보고 코드를 이해해 보세요)
9.포인터를 이용한 예제코드 하나를 짜 보세요.
10.LinearSearch를 구현해보세요. 배열은 1000개로 잡고, random함수를 이용해 1부터 1000까지의 숫자를 랜덤으로 배열에 넣은 후, 777이 배열내에 있었는지를 찾으면 됩니다. 프로그램을 실행시킬 때마다 결과가 달라지겠죠?
- *a가 b를 가리키는 포인터도 선언 되었다면, &a는 a의 주소값, a는 메모리 안에 있는 값(즉, b의 주소값-포인터의 정의), &b는 b의 주소값, b는 메모리 안에 있는 값(할당한 값),a=&b와 같다. 둘다 b의 주소값을 나타낸다.*a=b와 같고 b에 할당한 값과 같다.
molloc은 함수가 원하는 역활은 우리가 원하는 크기의 자료를 메모리에 할당하고 그 주소값을 다시 되돌려 주는 역활이다.
포인터 변수 = (포인터의 자료형 )malloc(원하는 자료크기);
3.이중포인터가 무엇인지 알아보고, 이중 포인터를 이용해 2차원 배열형태로 만들어보세요.
- 포인터의 주소를 가리키는 포인터를 이중포인터라고 한다.
6.포인터를 이용해 함수 swap 짜보기(대부분의 책 예제에 있습니다. 따라 써보고 코드를 이해해 보세요)
9.포인터를 이용한 예제코드 하나를 짜 보세요.
10.LinearSearch를 구현해보세요. 배열은 1000개로 잡고, random함수를 이용해 1부터 1000까지의 숫자를 랜덤으로 배열에 넣은 후, 777이 배열내에 있었는지를 찾으면 됩니다. 프로그램을 실행시킬 때마다 결과가 달라지겠죠?
printf("%d\n",&a); //포인터 변수 a의 주소
3.이중포인터가 무엇인지 알아보고, 이중 포인터를 이용해 2차원 배열형태로 만들어보세요.
이중 포인터는 싱글 포인터의 주소 값을 저장하기 위한 용도로 사용되는 포인터이다.
7.포인터를 이용해 함수 swap 짜보기(대부분의 책 예제에 있습니다. 따라 써보고 코드를 이해해 보세요)
10.포인터를 이용한 예제코드 하나를 짜 보세요.
11.LinearSearch를 구현해보세요. 배열은 1000개로 잡고, random함수를 이용해 1부터 1000까지의 숫자를 랜덤으로 배열에 넣은 후, 777이 배열내에 있었는지를 찾으면 됩니다. 프로그램을 실행시킬 때마다 결과가 달라지겠죠?
동적 할당에 가장 기번적으로 사용되는 것은 malloc함수이고, 이 함수를 사용하기 위해서는 "stdlib.h"헤더파일을 포함해야 한다
포인터 변수 = (포인터의 자료형 종류)malloc(원하는 자료크기);
3.이중포인터가 무엇인지 알아보고, 이중 포인터를 이용해 2차원 배열형태로 만들어보세요.
- Gof/Composite . . . . 38 matches
드로우 에디터나 회로설계 시스템과 같은 그래픽 어플리케이션은 단순한 컴포넌트들의 차원을 넘어서 복잡한 도표들을 만들어내는데 이용된다. 사용자는 더 큰 컴포넌트들을 형성하기 위해 컴포넌트들을 그룹화할 수 있고, 더 큰 컴포넌트들을 형성하기 위해 또 그룹화 할 수 있다. 단순한 구현방법으로는 Text 나 Line 같은 그래픽의 기본요소들에 대한 클래스들을 정의한 뒤, 이러한 기본요소들에 대해 컨테이너 역할을 하는 다른 클래스에 추가하는 방법이 있다.
하지만, 이러한 접근방법에는 문제점이 있다. 비록 대부분의 시간동안 사용자가 개개의 객체들을 동일하게 취급한다 하더라도, 이러한 클래스들을 이용하는 코드는 반드시 기본객체와 컨테이너 객체를 다르게 취급하여 코딩해야 한다는 점이다. 이러한 객체들의 구별은 어플리케이션을 복잡하게 만든다. CompositePattern은 객체들에 대한 재귀적 조합 방법을 서술함으로서, 클라이언트들로 하여금 이러한 구분을 할 필요가 없도록 해준다.
CompositePattern의 핵심은 기본요소들과 기본요소들의 컨테이너를 둘 다 표현하는 추상 클래스에 있다. 그래픽 시스템에서 여기 Graphic class를 예로 들 수 있겠다. Graphic 은 Draw 와 같은 그래픽 객체들을 구체화하는 명령들을 선언한다. 또한 Graphic 은 Graphic 의 자식클래스들 (tree 구조에서의 parent-child 관계)에 대해 접근하고 관리하는 명령들과 같은 모든 composite 객체들이 공유하는 명령어들을 선언한다.
Line, Rectangle, Text 와 같은 서브 클래스들은 (앞의 class diagram 참조) 기본 그래픽 객체들을 정의한다. 이러한 클래스들은 각각 선이나 사각형, 텍스트를 그리는 'Draw' operation을 구현한다. 기본적인 그래픽 구성요소들은 자식요소들을 가지지 않으므로, 이 서브 클래스들은 자식요소과 관련된 명령들을 구현하지 않는다.
Picture 클래스는 Graphic 객체에 대한 포함관계를 정의한다. Picture 는 Picture의 children의 Draw 메소드를 호출하게끔 Draw 메소드를 구현한다. 그리고 Picture는 child와 관련한 명령어들을 알맞게 구현한다. Picture 인터페이스는 Graphic의 인터페이스를 형성하므로, Picture 객체는 다른 Pricture들을 재귀적으로 조합할 수 있다.
* 모든 클래스들에의 기본적인 인터페이스에 대한 기본 행위를 구현한다.
* (optional) 재귀 구조에서의 해당 컴포넌트의 부모 클래스로 접근하기 위한 인터페이스를 정의하고, 적절하게 구현한다.
* 클라이언트들은 Component 클래스의 인터페이스를 이용, composite 구조의 객체들과 상호작용을 한다. 만일 상호작용하는 객체가 Leaf인 경우, 해당 요청은 직접적으로 처리된다. 만일 상호작용하는 객체가 Composite인 경우, Composite는 해당 요청을 자식 컴포넌트들에게 전달하는데, 자식 컴포넌트들에게 해당 요청을 전달하기 전 또는 후에 추가적인 명령들을 수행할 수 있다.
* 기본 객체들과 복합 객체들로 구성된 클래스 계층 구조를 정의한다. (상속관계가 아님. 여기서는 일종의 data-structure의 관점) 기본 객체들은 더 복잡한 객체들을 구성할 수 있고, 계속적이고 재귀적으로 조합될 수 있다. 클라이언트 코드가 기본 객체를 원할때 어디서든지 복합 객체를 취할 수 있다.
* 클라이언트를 단순하게 만든다. 클라이언트는 각각의 객체와 복합 구조체를 동등하게 취급할 수 있다. 클라이언트는 그들이 다루려는 객체가 Composite 인지 Leaf 인지 알 필요가 없다. 이러함은 composition 을 정의하는 클래스들에 대해 상관없이 함수들을 단순하게 해준다.
* 새로운 종류의 컴포넌트들을 추가하기 쉽게 해준다. 새로 정의된 Composite 나 Leaf 의 서브클래스들은 자동적으로 현재의 구조들과 클라이언트 코드들과 작용한다. 클라이언트 코드들은 새로운 Component 클래스들에 대해서 수정될 필요가 없다.
Equipment 클래스는 부분-전체 계층구조의 모든 equipment들을 위한 인터페이스를 정의한다.
Equipment 는 전원소모량 (power consumption)과 가격(cost) 등과 같은 equipment의 일부의 속성들을 리턴하는 명령들을 선언한다. 서브클래스들은 해당 장비의 구체적 종류에 따라 이 명령들을 구현한다. Equipment 는 또한 Equipment의 일부를 접근할 수 있는 Iterator 를 리턴하는 CreateIterator 명령을 선언한다. 이 명령의 기본적인 구현부는 비어있는 집합에 대한 NullIterator 를 리턴한다.
Equipment 의 서브클래스는 디스크 드라이브나 IC 회로, 스위치 등을 표현하는 Leaf 클래스를 포함할 수 있다.
CompositeEquipment 는 다른 equipment를 포함하는 equipment의 기본클래스이다. 이는 또한 Equipment 의 서브클래스이다.
CompositeEquipment 는 sub-equipment 에 접근하고 관리하기 위한 명령들을 정의한다. 이 명령들인 Add 와 Remove는 _equipment 멤버에 저장된 equipment 의 리스트로부터 equipment 를 추가하거나 삭제한다. CreateIterator 명령은 이 리스트들을 탐색할 수 있는 iterator(구체적으로 ListIterator의 인스턴스) 를 리턴한다.
자, 우리는 컴퓨터 섀시를 Chassis 라 불리는 CompositeEquipment의 서브클래스로서 표현할 수 있다. Chassis는 CompositeEquipment로부터 자식-관련 명령어들을 상속받는다.
CompositePattern의 예는 거의 모든 객체지향 시스템에서 찾을 수 있다. Smalltalk 의 Model/View/Container [KP88] 의 original View 클래스는 Composite이며, ET++ (VObjects [WGM88]) 이나 InterViews (Styles [LCI+92], Graphics [VL88], Glyphs [CL90])등 거의 대부분의 유저 인터페이스 툴킷과 프레임워크가 해당 과정을 따른다. Model/View/Controller 의 original View에서 주목할만한 점은 subview 의 집합을 가진다는 것이다. 다시 말하면, View는 Component class 이자 Composite class 이다. Smalltalk-80 의 Release 4.0 은 View 와 CompositeView 의 서브클래스를 가지는 VisualComponent 클래스로 Model/View/Controller 를 변경했다.
RTL Smalltalk 컴파일러 프레임워크 [JML92] 는 CompositePattern을 널리 사용한다. RTLExpression 은 parse tree를 위한 Component 클래스이다. RTLExpression 은 BinaryExpression 과 같은 서브클래스를 가지는데, 이는 RTLExpression 객체들을 자식으로 포함한다. 이 클래스들은 parse tree를 위해 composite 구조를 정의한다. RegisterTransfer 는 프로그램의 Single Static Assignment(SSA) 형태의 중간물을 위한 Component 클래스이다. RegisterTransfer 의 Leaf 서브클래스들은 다음과 같은 다른 형태의 static assignment 를 정의한다.
또 다른 서브클래스로서 RegisterTransferSet이 있다. RegisterTransferSet 는 한번에 여러 register를 변경하는 assignment를 표현하기 위한 Composite 클래스이다.
- 2학기파이선스터디/함수 . . . . 35 matches
== 함수의 정의와 호출 ==
def 함수명(인수들..):
return은 계산된 값을 함수를 호출한 곳으로 돌려준다. def는 함수 객체를 생성하고 그 객체를
add란 이름에 할당한다. 즉, 이름 add는 함수 객체의 reference를 갖고 있다.
add는 함수 객체를 참조하는 이름에 불과하므로 다른 이름을 이용해 함수를 호출할 수도 있다.
pass는 아무 일도 하지 않는 통과문(statement)이다. 함수는 최소한 한 개 이상의 문을 가져야 하기 때문에 사용한다.
인수 없이 return문 만을 사용하면 함수 호출측에 아무 값도 전달하지 않는다.
* 지역 영역(local scope) - 함수
g, h는 함수 외부에서 정의되었으므로 전역, a,b는 함수 내부에서만 사용되는 지역 변수이다.
h는 전역에 있지만 함수 내부에서 생성하므로 함수 내부에서는 지역 변수 h를,
함수 외부에서는 전역 변수 h를 참조한다.
함수 f의 지역 이름들은 함수 f가 종료되면서 사라진다(이름 공간 자체가 사라진다).
함수 f내부의 h를 전역변수로 사용하려면(즉, 전역변수h의 값을 바꾸고자한다면)
x = 1 # 함수 G 안에서 여기는 local도 global도 아니다
함수 G에서 참조하는 x는 지역(함수 G안), 전역(모듈), 내장 영역만 찾게 되므로 함수 F에 정의된 x가 참조되지 않는다.(x = 2)
그러나 2.1이상에서는 함수 F 안의 x를 참조하므로 올바른 결과가 나온다.
== 함수 인수 ==
고정되지 않은 수의 인수를 함수에 전달 - 나머지는 모두 튜플 형식으로 받는다
미리 정의되어 있지 않은 키워드 인수를 받으려면 함수 정의할때 마지막에 **kw형식으로 기술한다.
=== 튜플 인수와 사전 인수로 함수 호출하기(2.0 이상) ===
- 타도코코아CppStudy/객체지향발표 . . . . 35 matches
* Classification(분류) - 같은 자료구조와 행위를 가진 객체들은 동일한 클래스(class)로 분류된다.
상대적으로 각 객체는 소속 클래스의 인스턴스(instance)가 된다.
같은 클래스에서 생성된 객체들은 모두 같은 연산(operation) 기능을 갖고 있으며, 자료구조가 같고 동일한 행위를 하게 된다.(자료구조는 객체들이 갖는 데이타와 속성(attribute)들의 집합이다. 그러나 데이터와 속성의 값은 물론 다르다.)
* Polymorphism(다형성) - 같은 연산 기능이 부여되어도 그 기능을 수행하는 클래스에 따라 다른 행위로 나타날 수 있다.
예를 들어 '이동(move)' 이라는 기능이 '교수'라는 클래스에 적용될 때는 자택의 이사가 될 수 있으나, '승용차'라는 클래스에 적용되면 특정 목적지로 일정한 시각에 정해진 속도로 움직이는 행위가 될 수도 있다.
* Inheritance(상속) - 계층(hierarchy)관계에 놓여 있는 클래스들 간에 속성이나 연산 기능들을 공유한다.
즉, 주어진 클래스에 서브클래스(subclass)가 있다면 서브클래스의 모든 객체들은 소속 클래스의 모든 속성이나 연산기능을 상속받게 된다. 따라서, 서브클래스를 정의할 때에는 수퍼클래스(super class) 로부터 상속받는 내역들을 중복하여 정의할 필요가 없게 된다.
|| 함수로 이루어짐 || 클래스로 이루어짐 ||
* 캡슐화(encapsulation) : 객체의 내부적인 사항과 객체들간의 외부적인 사항들을 분리시킨다. 이렇게 캡슐화된 객체의 행위는 외부에서 볼 때는 구체적인 아닌 추상적인 것이 되므로 정보 은닉(information hiding) 개념이 존중된다. 주어진 클래스의 특정 연산 기능은 메소드(method)라고 한다. 캡슐화는 무슨 메소드로 구현되었는가에 구애받지 않고 추상적으로 정의된 연산 기능을 통해 객체가 사용되고 시스템의 상태(state)를 변화시키도록 해준다.
* sharing : 자료 구조및 행위의 공유화(sharing)는 계층 관계에 놓여 있는 클래스들 간의 상속성(inheritance)으로 가능하다.
서브클래스가 수퍼클래스의 변수와 메소드들을 상속받을 때 필요에 따라 정의가 구체화(specification)되며, 상대적으로 상위층의 클래스 일수록 일반화(generalization) 된다고 말한다.
* 캡슐화(Capsulation) : 캡슐화는 객체의 속에 모든 함수와 그 함수에 의해 유통되는 데이타를 밖에서 유통시키지 않는것이다.
겉에서 그객체를 사용하기 위한 사용자 인터페이스는 제공하나 데이타를 검색, 수정 그리고 함수의 이용을 위해서는 이 인터페이스를 꼭 거쳐야 되게 하는것이다.
즉 함수나 데이터가 그것이 속해있는 객체전용으로 된다는것을 말한다. 좋은 예로 자동차를 들수있다.
자동차라는 객체 클래스를 우리가 사용하기 위해서는 알아야할 것이 운전하는 방법뿐인 것이다. 표지 판이나 교통신호등은 관계는 있으나 자동차를 움직이기 위한 객체 인터페이스와는 아무런 관계가 없는것이다. 캡슐화는 기능의 조직성과 논리성을 연관시킨다.
* 데이타형 클래스와 객체(Class and Objectas any type data) : 자동차를 움직이기 위한 유저가 2명 있다. 자동차라는 객체 를 둘다 사용하는데 한명은 부산에 가려고 하고 한명은 대구에 오려고 한다.
* 상속성(Inheritance) : 객체를 이루는 클래스를 만들때 이전의 정의했던 클래스와 비슷하나 다른 특이한 특성을 지니는 클래스를 만드는것이다.
또 자동차다. 가진 자동차의 엔진이 출력이 150마력이다. 여기다 똑같은 엔진을 하나더 달아 300마력이 되었다. 즉 앞의 150마력이라는 클래스에 두개로서 300마력을 만든다는 개념이 포함 즉 상속되어있는것이다. 엔진력의 향상이 손쉽게 이루어졌다. 만약 새 300마력엔진을 단 차를 산다고 하면 더 힘들것이라는것을 알것이다.
150마력짜리 엔진을 두개 단차와 300마력짜리 엔진을 하나 단 차나 두차의 출력은 같다. 이것이 다형이다. 즉 클래스가 같다는 뜻이다. 조상객체로 볼때는 분명히 같은 이름이지만( 출력이 300마력이다) 전혀 실행방법이 다른 클래스인것이다( 하나는 150마력엔진의 원리로 움직이고 하나는 300마력 엔진의 원리로 움직인다는것).
다형은 기본 클래스를 바탕으로 동일한 메모리 개념을 써 다양성을 부여하는 것이다.
- MFCStudy_2001/MMTimer . . . . 34 matches
멀티미디어 타이머에 관련된 함수는 여러가지이나, 타이머를 구현하는데 필요한 함수는 세개입니다. [[BR]]
타이머를 발동시키는 함수입니다.[[BR]]
* lpTimeProc : CALLBACK함수의 이름을 넣습니다.
* dwUser : CALLBACK함수에 전달할 인자를 넣습니다.
* TIME_ONESHOT : CALLBACK함수가 딱 한번만 실행됩니다.
* TIME_PERIODIC : uDelay시간이 지날 때마다 CALLBACK함수가 실행됩니다.
타이머로 불러내어 직접 실행되는 함수부분입니다[[BR]]
* dwUser : timeSetEvent 함수의 dwUser값이 넘어옵니다.
* 이것은 콜백 함수라서 전역 변수로 해야된다네요. 굳이 클래스 안에 넣고 싶다면 static으로 선언해야 합니다.
CALLBACK 함수를 전역으로 선언한 경우
* 콜백 함수를 정의한것입니다. 콜백 함수내에서는 복잡한 일은 하지 않는게 정신건강에 좋다고 합니다.[[BR]]
// 메인 윈도우의 포인터를 얻어와서
CALLBACK 함수를 클래스 함수로 선언한 경우[[BR]]
클래스 선언시 timeproc함수는 static 으로 선언해야 합니다.
* CALLBACK 함수는 클래스 내에서 선언 될 경우에는 static으로 선언 되어야합니다.
* this는 이 클래스 인스턴스의 값을 넘겨줍니다. 클래스 내부 함수로 선언했을 경우네는 중요한 인자값입니다.
pDlg를 통해서 원래 클래스의 모든 메소드와 변수를 사용할 수 있습니다.
* CALLBACK 함수를 사용할때의 주의점. (in MSDN)[[BR]]
- 어플리케이션은 콜백 함수 내부로부터 다음 함수를 제외하고는 시스템 정의 함수를 부를 수가 없다. : PostMessage, timeGetSystemTime, timeGetTime, timeSetEvent, timeKillEvent, midiOutShortMsg, midiOutLongMsg, and OutputDebugString.[[BR]]
왠만한 함수들은 Callback함수 내에서 부르면 안됩니다.
- Gof/Facade . . . . 33 matches
예를 들기 위해, 어플리케이션에게 컴파일러 서브시스템을 제공해주는 프로그래밍 환경이 있다고 하자. 이 서브시스템은 컴파일러를 구현하는 Scanner, Parser, ProgramNode, BytecodeStream, 그리고 ProgramNodeBuilder 클래스를 포함하고 있다. 몇몇 특수화된 어플리케이션은 이러한 클래스들을 직접적으로 접근할 필요가 있을 것이다. 하지만, 대부분의 컴파일러 시스템을 이용하는 클라이언트들은 일반적으로 구문분석(Parsing)이나 코드 변환 (Code generation) 의 세부적인 부분에 대해 신경쓸 필요가 없다.(그들은 단지 약간의 코드를 컴파일하기 원할뿐이지 다른 강력한 기능을 알 필요가 없다.) 그러한 클라이언트들에게는 컴파일러 서브시스템의 강력하지만 저급레벨인 인터페이스는 단지 그들의 작업을 복잡하게 만들 뿐이다.
이러한 클래스들로부터 클라이언트들을 보호할 수 있는 고급레벨의 인터페이스를 제공하기 위해 컴파일러 서브시스템은 facade 로서 Compiler class를 포함한다. 이러한 클래스는 컴파일러의 각 기능성들에 대한 단일한 인터페이스를 정의한다. Compiler class는 facade (원래의 단어 뜻은 건물의 전면. 외관, 겉보기..) 로서 작용한다. Compiler class는 클라이언트들에게 컴파일러 서브시스템에 대한 단일하고 단순한 인터페이스를 제공한다. Compiler class는 컴파일러의 각 기능들을 구현한 클래스들을 완벽하게 은폐시키지 않고, 하나의 클래스에 포함시켜서 붙인다. 컴파일러 facade 는저급레벨의 기능들의 은폐없이 대부분의 프로그래머들에게 편리성을 제공한다.
* 복잡한 서브 시스템에 대해 단순한 인터페이스를 제공하기 원할때. 서브시스템은 종종 시스템들이 발전되어나가면서 더욱 복잡성을 띄게 된다. 대부분의 패턴들은 패턴이 적용된 결과로 많고 작은 클래스들이 되게 한다. 패턴의 적용은 서브시스템들이 더 재사용가능하고 커스터마이즈하기 쉽게 하지만, 커스터마이즈할 필요가 없는 클라이언트들이 사용하기 어렵게 만든다. Facade는 서브시스템에 대한 단순하고 기본적인 시각을 제공한다. 이러한 시각은 대부분의 클라이언트들에게 충분하다. 커스터마이즈가 필요한 클라이언트들에게만이 facade를 넘어서 볼 필요가 있는 것이다.
* 클라이언트들과 추상 클래스들의 구현 사이에는 많은 의존성이 있다. 클라이언트와 서브시스템 사이를 분리시키기 위해 facade를 도입하라. 그러함으로서 서브클래스의 독립성과 Portability를 증진시킨다.
- 각 서브시스템 클래스는 각 요청에 대한 책임이 있다.
3. 그러하면서도 어플리케이션은 여전히 서스시스템 클래스들을 사용할 방법을 제공한다. 사용의 편리성과 일반성을 선택할 수 있다.
클라이언트와 서브시스템간의 연결관계는 Facade를 추상클래스로 만듬으로서 줄일 수 있다.
그러면 클라이언트는 추상 Facade class의 인터페이스를 통해 서브시스템과 대화할 수 있다. 이러한 추상클래스와의 연결은 클라이언트가 사용할 서브시스템의 구현을 알아야 하는 필요성을 없애준다.
2. public vs private 서브시스템 클래스.
서브시스템은 인터페이스를 가진다는 점과 무엇인가를 (클래스는 state와 operation을 캡슐화하는 반면, 서브시스템은 classes를 캡슐화한다.) 캡슐화한다는 점에서 class 와 비슷하다. class 에서 public 과 private interface를 생각하듯이 우리는 서브시스템에서 public 과 private interface 에 대해 생각할 수 있다.
서브시스템으로의 public interface는 모든 클라이언트들이 접속가능한 클래스들로 구성되며. 이때 서브시스템으로의 private interface는 단지 서브시스템의 확장자들을 위한 인터페이스이다. 따라서 facade class는 public interface의 일부이다. 하지만, 유일한 일부인 것은 아니다. 다른 서브시스템 클래스들 역시 대게 public interface이다. 예를 들자면, 컴파일러 서브시스템의 Parser class나 Scanner class들은 public interface의 일부이다.
서브시스템 클래스를 private 로 만드는 것은 유용하지만, 일부의 OOP Language가 지원한다. C++과 Smalltalk 는 전통적으로 class에 대한 namespace를 global하게 가진다. 하지만 최근에 C++ 표준회의에서 namespace가 추가됨으로서 [Str94], public 서브시스템 클래스를 노출시킬 수 있게 되었다.[Str94] (충돌의 여지를 줄였다는 편이 맞을듯..)
Compiler 서브시스템은 BytecodeStream 클래스를 정의한다. 이 클래스는 Bytecode 객체의 스트림부를 구현한다. Bytecode 객체는 머신코드를 구체화하는 bytecode를 캡슐화한다. 서브시스템은 또한 Token 클래스를 정의하는데, Token 객체는 프로그램 언어내의 token들을 캡슐화한다.
Scanner 클래스는 character 스트림을 얻어서 token의 스트림을 만든다.
Parser 클래스는 Scanner의 token로 parse tree를 구축하기 위해 ProgramNodeBuilder 를 사용한다.
Parser는 점진적으로 parse tree를 만들기 위해 ProgramNodeBuilder 를 호출한다. 이 클래스들은 Builder pattern에 따라 상호작용한다.
우리가 토론해온 클래스들은 곧 Compiler 서브시스템을 이룰 것이다. 자 이제 우리는 이 모든 조각들을 함께 묶은 facade 인 Compiler 클래스를 소개할 것이다. Compiler는 소스 컴파일과 특정 machine에 대한 코드변환기능에 대한 단순한 인터페이스를 제공한다.
이 구현에서는 사용하려는 code-generator의 형태에 대해서 hard-codes (직접 특정형태 부분을 추상화시키지 않고 바로 입력)를 했다. 그렇게 함으로서 프로그래머는 목적이 되는 아키텍처로 구체화시키도록 요구받지 않는다. 만일 목적이 되는 아키텍처가 단 하나라면 그것은 아마 이성적인 판단일 것이다. 만일 그러한 경우가 아니라면 우리는 Compiler 의 constructor 에 CodeGenerator 를 인자로 추가하기 원할 것이다. 그러면 프로그래머는 Compiler를 instance화 할때 사용할 generator를 구체화할 수 있다. Compiler facade는 또한 Scanner나 ProgramNodeBuilder 등의 다른 협동하는 서브시스템클래스를 인자화할 수 있다. 그것은 유연성을 증가시키지만, 또한 일반적인 사용형태에 대해 인터페이스의 단순함을 제공하는 Facade pattern의 의의를 떨어뜨린다.
AbstactFactory 는 Facade구현시 서브시스템 독립적인 방법으로 서브시스템 객체를 만들 수 있는 인터페이스를 제공하기 위해 사용한다. Abstract Factory는 또한 플랫폼 비독립적 클래스를 감추기 위해 Facade의 대안으로서 사용할 수 있다.
Mediator 는 존재하는 class들의 기능들을 추상화시킨다는 점에서 Facade와 비슷하다. 하지만 Mediator의 목적은 정해지지 않은 동료클래스간의 통신을 추상화시키고, 해당 동료클래스군 어디에도 포함되지 않는 기능들을 중앙으로 모은다. Mediator의 동료클래스들은 Mediator에 대한 정보를 가지며 서로 직접적으로 통신하는 대신 mediator를 통해 통신한다. 대조적으로 facade는 단지 서브시스템들을 사용하기 편하게 하기 위해서 서브시스템들의 인터페이스를 추상화시킬 뿐이다. facade는 새로운 기능을 새로 정의하지 않으며, 서브시스템 클래스는 facade에 대한 정보를 가질 필요가 없다.
- Android/WallpaperChanger . . . . 32 matches
* WallpaperManager 클래스를 통해 할수 있더라
* 액티비티 클래스
* 서비스 클래스
내부 클래스와 함께 패키지 범위를 사용하라
안드로이드에서는 나쁜 생각입니다. 가상 메소드 호출은 인스턴스 필드 참조보다 더 비용이 높습니다. 일반적인 객체 지향 프로그래밍 관습에 따르거나, 공용 인터페이스에서 getter, setter을 가지는 것은 이치에 맞습니다. 그러나 클래스 내부에서는 언제나 직접적으로 필드 접근을 해야합니다.
(멤버 변수라는 것을 명확히 하기 위해 명시적인 "this"를 사용하고 있습니다.)
mScrollBar 멤버 필드에 네 개의 분리된 참조가 있습니다. 지역 스택 변수로 mScrollBar를 캐싱 함으로써, 네 개의 멤버 필드 참조가 더욱 효율적인 네 개의 스택 변수 참조로 바뀌었습니다.
클래스의 상단에 있는 다음 선언을 고려해 봅시다:
컴파일러는 클래스가 처음 사용될 때 실행하게 되는 <clinit>라 불리는 '클래스 초기화 메소드'를 생성합니다. 이 메소드가 intVal에 42 값을 저장하고, strVal에는 클래스파일 문자 상수 테이블로부터 참조를 추출하여 저장합니다. 나중에 참조될 때 이 값들은 필드 참조로 접근됩니다.
클래스는 더이상 <clinit> 메소드를 필요로 하지 않습니다. 왜냐하면 상수들은 VM에 의해 직접적으로 다루어 지는 '클래스파일 정적 필드 초기자'에 들어가기 때문입니다.intVal의 코드 접근은 직접적으로 정수 값 42를 사용할 것이고, strVal로의 접근은 필드 참조보다 상대적으로 저렴한 "문자열 상수" 명령을 사용하게 될 것입니다.
"final"으로 메소드나 클래스의 선언을 하는 것은 즉각적인 성능 이득을 주지는 못하지만, 특정한 최적화를 가능하게 합니다. 예를 들어, 컴파일러가 서브클래스에 의해 오버라이드될 수 없는 "getter"메소드를 알고 있다면, 메소드 호출을 inline화 할 수 있습니다.
여러분은 또한 지역 변수를 final로 선언할 수 있습니다. 하지만 이것은 결정적인 성능 이득은 없습니다. 지역 변수에는 오직 코드를 명확히 하기 위해서 "final"을 사용합니다 (또는 예를 들어 익명 내부 클래스를 사용해야 한다면 가능).
900 바이트의 클래스 파일 (Foo$Shrubbery.class) 로 변환됩니다. 처음 사용할 때, 클래스 초기자는 각각의 열거화된 값들을 표기화 하는 객체상의 <init>메소드를 호출합니다. 각 객체는 정적 필드를 가지게 되고 총 셋은 배열("$VALUES"라 불리는 정적 필드)에 저장됩니다. 단지 세 개의 정수를 위해 많은 코드와 데이터를 필요로 하게 됩니다.
내부 클래스와 함께 패키지 범위를 사용하라
다음 클래스 정의를 고려해 봅시다:
여기서 주목해야 할 중요한 것은, 외부 클래스의 private 메소드와 private 인스턴스 필드에 직접 접근하고 있는 내부 클래스(Foo$Inner)를 정의했다는 것입니다. 이것은 적법하고, 코드는 기대했던 대로 "Value is 27"을 출력합니다.
문제는 Foo$Inner는 기술적으로는 (비밀로써) 완전히 분리된, Foo의 private 멤버로 직접적인 접근을 하는 것은 적법하지 못한 클래스라는 것 입니다. 이 차이를 연결짓기 위해, 컴파일러는 두 개의 합성 메소드를 만듭니다:
내부 클래스 코드는 외부 클래스에 있는 "mValue" 필드에 접근하거나 "doStuff" 메소드를 부르기 위해 이 정적 메소드를 부릅니다. 이것은 이 코드가 결국은 직접적인 방법 대신 접근자 메소드를 통해 멤버 필드에 접근하고 있다는 것을 뜻합니다. 이전에 우리는 어째서 접근자가 직접적인 필드 접근보다 느린지에 대해 이야기 했었는데, 이 문제로서 "보이지 않는" 성능 타격 측면에서 특정 언어의 어법이 야기하게 되는 문제에 대한 예제가 될 수 있겠습니다.
이 문제는 내부 클래스가 접근하는 필드와 메소드 선언에 private 범위가 아닌 package 범위를 가지도록 함으로써 피할 수 있습니다. 이로써 더욱 빠르게 동작하게 되고 자동 생성되는 메소드에 의한 오버헤드를 제거할 수 있습니다. (불운하게도 이 또한 직접적으로 같은 패키지 내의 다른 클래스들이 필드들에 접근할 수 있다는 것을 뜻하게 되며, 모든 필드들은 private로 해야 한다는 표준적인 OO 관습에 거스르게 됩니다. 다시 한번 더 말하자면, 공용 API를 설계하게 된다면 이 최적화를 사용하는 것을 조심스럽게 고민해야만 할 것입니다.)
우리의 몇 가지 아이디어를 설명하기 위해, 약간의 기초적인 행동들에 대해 대략적인 실행시간을 나열한 테이블을 만들었습니다. 이 값들은 절대적인 숫자가 아니라는 것을 주목해 주십시오: CPU시간과 실제 구동 시간의 조합이고, 시스템의 성능 향상에 따라 변화할 수 있습니다. 그러나 이 값들 사이에 관계를 적용해 보는 것은 주목할 만한 가치가 있습니다 — 예를 들어, 멤버 변수를 더하는 것은 지역 변수를 더하는 것보다 대략 네 배가 걸립니다.
- MFC/CollectionClass . . . . 32 matches
MFC에서 제공하는 컬렉션을 다루는 클래스는 그 형태에 따라서 크게 3가지로 구분할 수 있다.
''두가지 형태로 구현되어있다. 첫번째는 함수템플릿을 이용한 형태로 구현되어있고, 두번째는 템플릿을 사용하지 않는 방법으로 옛 버전의 VC++에서 부터 사용되어온 방식이다. 현재는 템플릿을 이용한 방법을 사용하는 것이 좋다.''
객체들의 컬렉션은 CArray, CList, CMap 템플릿 클래스들에 의해서 지원된다. 객체 포인터의 컬렉션은 {{{~cpp CTypedPtrArray, CTypedPtrList, CTypedPtrMap}}} 클래스들에 의해서 지원된다.
객체의 컬렉션을 정의하는 템플릿 클래스는 MFC의 CObject클래스에서 파생된다. 이런 템플릿 클래스는 기본 데이터 형식이나 사용자가 정의한 클래스, 구조체를 포함한 어떠한 종류의 객체도 저장, 관리하는 것이 가능하다. 이런 클래스들은 내부적으로 복사를 하기 때문에 복사생성자를 만들어야 한다.
첫번째 타입 인자는 저장될 요소의 타입을 말하며, 두번째 인자는 멤버함수가 사용하게될 인자를 말한다.
''{{{~cpp ConstructElements(), DestructElements()}}} 보조함수들은 객체를 삽입, 삭제하는 과정에서 쓰이는 보조 함수들이다.''
첫번째 타입 인자는 저장될 요소의 타입을 말하며, 두번째 인자는 멤버함수가 사용하게될 인자를 말한다.
두번ㅤㅉㅒㅤ 인자로쓰이는 참조형은 포인터형이나 일반 객체 타입으로 바꾸는 것도 가능하며, 이것은 프로그래머의 의도에 따라 다르다.
''{{{~cpp ConstructElements(), DestructElements(), CompareElements()}}} 보조함수들은 객체를 삽입, 삭제, 검색하는 과정에서 쓰이는 보조 함수들이다.''
첫번째 인자는 기본 포인터 리스트 클래스인 CObList, CPtrList중에서 선택. CObList는 CObject의 파생 클래스를, CPtrList는 void*형의 포인터들의 리스트를 지원한다.
''제공되는 멤버 함수들은 CList에 의해서 제공되는 것들과 거의 비슷하며, 연산이 포인터에 대해서 행해진다는 것은 다른 점이다.''
|| {{{~cpp GetHead()}}} || 리스트의 가장 앞에있는 포인터를 리턴. IsEmpty() 검사 필요. ||
|| {{{~cpp GetTail()}}} || 리스트의 끝에 존재하는 포인터를 리턴. IsEmpty() 검사 필요. ||
|| {{{~cpp RemoveHead()}}} || 리스트의 가장 앞에 있는 포인터를 삭제. IsEmpty() 검사 필요. ||
|| {{{~cpp RemoveTail()}}} || 리스트의 가장 끝에 있는 포인터를 삭제. IsEmpty() 검사 필요. ||
|| {{{~cpp GetNext(POSITION)}}} || 레퍼런스 인수로 전달된 POSITION형식의 변수가 가ㅤㄹㅣㅋ미는 위치에 있는 포인터를 리턴한다. 끝에 도달하면 POSITION은 NULL로 할당. ||
''CTypedPtrList의 기본 클래스인 CObList로 부터 상속받은 것들''
- MFC/Serialize . . . . 31 matches
MFC의 document 는 간단한 클래스가 아니다. 이 클래스는 일반적으로 다양한 객체들을 포함한다.
CXXXDoc 클래스의 객체가 시리얼화 입력과정동안 응용 프로그램을 통해 동적으로 생성될 수 있도록 한다. IMPLEMENT_DYNCREATE와 매치. 이 매크로는 CObject 에서 파생된 클래스에만 적용된다. 따라서 직렬화를 하려면 클래스는 직접적이든 간접적이든 CObject의 Derived Class 여야한다.
기본 클래스로부터 상속된 멤버들을 포함하여 CXXXDoc객체가 적절하게 동적으로 생성될 수 있도록 하는데 필요한 것이다.
클래스의 데이터 멤버들을 직렬화하는 역할
MFC기반의 스트림을 제공하는 클래스이다. 객체들을 파일에 출력하거나, 그것을 입력 스트립으로서 복구하는 스티리밍에 대한 메커니즘을 제공한다.
클래스 안에는 CFile 객체가 있으며, CArchive는 실제로 이 클래스를 통해서 파일 입출력을 전담시킨다.
= 클래스에 직렬화 기능 추가 =
매크로는 클래스의 이름을 인수로 받는다. 따라서 만약 CExample 에 직렬화 기능을 추가한다면 CExample 의 정의부의 내부 어느 곳에서나
구현 파일에 넣어야할 IMPLEMENT_SERIAL()는 3가지의 인수를 취한다. 첫번재는 이름, 두번재는 바로 윗 단계의 기본 클래스, 프로그램에 대한 스키마 번호(scheme number), 혹은 버전을 나타내는 부호 없는 32비트 정수를 인자로 받는다.
이후에 클래스 정의를 수정한다면 스키마 번호를 바꾸어야 한다. (다른 버전의 파일을 읽으려 하면 예외를 발생시킨다.
만약 CExampleDerived 가 CExample의 자식 클래스인데 이 클래스를 직렬화 하기위해서는 모든 중간 단계의 클래스 수준에서 직렬화가 구현되어야 한다.
직렬화는 CDocument 객체에서 Serialize() 이벤트가 발생하게 되면 내부에 지정된 모든 멤버 변수들에게 Serialize 메시지를 보내서 결국엔 기본형의 데이터를 <<. >>와 같은 기 지정된 오버라이딩 함수를 통해서 처리하는 방식으로 이루어져있다.
* 클래스가 CObject 의 자식 클래스 인지 확인하라.
* DECLARE_SERIAL() 매크로를 추가하라. 만약 바로 상위의 클래스가 CObject 가 아니라면 바로 상위의 클래스에 추가하라)
* Serialize() 함수를 클래스의 멤버 함수로 선언하라.
* IMPLEMENT_SERIAL() 매크로를 클래스 구현을 포함하고 있는 파일에 추가하라.
* 클래스에대한 Serialize()를 구현하라.
- AcceleratedC++/Chapter8 . . . . 29 matches
WikiPedia:Generic_function : 함수를 호출하기 전까지는 그 함수의 매개변수 타입이 무엇인지 알 수 없는 함수.
WikiPedia:Generic_function : 함수의 호출시 인자 타입이나 리턴타입을 사용자가 알 수없다. ex)find(B,E,D)
함수의 호출시 함수의 매개변수를 operand로 하여 행해지는 operator의 유효성을 컴파일러가 조사. 사용 가능성을 판단
그렇다면 어떻게 함수가 어떠한 자료구조를 만족 시키는지 판단할 수 있는가?
반복자를 생각해보자. 만약 특정 자료구조가 반복자를 리턴하는 멤버함수를 갖는 다면 반복자를 인자로 받는 function들에 대해서 그 자료구조는 유효하다고 판단할 수 있다.
template <class T> // type 매개변수의 지정, 이 함수의 scope안에서는 데이터 형을 대신한다.
실제 컴파일시 컴파일러는 프로그래머가 지정한 타입으로 이 함수를 인스턴스화 시켜서 생성하고 바인딩한다.
typename 은 아직 인스턴스화 되지 않은 함수를 컴파일러가 읽어들일때 타입 매개변수와 관계된 타입의 형을 생성할때 앞에 붙여야 하는 키워드 임. ex) vector<T> or vector<T>::size_type
STL은 실제로 함수의 인스턴스화에 관한 표준적인 방식을 제정하지 않았다. 따라서 각 컴파일러마다 서로 다른 방식으로 함수를 인스턴스화한다. 따라서 자신의 컴파일러의 특징을 파악하는 노력이 필요.
=== 8.1.3 제네릭 함수와 타입 ===
실제 제네릭 함수의 사용에서 가장 문제시 되는 것은 함수내부의 연산을 매개변수 타입이 지원을 하는 가이다.
'''max 함수의 구현'''
|| find(c.begin(), c.end(), val) || 일반적인 함수의 작성 가능. 반복자를 통해서 반복자가 제공하는 방식으로 동작가능 ||
* 1의 방식으로 작성된 함수으이 rbegin() 같은 템플릿 멤버 함수를 이용해서 역순 검색도 가능하게 작성된다.
STL 함수를 보면 인자로 받는 반복자(iterator)에 따라서 컨테이너의 함수 사용 유효성을 알 수 있다.
예를 들자면 find(B, E, D)같은 함수의 경우 ''아주 단순한 제한적 연산만을 이용''하기 때문에 대부분의 컨테이너에 대해서 사용이 가능하다. 그러나 sort(B, E)같은 경우에는 ''기본적인 사칙연산들을 반복자에 대해서 사용''하기 때문에 이런 연산을 지원하는 string, vector 만이 완벽하게 지원된다.
상기 2개의 구현 모두 begin, end iterator를 순차적으로 접근하고 있음을 알 수 있다. 상기의 함수를 통해서 순차 읽기-전용의 반복자는 '''++(전,후위), ==, !=, *'''를 지원해야한다는 것을 알 수 있다. 덧 붙여서 '''->, .'''와 같은 멤버 참조 연산자도 필요로하다. (7.2절에 사용했떤 연산자이다.)
class In 형의 반복자는 함수가 진행되는 동안 반복자를 통해서 읽기 연산만을 수행한다. class Out 형의 반복자는 *dest++ = *begin++; 의 연산을 통해서 쓰기 연산을 수행한다. 따라서 class Out 반복자는 '''++(전,후위). =''' 연산자만을 평가할수 있으면 된다.
순방향 연산자의 모든 연산을 지원하고 '''--'''연산을 지원한다면 이 반복자는 '''양방향 반복자(bidirection iterator)''' 라고 부른다. 표준 라이브러리 컨테이너 클래스들은 모두 양방향 반복자를 지원함.
- Gof/AbstractFactory . . . . 29 matches
구체적인 클래스를 정의하지 않고서, 연관되거나 의존적인 객체집합을 만들수 있는 인터페이스를 제공한다.
유저인터페이스 툴킷은 다양한 ["룩앤필"] 기준을 제공하도록 고려한다. 다른 룩앤필은 스크롤바, 윈도우, 그리고 버튼처럼 다른 모습과 행동양식의 유저 인터페이스 ["Widget"]을 제공한다. 이식가능한 룩앤필 기준을 위해서는, 개별적 룩앤필 Widget을 위한 어떤 애플리케이션은 ["하드-코드"] 가 아니어야 한다. 즉석으로 정의한 룩앤필 클래스는 나중에 룩앤필을 바꾸기 어렵게 만든다.
이 문제는 기본적인 Widget의 인터페이스를 정의한 abstract WidgetFactory 클래스를 정의함으로써 해결할 수 있다. 또한 모든 종류의 Widget에는 추상클래스가 존재한다, 그리고 구체적인 서브 클래스는 Widget을 상속해서 룩앤필 기본을 정의한다. WidgetFactory의 인터페이스는 각각의 추상 Widget 클래스의 새로운 객체를 반환하는 기능을 가지고 있다. 클라이언트는 이런 기능을 수행해서 Widget 인스턴스를 만든다. 그러나 클라이언트는 사용하는 클래스의 구체적인 내용에 대해서는 신경쓰지 않는다. 이처럼 클라이언트는 일반적인(?) 룩앤필의 독립성에 의존한다.
각각의 룩앤필에는 해당하는 WidgetFactory의 서브클래스가 있다. 각각의 서브클래스는 해당 룩앤필의 고유한 widget을 생성할 수 있는 기능이 있다. 예를 들면, MotifWidgetFactory의 CreateScrollBar는 Motif 스크롤바 인스턴스를 생성하고 반환한다, 이 수행이 일어날 동안 PMWidgetFactory 상에서 Presentation Manager 를 위한 스크롤바를 반환한다. 클라이언트는 WidgetFactory 인터페이스를 통해 개개의 룩앤필에 해당한는 클래스에 대한 정보 없이 혼자서 widget들을 생성하게 된다. 달리 말하자면, 클라이언트는 개개의 구체적인 클래스가 아닌 추상클래스에 의해 정의된 인터페이스에 일임하기만 하면 된다는 뜻이다.
또한 WidgetFactory는 widget 클래스 간의 의존관계를 형성한다. Motif 스크롤바는 Motif 버튼과 Motif 텍스트 에디터와 함께 사용되어야 한다, 그리고 MotifWidgetFactory를 사용함으로써 이러한 의존성이 강제적으로 이루어지게 된다.
* 클래스 라이브러리를 나누고 싶고, 인터페이스만을 드러내되, 클래스의 동작을 보이지 않고자 할 때.
* AbstractFactory에 의해서 정의된 인터페이스와 AbstractProduct 클래스만을 사용한다.
* 보통의 경우 ConcreteFactory 클래스의 단일 인스턴스는 수행시간(run-time)중에 생성된다.
* AbstractFactory는 객체(ProductObject)의 생성을 ConcreteFactory의 서브 클래스에 위임한다.
1. ''독립적인 concrete 클래스들.'' Abstract Factory 패턴은 어플리케이션이 생성한 오브젝트의 클래스를 조정할 수 있도록 해준다.
factory가 객체를 만들어 내는데 대한 수행과 책임을 캡슐화 하기 때문에 상속한 클래스로부터 클라이언트가 독립적일 수 있다.
클라이언트는 추상 인터페이스를 통해서 인스턴스를 다룬다. concrete facoty의 수행에서 산물의 클래스 이름은 차단되어있다.
2. ''산물의 집합간에 전환을 쉽게 해준다.'' concrete factory의 클래스는 어플리케이션에 단 한번, 선언될 때만 쓰인다.
(AbstractFactory 클래스와 모든 서브 클래스들을 바꾸는것을 포함해서). Implementation 부분에서 이것에 대한 한가지 해결점에 대해 논의 할 것이다.
InterViews 는 AbstractFactory 클래스들을 나타내기 위해서 'Kit'를 접미사로 사용한다. 이것은 WidgetKit과 DialogKit abstract factory 들을 명확한 ["룩앤필"] UI 객체를 위해서 정의한다. InterViews는 또한 서로 다른 복합 객체를 생성하는 LayoutKit 을 포함다. 예를 들면, 어떤 layout은 문서의 방향(인물이나 풍경)에 따른 서로 다른 복합 객체를 개념적으로 정렬한다.
ET++[WGM88]은 다른 윈도우 시스템(예를 들면, X Windows 와 SunViews)간의 호환을 수행하기 위해서 Abstract Factory 패턴을 사용했다. 윈도우 시스템의 추상 base 클래스는 윈도우시스템의 자원 객체(예를 들면, MakeWindow, MakeFont, MakeColor)를 생성할 수 있는 인터페이스를 정의한다. Concrete 서브 클래스는 특정 윈도우 시스템에 인터페이스를 수행한다.
수행시간에, ET++ 은 concrete 윈도우시스템 서브클래스(concrete 시스템 자원 객체를 생성하는)의 인스턴스를 생성한당=== Related Patterns ===
- AcceleratedC++/Chapter4 . . . . 28 matches
3장까지 봤던 것은 첫번째것만 있고, 나머지 것은 없다. 프로그램이 작을때는 별로 상관없지만, 커지기 시작하면서부터 2,3번째 것이 결여되면, 나중엔 제어가 불가능해진다. C++에서는 다른 언어와 마찬가지로 함수 + 자료구조를 제공함으로써, 프로그램을 구조화시킬수 있는 방법을 제공한다. 또한 함수 + 자료구조를 묶어서 가지고 놀 수 있는 class라는 도구를 제공해준다.(Chapter9부터 자세히 살펴본다.)
* 3장까지의 프로그램을 보면 등급을 메기는 부분이 있다. 이 부분을 함수로 추출해보자. 함수로 추출함으로써, 나중에 똑같은 내용을 또 코딩할 필요가 없고, 알아보기도 쉬워진다. 또한 등급 메기는 방법을 바꿀때 그 함수 부분에만 문제를 한정지을 수가 있다. 또한 함수에 이름을 지어줌으로써, 더욱 추상화시킬수가 있게 된다.
이렇게 생겼다. 둘째줄의 등급 계산하는 부분을 다음과 같이 함수로 뽑아낼 수가 있다.
* 함수 만드는 법을 요약해보자면
return_type function_name(parameter lists...) { 함수 내에서 할 일들 }
* 함수를 호출할때에는 함수를 만들때 주어졌던 parameter lists를 충족시키는 값들을 넣어줘야 한다. 물론 순서도 맞춰줘야 한다. arguments라고도 한다. arguments는 식이 될수도 있다. 그 뒤에 함수로 넘어간 parameter들은 함수 내에서 지역 변수(함수가 끝나면 소멸되는)처럼 작동하게 된다. 즉 그 값들을 복사하게 되는 것이다. 이를 call by value라 한다.
* 앞에서 우리는 vector에 들어가 있는 값에서 중간값 찾는 걸 했었다. Chapter8에서는 vector에 들어가 있는 type에 관계없이 작동하게 하는 법을 배울 것이다. 지금은 vector<double>로만 한정짓자. median 구하는 루틴을 함수로 빼보자.
* 또한, 아까 함수 호출하면서 parameter로 넘겨줄때에는 그 값을 복사를 한다고 했다. 저렇게 함수를 호출함으로써, 원래 vector를 손상시키지 않고, 복사본 vector에서 sort를 해서 작업을 처리해 줄수가 있다. 비록 시간이 좀 더 걸리긴 하지만..
* 이쯤 와서 함수의 유용함을 알았다면, 우리의 성적 매기는 방법을 따로 함수로 뽑아내고 싶을 것이다. 다음 예제를 보자.
* grade() function : 우리는 아까 grade라는 함수를 만들었었다. 그런데 이번에 이름은 같으면서 parameter는 조금 다른 grade()를 또 만들었다. 이런게 가능한가? 가능하다. 이러한 것을 함수의 overloading이라고 한다. 함수 호출할때 어떤게 호출될까는 따라가는 parameter lists에 의해 결정된다.
* 지금까지 만든 세개의 함수 median, grade, read_hw 를 살펴보자.
* median 함수를 보면, vector<double> 파라메터가 참조로 넘어가지 않는다. 학생수가 많아질수록 매우 큰 객체가 될텐데 낭비가 아닌가? 하고 생각할수도 있지만, 어쩔수 없다. 함수 내부에서 소팅을 해버리기 때문에 참조로 넘기면, 컨테이너의 상태가 변해버린다.
* grade 함수를 보면, vector는 const 참조로 넘기고, double은 그렇지 않다. int나 double같은 기본형은 크기가 작기 때문에, 그냥 복사로 넘겨도 충분히 빠르다. 뭐 값을 변경해야 할때라면 참조로 넘겨야겠지만... const 참조는 가장 일반적인 전달방식이다.
* read_hw 함수를 보면, 복사는 하지 않고, 그 값을 변경하기 위해 참조만 썼다.
* 학생의 데이터를 묶어 보자. 여기서 struct란 새로운 구문이 나온다. {}안에 멤버로 넣고 싶은 변수들을 쫙 써주면 된다. 접근할라면 . 써주고 변수 쓰면 된다.
- ProjectPrometheus/Journey . . . . 28 matches
* Recommender 구현중 User 클래스의 구현
* 도서관은 303건 초과 리스트를 한꺼번에 요청시에는 자체적으로 검색리스트 데이터를 보내지 않는다. 과거 cgi분석시 maxdisp 인자에 많이 넣을수 있다고 들었던 선입견이 결과 예측에 작용한것 같다. 초기에는 local 서버의 Java JDK쪽에서 자료를 받는 버퍼상의 한계 문제인줄 알았는데, 테스트 작성, Web에서 수작업 테스트 결과 알게 되었다. 관련 클래스 SearchListExtractorRemoteTest )
서버쪽 클래스들에 대해서 Refactoring 을 시도 데이터클래스이면서 그 용도가 조금씩 달랐던 클래스들을 하나로 묶었다. (일단 모여해쳐 시도용으로) 그러면서 안쓰는 클래스들을 조금씩 지워나갔다. 패키지들중 Test 패키지와 메인 소스 패키지, 임시 코드 패키지들에 대해서 화일들을 옮기고 정리했다. 아직 완벽하게 정리된것 같진 않지만, 개인적으로는 이전에 비해 만족스러웠다. (이제 Target은 Resin 쪽과 임시소스들 디렉토리.)
["Jython"] 의 편리함을 깨닫았다. Java 의 클래스들에 대해서 바로 Import 하여서 쓸 수 있다. 그리고 ["Python"] 에 있는 라이브러리들을 거의 그대로 이용할 수 있다. 단, 한글 문제로 걸림. AcceptanceTest 의 경우 ["Python"] 으로 작성함.
* ''돌아가는 환경의 기본 인코딩을 설정해주면 될 듯 함. Jython이 자바로된 클래스를 바로 쓴다니, Writer 객체를 얻을때 인코딩 설정을 해주면, 해당 Writer로 빠져나가는 내용은 설정된 인코딩을 적용받음. 받아들일때도 마찬가지로, POST로 넘어온 값을 매번 인코딩 할수도 있겠지만, 그보다는, 시스템에 직접 명시해줘서 일괄적으로 바뀌는 방식을 추천함. 예를들자면, contentType="text/html; charset=euc-kr" 하는식으로 설정할 경우, 얻어오는 값들은 euc-kr로 인코딩된 값을 얻어올 수 있음. --이선우''
* HTML 문서 가져오는 클래스 (Spider) 작성
암튼, 이후 다시 코드 구축 방법에 대해서 일단 이야기를 하였고, (여기서는 일단 서로 합의하에 ["1002"] 스타일 식으로 진행했다. 해당 클래스가 이용되어지는 모습을 먼저 생각하고, 시나리오에 따른 코드의 뼈대를 만들어가는 방식) 그 이후로는 오히려 진행이 빨라졌다.
Client (클래스 이용자) 는 Library 에게 keyword 를 던지며 검색을 요청하면, Library는 그 keyword를 이용, 검색하여 Client 에게 돌려준다.
즉, RDD 를 위한 CRC 세션중 계속 그 클래스들의 추상화 정도를 놓고 서로 클래스들을 추출해내는데 어려움을 겪었다. ('용어는 어느정도 추상화를 시켜야 할 것인가?', '내부 구현 시스템이 가급적이면 드러나지 않는 것이 일반적으로 좋은 디자인이라고 하는것 같은데 막상 우리가 BottomUp 을 하여 뽑아낸 디자인엔 이미 이름이 'HttpSpider' 등 이고..' 등등)
CRC가 잘 추출되지 않을때는 차라리 UserStory를 따라가면서 클래스를 만들고, 거기에서 다시 CRC를 생각해 보는 방법이 시간 절약에 현명할 것이라고 생각된다. 객체 지향 의 프로그래밍을 추구해온 결과, Scenario나, UserStory를 따라가며 코딩하면서 수많은 클래스들이 책임에 따라서 생겨나는 것을 보면서 자연 스러움과, 약간 의아함 마져 들었다.
왜냐면, 데블스 캠프 금요일 시간이 끝나고 나서 7층에서 석천이와 UserStory를 따라가며 만들어진 RandomWalk2 CRC의 모습에서는 단 3개만의 클래스만이 존재하였다. 하지만, UserStory를 따라가면서 소스 수준의 코딩을 하면 더 많은 클래스로 분화할것을 기대한다. 즉, 코딩을 하면 어쩔수없이 Layer의 최 하위까지 내려갈수 밖에 없으리라고 본다. 자 그럼 문제는 레이어 일것이다. 다행히 현재 코딩된 부분은 전부 logic의 부분으로 취급하고 있지만, logic 내에서 다시 레이어로 나뉘어서 외부에서 접근할수 있는 인자와 없는 인자로 나뉘어 져야 할것이다. 여기서 잠시 기억되는 말
* 소스 수준 코딩시 더 많은 클래스들이 분화되는 이유는 CRC 중 클래스와 클래스 간 대화를 할때 넘기는 객체를 따로 표시하지 않으니까. (우리가 7층에서의 RandomWalk2 보면 Class 와 Class 간 대화를 위한 클래스가 4개쯤 더 있음)
* 그렇다면 3개의 클래스는 구현수준으로 까지 내려왔던가? 어차피 parameter 로 나온 클래스 4개나 우리가 '책임을 맡았다' 라고 하는 클래스 3개나 그 표현수준은 똑같다고 생각하는데. --["1002"]
* 자칫 RDD 에서의 그 세부클래스들에 대해서 너무 많이 생각하면 BUFD(Big Up-Front Design) 이 되리라 생각한다. 차라리 Class 가 2개였을때 코딩 들어가고, 20-30분 정도 코딩뒤 ["Refactoring"] 을 의식적으로 하여 Big Class 에 대해 Extract Class 를 추구하는게 더 빠르지 않았을까.
즉, 앞의 디자인의 경우 JSP 페이지들의 네이밍에 Logic 디자인이 영향을 받았다고 할까. 뭐, 어차피 구현부분은 제대로 생각하지 않은 Conceptual Model 에 가까운 것이였지만, 후자의 경우 데이터 클래스와 그 책임을 맡은 클래스들이 더 명시적으로 드러났던것 같다. 전자의 경우도 '이 기능을 맡은 클래스야' 하면서 Responsibilty 식으로 접근하려고 노력했지만, 후자의 경우가 그 용어면에서 더 추상적이였다. (전자의 경우 그 이름이 시스템을 드러내려고 했다.)
- 새싹교실/2012/주먹밥 . . . . 28 matches
* 예약어 -> 예약어는 C의 시스템에서 미리 선점해놓은 단어를 의미합니다. 이것을 변수명이나 함수명으로 쓰면 안됩니다.
* 헤더 파일들에는 뭐가 들어가는지 한번 알아보았습니다. math.h에는 수학에 관련된 함수. time.h에는 시간 제어에 관련됨 함수를 사용했죠 .srand(time(NULL))이 왜 쓰이는 지는 아직 안알려주었답니다^.^
* 함수 : 사용자의 행동을 이름으로 추상화해서 계속 쓰는 반복을 줄여준다.
* 포인터 : 포인터변수는 32bit 버전 컴파일러에서 4byte 64bit 버전 컴파일러에서 8byte의 크기를 가집니다. 어떤타입이든 말이죠 (void *), (int *), (float *) 모두 말이에요. int *a는 4byte를 할당받고 a에는 '''주소값(address)'''을 가지게 됩니다. 포인터 (*)를 붙이게 되면 그 해당 주소가 가르키는 '''값'''을 찾아가게 되죠. int형 값말이에요 그러니까 4byte만 찾아오겠죠?
* 함수가 사용될떄 C는 기본적으로 Call-by-value를 사용합니다. 항상 값복사를 통해 변수의 값들을 전달하죠.
* 위와 같이 함수 추상화의 완성형은 Call-by-reference를 이용한 전달입니다. 잊지마세요!
* 함수의 추상화와 더불어 중요한건 함수의 목적에 따른 '''이름짓기(naming)'''입니다. 함수 이름을 보고 용도를 파악할 수 있어야되요!
* 구조체와 함수 - 구조체도 다른변수와 마찬가지로 Call-by-value와 Call-by-reference방식으로 넘기게 됩니다.
* 포인터와 함수와 구조체
* 함수형 포인터 설명 - 함수의 이름에는 주소값을 가지고 있어서 포인터로 제어할 수 있다.
* 함수는 변수가 남아도 실행이 된다?
* C++이라면 이미지를 그리는 객체를 Templete로 만들어서 paint()함수에 그래픽 *를 넘겨서 자기가 알아서 그리게하는것이 좋다. list에 넣고 for문만 돌리면 끝나니까
* 운영체제는 파일 시스템을 관리합니다. 관련해서 이번에 가르쳐주는것은 *(포인터:Pointer)관련해서 FILE 구조를 메모리 참조를 통해서 하는것을 알려주게 되었습니다. 파일(File)은 메모리주소로부터 시작되고 운영체제를 이를 관리하기 때문에 C에서 지원하는 라이브러리를 통해 운영체제로 부터 파일을 관리하는 정보를 가진 FILE 구조체를 불러오게 됩니다. 그래서 우리는 *를 통해 주소값을 따라가서 FILE구조체로 그 정보를 얻어오게 되죠. Good Good!
* 답변 : 객체 지향 프로그래밍(Object Oriented Programming)입니다. 프로그래밍 설계 기법이죠. 전에도 얘기했듯이 프로그래밍 설계 기법은 프로그래머의 설계를 도와 코드의 반복을 줄이고 유지보수성을 늘리는데 있습니다. 하지만 생산성이 있는 프로그래머가 되고싶다면 API를 쓰고 알고리즘을 병행해서 공부해야 된다는것을 알리고 싶습니다. 그리고 단순히 Class를 쓰는것과는 다른기법입니다. 객체 지향적으로 설계된 C++이나 Java에서 Class를 쓰기때문에 Class를 쓰는것이 객체지향으로 알고있는 사람들이 많습니다. 그건... 아니죠. 절차지향 프로그래밍과 다른점은 차차 가르쳐 드리겠습니다. C에서 Class란 개념이 설계상으로 발전했는지 알려드렸습니다. 함수 포인터와 구조체였죠. 그게 원형입니다.
* 함수포인터 질문 : int *compare(int a, int b), function call에 의한 stack(FILO : first in last out)의 내부 변화. int형 포인터는 int형으로 반환해야지?
* DIV태그안에 문자를 넣고 x,y좌표에 출력시키는 함수를 짜고싶다.
- Gof/Singleton . . . . 27 matches
클래스로 하여금 오직 하나의 인스턴스만을 가지게 하며, 어디서든지 접근 가능하도록 한다.
몇몇 클래스들에 대해서 오직 하나의 인스턴스 만을 가지는 것은 중요한 일이다. 예를 들면, 어떤 시스템에선 수많은 프린터들이 있더라도 거기에는 단 하나의 프린터 스플러만이 있어야 한다. OS에서 돌아가는 화일시스템이나 윈도우 매니저의 경우도 오직 하나여야 한다 (동시에 2-3개의 윈도우매니저가 돌진 않는다.) 디지털 필터의 경우에도 A/D converter는 단 하나를 가진다.
어떻게 우리는 클래스로 하여금 단 하나의 인스턴스만을 가지도록 보장해줄 수 있을까? 그리고 그러한 인스턴스를 쉽게 접근하게 할 수 있을 것인가? global 변수로 둘 경우 어디서든지 접근가능하겠지만, global 변수는 단일 인스턴스만을 가지도록 할 수 없다.
더 좋은 방법은 클래스 자신으로 하여금 자기자신의 단일 인스턴스를 유지하도록 만드는 것이다. 이 클래스는 인스턴스가 생성될 때 요청을 가로챔으로서 단일 인스턴스로 만들어지는 것은 보증한다. 또한, 인스턴스에 접근하는 방법도 제공한다. 이것이 바로 SingletonPattern이다.
* 클래스가 정확히 오직 하나의 인스턴스만이 존재해야 할 때. 그리고 잘 알려진 엑세스 방법으로 어디서든지 접근 할 수 있어야 한다.
* Instance operation (클래스의 메소드)을 정의한다. Instance 는 클라이언트에게 해당 Singleton의 유일한 인스턴스를 접근할 수 있도록 해준다.
1. 클래스에 대한 접근이 오직 하나의 인스턴스에게로 제한된다. Singleton 클래스는 자기 자신의 단일 인스턴스를 캡슐화하기 때문에, 클라이언트가 언제, 어떻게 접근하던지 그 접근이 엄격하게 제어된다.
3. 명령어와 표현을 확장시킬 수 있다. Singleton class는 subclass될 수 있고, 이 확장된 클래스의 인스턴스를 가지고 어플리케이션을 설정하는 것은 쉽다. run-time중에 필요한 경우에도 가능하다.
5. class operation 보다 더 유연하다. 패키지에서 Singleton의 기능을 수행하기위한 또다른 방법은 class operation들을 사용하는 것이다. (C++에서의 static 함수나 Smalltalk에서의 class method 등등) 하지만, 이러한 언어적인 테크닉들은 여러개의 인스턴스를 허용하는 디자인으로 바꾸기 힘들어진다. 게다가 C++에서의 static method는 virtual이 될 수 없으므로, subclass들이 override 할 수 없다.
1. unique instance임을 보증하는 것. SingletonPattern의 경우도 일반 클래스와 마찬가지로 인스턴스를 생성하는 방법은 같다. 하지만 클래스는 늘 단일 인스턴스가 유지되도록 프로그래밍된다. 이를 구현하는 일반적인 방법은 인스턴스를 만드는 operation을 class operations으로 두는 것이다. (static member function이거나 class method) 이 operation은 unique instance를 가지고 있는 변수에 접근하며 이때 이 변수의 값 (인스턴스)를 리턴하기 전에 이 변수가 unique instance로 초기화 되어지는 것을 보장한다. 이러한 접근은 singleton이 처음 사용되어지 전에 만들어지고 초기화됨으로서 보장된다.
다음의 예를 보라. C++ 프로그래머는 Singleton class의 Instance operation을 static member function으로 정의한다. Singleton 또한 static member 변수인 _instance를 정의한다. _instance는 Singleton의 유일한 인스턴스를 가리키는 포인터이다.
클래스를 사용하는 Client는 singleton을 Instance operation을 통해 접근한다. _instance 는 0로 초기화되고, static member function 인 Instance는 단일 인스턴스 _Instance를 리턴한다. 만일 _instance가 0인 경우 unique instance로 초기화시키면서 리턴한다. Instance는 lazy-initalization을 이용한다. (Instance operation이 최초로 호출되어전까지는 리턴할 unique instance는 생성되지 않는다.)
더 나아가, _instance 는 Singleton 객체의 포인터이므로, Instance member function은 이 포인터로 하여금 Singleton 의 subclass를 가리키도록 할 수 있다.
Smalltalk에서 unique instance를 리턴하는 functiond은 Singleton 클래스의 class method로 구현된다. 단일 인스턴스가 만들어지는 것을 보장하기 위해서 new operation을 override한다. The resulting Singleton class might have the following two class methods, where SoleInstance is a class variable that is not used anywhere else:
물론, 코드 어디에선가 클래스를 인스턴스화하지 않으면 생성자는 호출되지 않을 것이다. C++에서는 MySingleton의 static instance를 정의함으로서 이 문제를 잘 해결할 수 있다. 예를 들어, MySingleton 클래스의 구현부를 포함하는 화일에 다음과 같이 정의하면 된다.
미로를 만드는 MazeFactory 클래스를 정의했다고 하자. MazeFactory 는 미로의 각각 다른 부분들을 만드는 interface를 정의한다. subclass들은 더 특별화된 product class들의 instance들을 리턴하기 위한 opeation들을 재정의할 수 있다. 예를 들면 BombedWall 객체는 일반적인 Wall객체를 대신한다.
일단 단순하게, MazeFactory의 subclassing이 필요없다고 가정하자. (잠시 후 subclassing과 관련, 대안적인 방법에 대해 고려해 볼 것이다.) C++ 에서는 static operation인 Instance와 unique instance를 참조하는 static member인 _instance 를 추가함으로서 Singleton 클래스를 구현할 수 있다. 위의 Implementation에서도 언급했듯이 반드시 생성자는 protected로 둠으로서 우발적으로 하나이상의 인스턴스가 생성되는 것을 막는다.
대응되는 클래스의 실제 구현부분은 다음과 같다.
Smalltalk-80[Par90] 의 SingletonPattern의 예는 ChangeSet current라는 코드에 대한 change들 집합들이다. 더 적합한 예제로는 클래스들과 그들의 '''metaclass''' 간의 관계이다. metaclass는 클래스의 클래스로, 각 metaclass는 하나의 인스턴스를 가진다. metaclass들은 이름을 가지지 않지만 (그들의 단일인스턴스를 통한 간접적인 방법을 ㅔㅚ하고), 그들의 단일 인스턴스를 유지하며 일반적으로 다른 클라이언트에 의해 생성되지 않는다.
InterViews user interface toolkit[LCI+92]는 toolkit의 Session과 WidgetKit 클래스의 unique instance에 접근하지 위해 SingletonPattern을 이용한다. Session은 application의 메인 이벤트를 dispatch하는 루프를 정의하고 사용자 스타일관련 데이터베이스를 저장하고, 하나나 그 이상의 물리적 display 에 대한 연결들(connections)을 관리한다. WidgetKit은 user interface widgets의 look and feel을 정의한다. WidgetKit::instance () operation은 Session 에서 정의된 환경변수에 기반하여 특정 WidgetKit 의 subclass를 결정한다. Session의 비슷한 operation은 지원하는 display가 monochrome display인지 color display인지 결정하고 이에 따라서 singleton 인 Session instance를 설정한다.
- 상협/삽질일지/2002 . . . . 26 matches
* AI 오목 하면서, 효율적으로 어떻게 구성할지에 대한 생각을 별로 안해서, 나중에 경우의 수가 많아지자 상당히 힘들어졌다. 그때 한번 날 잡아서 중복되어 보이는 함수들을 다 통합했다. 그 통합하는 시간이 아깝다고 생각했었는데, 한번 통합하자 효율은 극도로 높아졌다. 예전에는 몇개의 기능추가 하면 그 경로를 나름대로 축약을 했었음에도 불구하고 4가지 경로 && 공격 && 방어에 대해서 따로 시간을 내어서 코드들을 작성해야 했다. 그러나 함수들을 최대한 중복되지 않게 축약하자 한번의 기능추가가 바로 공격 && 방어 && 8가지 방향에 대해서 다 적용되는 것이었다. AI 수준 높이는데 드는 노력이 훨씬 줄어 들게 되었다. 효율적으로 프로그래밍을 해야겠다는 것을 막연히 생각하고 있었지만 이 경험으로 인해서 체감을 하게 되었다.
* Driver driver = (Driver)Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); 이거 할때 메인 함수에서 throws Exception 를 하지 않으면 thrown 을 잡거나 선언 해야만 한다는 메시지가 뜬다. 아직 이유는 모르겠다.
* Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 이거는 main 함수 내부가 아닌 곳에서는 에러 뜬다. 엄청 삽질했다. ㅠㅜ 아직 이유는 모르겠다.
* 방금 삽질 하나 해결..Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 이게 메인 함수에서만 되는게 아니라 이 구문을 사용할때는 throws Exception 을 항상 해줘야만 한다는 사실.. ㅡㅡ; 그런데 이 사실을 진작 체감하고 있었다. 그런데 계속 삽질 했다. 그 이유는
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 이게 사용된 바로 그 메소드에서 throws Exception 를 해줘야 하는데 계속 전체 클래스에서 이것을 했었다. 이게 문제의 원인.. 그러나 아직 왜 꼭 throws Exception 구문을 써야 하는지 모르겠고, Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");이게 없는 곳에서 throws Exception 를 쓰면 에러 뜨는 이유도 자세히는 모르겠다. 모르는것 투성.. ㅡㅡ;;
''Exception Handling 에 대해서 이해해야 할 것 같은데. Exception 은 해당 함수가 throws 등으로 발생을 시키고, Java 의 경우 그 Exception 을 반드시 처리를 해주는 곳을 만들어야 하지. 해당 메소드 내에서 Exception 이 발생은 하는데, 그 메소드에서 예외처리를 바로 하고 싶지 않으면 (즉, 그 Exception을 그 메소드 내에서 처리하지 않고, 그 메소드를 호출했던 곳 등에서 처리를 한다고 한다면) throws 로 해당 메소드에서 exception 을 또 던져주는 식으로 되겠지. 만일 Class.forName(...) 쓴 구문을 try - catch 로 예외를 또 잡는다면 이야기가 다르겠지만. 자바는 Exception 를 강요하는 관계로 예외는 catch 에서 무엇을 하건, 반드시 해당 발생된 예외를 잡아줘야 함. (그 덕에 최악으로 뻗을 일이 적지. 예외는 발생하더라도) --석천''
* 이번 삽질은 정말 중대한 삽질이었다. 1학기 평점을 좌우한다고 볼 수 있는 삽질이었다. 1학기 중간고사 대채용으로 내는 자바 프로젝트에서 소켓 부문을 맡은 친구가 알수 없는 에러때문에 엄청난 삽질을 해서 더이상 나아갈수 없다고 했었다. 메신저에서 통신이 안되다니.. ㅡㅡ;; 그 에러는 "No Such Method Found" 에러다. 그러한 Method가 분명히 있는데도 불구하고 안되었다. 나는 황당했다. 그 친구가 자바는 많이 안했어도 MFC랑 C++을 잘해서 소켓을 맡았는데... 나도 그 에러를 같이 찾기 위해서 삽질을 하였다. 소스도 길고 내가 짠것도 아니어서 정말 못 찾을거 같았다. 그 소스는 특성학 모든 클래스가 딱 서버, 클라이언트 두 파일 안에 들어 있었다. 그래서 난 그 클래스들을 각자 파일로 분리해 보기로 했다. 잘 안풀리니깐 한번 정리나 해보면 뭐좀 어떻게 될까 싶은 마음에 그렇게 했다. 그렇게 정리를 하다 문득.. ㅡㅡ;; 같은 이름의 클래스를 서버, 클라이언트에서 각자 다르게 정의해서 사용하는 소스를 발견... ㅡㅡ;;, 그 친구는 아직 자바에 익숙하지 않아서 이런 실수를 했나 보다.. 나도 만약 소스를 클래스별로 파일로 만들 생각을 안했으면 그 에러의 원인을 발견하지 못했을 것이다. 휴. 큰일날 뻔 했넹.. 앞으로는 "No Such Method Found"같은 에러때문에 고생할일은 절대 없기를.. ㅡㅡ;
* 오늘도 어김 없이 ㅡㅡ;; 삽질을 했다. 이번에는 matrix 클래스를 구현하는데 matrix데이터를 이중 배열로 private영역에 넣어서 이것 저것 해보는데 나중에 클래스의 matrix 데이터를 호출해야할 경우가 생겼다. [4][4] 이거 두개로 리턴할라고 했는데 안되었다. 남훈이형이랑 제본뜬 책찾아 보니깐 배열은 리턴이 안된다고 나왔다. 그래서 고민하다가 *[4] 이거 두개(포인터형 배열 4개짜리)를 사용하고 나중에는 *를 리턴하는 식으로 돌파구를 찾았다.(*[4] 이것도 배열이랑 비슷하게 써먹을수 있었다. 예-> *(matrix[0]+1)) 처음에는 뭔가 되는듯 싶었다. 클래스 내부 배열 설정도 제대로 되고 하였다. 그 .... 러..나.. ㅡㅡ;; 역시나 난 삽질맨이었다. 나중에 + 연산자 재정의 클래스 내에서 객체를 생성해서 리턴할때 뭔가 제대로 먹지가 않았다. 그거 가지고 간만에 ㅡㅡ;; 삽질에 바다에 퐁당 빠졌다. 간만에 해보는 삽질도 그리 유쾌한 일은 아니었다.. -_- 그렇게 계속 신나게 삽질하다가 도저히 안되겠다 싶어서 멤버 데이터를 public에 넣어 버리는 엽기적인 일을 해버렸다. ㅡㅡ; 그 방법밖에는 없는거 같았다. 그 후로는 아무런 걸림돌 없이 쭉쭉 되었다. 진작 이렇게 할걸하는 생각을 했지만 서도 멤버 데이터를 public안에 넣어서 웬지 모를 찝찝함이..
''근데.. Matrix 클래스가 있음에도불구하고 왜 Matrix 내의 array를 직접 접근할 일이 생긴건지? 그리고 연산자 재정의와 관련된 문제라면 Matrix 에 인자를 접근할 수 있는 메소드를 넣던지 friend 로 해결해야 하지 않을까 싶음 --["1002"]''
''꼭 이중 배열 전체가 return 이 되어야 하나? 넘겨받은 배열에 도로 쓰는 작업이라면, setter 를 만들어주면 될것 같아서. 클래스로 해놓은 이상 배열을 넘기지 말고 아에 클래스 인스턴스를 넘겨버리는 것이 더 나을것이라 생각 --["1002"]''
* 오늘은 간만에 빡센 삽질을 했다. 오픈GL을 하는데, 여러개 반복되는 구문이 많은거 같아서 내 딴에는 함수화 시켜서 편하게 사용해야지 하고 생각하고 함수화를 했다. 그런데 그 과정에서 여기저기 실수해서 겁나게 삽질했다. 실수하고서는 한번 죽 흩어보지 않고 단지 성급하게 빨리 에러를 찾고자 하는 맘에.. 쩝.. 역시 삽질은 정신적인 스트레스를 너무 많이 준다.
* 이 에러는 까먹기 전에 적어 놓아야 겠다는 생각이 들어서 여기에 적어야 겠다. 오늘 내가 만든 클래스를 인클루드 할때 난 대소문자 구분안해도 되는줄 알았는데 구분 안하니깐 링크할때 에러 떳다. 이 에러가 왜 나오는건줄 몰라서 겁나게 삽질 했었는데.. ㅡㅡ;
* 삽질 없는 세상에서 살고 싶어.. ㅠㅜ, 이번에 3D 알카로이드 하는데.. 충돌 처리가 제대로 계속 안되었다.... 근데 방금 수많은 삽질 끝에 해결했다. ㅠㅜ, 안되었던 이유는 내 머리속에서 핑핑 돌아가던 3D 좌표와 컴퓨터가 생각한(내가 예전에 만들었던 함수..) 3D 좌표가 달라서 그랬던 것이다. 이렇게 말하면 쉽지만 실제로 충돌 처리 함수는 금방 만들었는데.. 버그 찾는데 그거보다 5~6배 정도 시간이 더 든거 같다. ㅡㅡ;; 아.. 끝없는 삽질의 나라.~
- MoreEffectiveC++ . . . . 25 matches
* ANSI C++에 대한 제반적인 내용을 깔끔한 필체로 쉽게 쉽게 다루고 있다. 명확한 개념 설명이 돗보인다. 프로그램과 디자인 능력을 향상시키는 35개의 방법이 제시되어 있다. 배치, 가상 생성자, 포인터 레퍼런스 카운팅, 프락시 클래스, 더블 디스패치와 같은 C++의 보다 세련된 기술에 대해 설명하고있다.
- 포인터와 레퍼런스와의 차이
- 사용자 정의의 변환 함수 사용
- 가상 함수 호출과 파라미터 패스의 차이 이해
- 가상 함수 비용, 다중 계승, 가상 베이스 클래스와 RTTI
- 클래스 객체수의 제한
- 스마트 포인터
- 프락시 클래스
- 하나 이상의 객체에 대한 가상 함수 생성
- 리프가 없는 클래스 추상 생성
* Item 3: Never treat arrays polymorphically - 절대로! 클래스 간의 다형성을 통한 배열 취급을 하지 말라
* Item 5: Be wary of user-defined conversion functions. - 사용자 정의 형변환(conversion) 함수에 주의하라!
* Item 12: Understand how throwing an exception differs from passing a parameter or calling a virtual function [[BR]] - 가상 함수 부르기나, 인자 전달로 처리와 예외전달의 방법의 차이점을 이해하라.
* Item 24: Understand the costs of virtual functions, multiple ingeritance, virtual base classes, and RTTI [[BR]] - 가상 함수, 다중 상속, 가상 기초 클래스, RTTI(실시간 형 검사)에 대한 비용을 이해하라
* Item 25: Virtualizing constructors and non-member functions. - 생성자와 비멤버 함수를 가상으로 돌아가게 하기.
* Item 28: Smart pointers - 똑똑한 포인터:스마트 포인터
* Item 31: Making functions virtual with respect to more than one object. - 하나 이상 객체에 대응하는 함수를 virtual(가상)으로 동작 시키기
* Item 33: Make non-leaf classes abstract. - 유도된 클래스가 없는 상태의 클래스로 추상화 하라.
1. 2002.02.15 드디어 스마트 포인터를 설명할수 있는 skill을 획득했다. 다음은 Reference counting 설명 skill을 획득해야 한다. Reference counting은 COM기술의 근간이 되고 있으며, 과거 Java VM에서 Garbage collection을 수행할때 사용했다고 알고 있다. 물론 현재는 Java Garbage Collector나 CLR이나 Tracing을 취하고 있는 것으로 알고 있다. 아. 오늘이 프로젝트 마지막 시점으로 잡은 날인데, 도저히 불가능하고, 중도 포기하기에는 뒤의 내용들이 너무 매력있다. 칼을 뽑았으니 이번달 안으로는 끝장을 본다.
- ZeroPage_200_OK . . . . 25 matches
* 자바스크립트에서 자주 this 얘기가 나오던데, 이번에 이야기를 들을 수 있어서 좋았습니다. 개인적인 느낌을 말하자면 함수가 데이터로 취급되는데 함수 내부에서 함수를 호출한 객체(execution context)의 정보를 사용하기 위해서 this를 사용한다는 느낌이는데 맞는지 모르겠군요. p.print를 넘기는 것도 실제로 class p에 있는 함수를 넘기는 게 아니라 p.print에 바인딩 된 어떤 함수를 넘기는 것이니까 내부의 this가 기존 OOP와 같이 해당 class의 인스턴스는 될 수 없겠죠. 그리고 제일 마음에 들었던 것은 역시 예전에 했던 스터디에서 다뤘던 자바스크립트의 네 가지 특징에 대해서 들을 수 있었다는 점이었습니다. 사실 예전 스터디 떄 무척 듣고 싶었는데 개인적인 사정으로 참가를 할 수 없어서 꽤 아쉬웠던 터라 ;;; 마지막에는 개인적인 사정으로 시간이 안 맞아서 좀 급하게 나갔는데, 그래도 최대한 들을 수 있는 데까지 듣기를 잘 한 것 같은 느낌이 들었습니다. - [서민관]
* 자바스크립트의 언어 특성에 따라서 배우고 기본적인 사용 문법에 대해서 배웠습니다. 명령형 구조적 프로그래밍 언어적인 부분에 대해서는 그렇게 어려운건 없었는데 그 뒤의 함수형 선언적 프로그래밍 언어 부분에서 클로저랑 함수에 함수를 인자로 주는 부분이 같이 쓰이니까 좀 복잡했었습니다. 조금 더 공부해야 할 것 같습니다. var Person = function(){}; 같은 부분나 this가 new를 했을 때에만 제대로 동작한다는 부분도 특이했습니다. 문법적인 부분 자체는 그렇게 어려운 것 같지 않은데 함수를 중첩해서 쓰거나 그런 부분이 약간 알아보기 힘든 것 같습니다. - [서영주]
* 서버에서 데이터를 가져와서 보여줘야 하는 경우에 싱글스레드를 사용하기 때문에 생기는 문제점에 대해서 배우고 이를 처리하기 위한 방법을 배웠습니다. 처음에는 iframe을 이용한 처리를 배웠는데 iframe 내부는 독립적인 페이지이기 때문에 바깥의 렌더링에 영향을 안주지만 페이지를 이동하는 소리가 나고, iframe이 서버측의 데이터를 읽어서 렌더링 해줄 때 서버측의 스크립트가 실행되는 문제점 등이 있음을 알았습니다. 이를 대체하기 위해 ajax를 사용하는데 ajax는 렌더링은 하지 않고 요청 스레드만 생성해서 처리를 하는 방식인데 xmlHttpRequest나 ActiveXObject같은 내장객체를 써서 요청 스레드를 생성한다는걸 배웠습니다. ajax라고 말은 많이 들었는데 구체적으로 어떤 함수나 어떤 객체를 쓰면 ajax인건가는 잘 몰랐었는데 일반적으로 비동기 처리를 하는거면 ajax라고 말할 수 있다고 하셨습니다. 그리고 중간에 body.innerHTML을 직접 수정하는 부분에서 문제가 생겼었는데 innerHTML을 손대면 DOM이 다시 만들어져서 핸들러가 전부 다 사라진다는 것도 기억을 해둬야겠습니다. - [서영주]
* 자기자신의 레퍼런스(사이클릭 레퍼런스), 커스텀 오브젝트(함수 or 객체) 등은 직렬화가 어렵기 때문에 대상에 들어가지 않는다.
* Builder Pattern의 일종으로 jQuery의 메소드를 실행한 이후에 jQuery 배열 객체를 반환함으로써 함수의 chainning을 해서 사용할 수 있다.
* Element를 찾을 때 CSS 문법을 이용하여 작업을 할 수도 있고 jQuery의 메소드를 이용해서 작업을 할 수도 있는데, 복잡한 대상을 한 번만 찾아서 작업을 할 경우에는 CSS 문법을 이용하는 것이 좋고, 찾은 대상에서 여러 작업을 할 경우에는 jQuery 함수를 사용하거나 해당 Element를 변수에 저장해 두었다가 사용하는 것이 성능 면에서 좋다.
* 웹 초기에 css설명했을 때 css셀렉터 문법도 설명을 해주셨었는데 많이 까먹어서 헷갈렸었습니다. -_- 역시 한 두 번 본걸로는 금방 잊어버리기 쉬운 것 같습니다. jQuery함수의 대부분은 호출 후 jQuery객체를 리턴하기 때문에 함수의 체이닝이 가능하다는 얘기를 하셨었는데 구글의 guava도 그렇고 요즘은 이런 형태의 구현이 많은건지 궁금합니다. 그리고 결과 값을 받아서 계속해서 다른 작업을 하는 경우가 아니라면 체이닝이나 그냥 한 번에 계산하는 방식이나 별 차이가 없는건가요? - [서영주]
* setter, getter - 같은 함수가 set용 인자가 들어있을 경우에는 setter로, 그렇지 않을 경우에는 getter로 실행된다.
* 이벤트 메소드 - 이벤트 메소드에 함수를 인자로 주지 않고 실행시키면 이벤트를 발생시키는 것이고, 함수 인자를 주고 실행시키면 이벤트 핸들러에 해당 함수를 등록한다. (ex. $(".add_card").click() / $(".add_card").click(function() { ... }))
* append(), appendTo() - jQuery에는 같은 기능의 함수인데 체이닝을 쉽게 하기 위해서 caller와 parameter가 뒤바뀐 함수들이 있다. (ex. A.append(B) == B.appendTo(A))
* JSONP - Same Origin Policy를 어기지 않고 Cross Site Scripting을 하기 위한 방법. callback 함수를 만들고 사이트에 특정한 요청을 보내면 callback 함수로 감싼 데이터를 넘겨준다. callback 함수로 감싸진 데이터는 이쪽의 callback 함수의 내용대로 실행된다.
- 5인용C++스터디/에디트박스와콤보박스 . . . . 24 matches
에디트 컨트롤은 CEdit 클래스로 표현된다. 멤버함수는 다음과 같다.
멤버함수 / 설명
이 멤버함수들 중에서 Create 함수를 사용하면 대화상자 템플리트에 에디트를 배치하지 않고도 실행중에 에디트 컨트롤을 생성할 수 있다.
CreateEdit라는 프로젝트를 만들어보자. 폼뷰가 아닌 일반 뷰에 에디트를 배치하려면 뷰가 생성될 때 (WM_CREATE) OnCreate에서 에디트를 생성시키면 된다. 우선 뷰의 헤더파일을 열어 CEdit형 포인터를 선언한다.
m_Edit가 CEdit의 포인터로 선언되었으므로 일단 new 연산자로 CEdit객체를 만든다. 그리고 이 객체의 Create 멤버함수를 호출하여 에디트를 생성한다. Create 함수의 원형은 다음과 같다.
첫 번째 인수로 에디트의 스타일을 주되 에디트는 메인 윈도우가 될 수 없으므로 WS_CHILD 스타일을 주어야 하고 생성하자마자 보여야 하므로 WS_VISIBLE 스타일을 주어야 한다. 또한 에디트는 디폴트로 경계선을 가지지 않으므로 WS_BORDER 스타일을 주어야 보이게 된다. 두 번째 인수로 에디트가 차지할 사각영역을 주고 세 번째 인수로 에디트의 부모 윈도우의 포인터를 준다. 마지막 인수인 nID는 에디트 컨트롤의 ID이되 통지 메시지를 처리하지 않을 경우는 ID를 주지 않아도 상관없다.
이렇게 Create 함수로 만든 에디트의 통지 메시지는 어떻게 처리해야 할까. 클래스 위저드가 메시지 핸들러를 만들 때 해주는 세가지 동작을 프로그래머가 직접 해줘야 한다. 우선 메시지 맵에서 메시지와 메시지 핸들러를 연결시켜 준다. ON_EN_CHANGE 매크로에 의해 IDC_MYEDIT 에디트가 EN_CHANGE 메시지를 보내올 때 OnChangeEdit1 함수가 호출된다.
두 번째로 헤더파일에 메시지 핸들러의 함수의 원형을 선언한다.
세 번째로 메시지 핸들러 함수 OnChangeEdit1 함수를 작성한다. 함수의 본체 코드는 물론이고 함수명까지 직접 입력해 주어야 한다. 이 함수는 에디트 컨트롤의 문자열을 읽어 들이는 함수이다.
- 새싹교실/2012/아우토반/앞반/5.10 . . . . 24 matches
1. 함수
* 함수란?
* 함수의 형태
* 함수의 종류
* 함수의 정의
* 함수의 선언, 정의 호출의 의미
2. 포인터
* 포인터와 변수의 개념
* 포인터 연산자
* 포인터의 종류
* 인자를 전달받는 함수
* 포인터를 인자로 받는 함수
* 포인터의 연산
* 포인터의 포인터
* 포인터와 상수(Const)
1. void Swap(int*, int*) 함수를 구현하시오.
처음 printf함수에서 변수 a의 메모리 안에 있는 값을 출력
다음 printf함수에서 변수 a의 메모리의 주소값을 출력
다음 printf함수에서 변수 p의 메모리 안에 있는 값을 출력
네번째 printf함수에서 변수 *p의 값은 0 이고
- 토비의스프링3/오브젝트와의존관계 . . . . 24 matches
* User : 사용자 정보 저장용 자바빈 클래스
* UserDao : JDBC를 이용한 등록, 조회 기능이 있는 DAO 클래스
* 앞서 만든 클래스가 제대로 동작하는지 확인하려면
* UserDao 클래스는
* 그럼에도 불구하고 UserDao 클래스 코드에는 여러가지 문제가 있다.
* 추상클래스를 만들어놓고 상속을 통해 변화를 구현하는 방법 -> 불편하다
* 1.3.1 클래스의 분리
* 서로 다른 관심사를 독립적인 클래스로 분리해보자
* 분리된 두 클래스는 의존관계를 가진다.
* 클래스 분리에서 가장 중요한 점은 두 클래스가 낮은 결합도를 가져야 한다는 것이다.
* 코드의 크기가 작고 간단해도 클래스와는 다른 독립적인 관심사를 가지고 있다면 분리해야한다.
* 클래스의 확장성을 해칠 수 있다.
* 클래스간의 관계설정
* 클래스나 모듈은 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다
* 변경이 필요한 알고리즘을 인테페이스를 통해 외부로 분리시키고, 이를 구체화한 클래스를 필요에 따라 바꿔 사용하게 하는 패턴
* 1. 스프링이 빈 팩토리를 위한 오브젝트 설정을 담당하는 클래스라고 인식할 수 있도록 @Configuration이라는 애노테이션을 추가한다.
* 1. 애플리케이션 컨텍스트는 ApplicationContext타입의 오브젝트다. 사용시 @Configuration이 붙은 자바코드를 설정정보로 사용하려면 AnnotationConfigApplicationContext에 생성자 파라미터로 @Configuration이 붙은 클래스를 넣어준다.
* @Configuration이 붙은 클래스는 애플리케이션 컨텍스트가 활용하는 IoC 설정정보가 된다. 내부적으로는 애플리케이션 컨텍스트가 @Configuration클래스의 @Bean메소드를 호출해서 오브젝트를 가져온 것을 클라이언트가 getBean() 메소드로 요청할 때 전달해준다.
1. 클라이언트는 구체적인 팩토리 클래스를 알 필요가 없다.
* 의존관계 : 두 클래스 또는 모듈이 있을 때 한 쪽의 변화가 다른 쪽에 영향을 미치는 상황.
- 후각발달특별세미나 . . . . 24 matches
세미나 후 제 귀에 들어온 질문 중에 '함수를 많이 만들면 메모리를 더 사용하지 않는가?'라는 질문이 있었습니다. 누가 자세히 설명 좀 부탁드립니다. --재동
전문적인 설명은 아니구, 제 생각에는 함수를 사용하여 메모리 사용하는 비용과 프로그래머가 함수를 더 사용하여 소스의 가독성을 올리고, 유지 보수 및 버그를 없애는 비용과 비교를 해볼때 후자가 훨씬더 큰 비중을 차지하기 때문에 함수를 더 사용하여 메모리를 더 사용하더라도 리펙토링의 중요성이 결코 줄어들지 않는다고 생각합니다. 그리고 짧은 소스에서는 리펙토링 하여 함수가 많아 지는것이 낭비처럼 보일지 몰라도 좀더 프로그램이 커질수록 리팩토링을 해놓음으로 해서 추후에 최적화를 하는데에도 훨씬 유리하기 때문에 결국에 가서는 자원도 더 효율적으로 사용하리라고 봅니다. - [상협]
메모리를 많이 사용한다는 우려의 원인은 많은 변수들에 있습니다. 전달인자를 받거나 값을 리턴할 때, 각각 상응되는 변수가 필요하기 때문이죠. 하지만 변수는 그 변수가 선언된 함수내에서만 효력을 발휘하고 함수가 종료되는 순간 사라집니다(메모리해제). 그러므로 모듈화된(쉽게 이야기해서 함수로 나뉜)프로그램에서는 함수내의 많은 변수들이 메모리를 많이 차지하더라도 그 함수가 끝나면 그 메모리는 해제되어 사용가능해집니다. 그리고 전역변수나 메인함수내의 변수만을 사용하는 프로그램은 프로그램이 끝날 때까지(메인함수가 종료될 때까지) 메모리를 잡아두므로 한번 할당된 메모리는 사용불가능합니다.
모듈화된 프로그램에서의 메모리 사용의 개념은 '''필요할 때마다 할당해서 쓰고 필요없으면 해제하자'''이고 전역변수나 메인함수내의 변수만을 사용하는 프로그램에서의 메모리 사용의 개념은 '''지금은 안쓰이더라도 나중에 쓸 메모리를 미리 할당하고 사용이 끝났더라도 메모리를 계속 잡아두자'''입니다. 전자의 경우에는 어느 순간 메모리를 많이 사용하는 경우도 있고 어느 순간에는 엄청 적게 사용하는 경우가 있습니다. 메모리 사용이 더 유동적이라고 할 수 있습니다. 밑에 참고 그래프(자체제작)를 참고해주시기 바랍니다. --[강희경]
'''함수가 많아지면 메모리를 많이 쓰게 될까??'''
함수의 갯수와 메모리 사용량은 직접적으로 관련이 없습니다. 메모리 사용량과 직접적으로 관련이 있는 것은 함수의 갯수가 아니라 프로그램의 길이 입니다.
함수가 많다고 프로그램의 길이가 긴 것은 아닙니다. 길이가 짧은 함수를 여러개 가진 프로그램과 길이가 엄청나게 긴 함수를 한개만 가진 프로그램이 있다고 해봅시다. 길이가 더 긴 프로그램은 어떤 것입니까?
리펙토링에 대해서 생각해 봅시다. 가장 먼저 배운 방법이 무엇이었습니까? 중복제거 입니다. 함수를 늘려 중복을 제거하면 프로그램의 길이는 길어질까요? 짧아질까요?
물론 함수가 추가되면 전달인자 처리를 위한 약간의 코드가 추가되는 것은 사실입니다. 하지만 그것은 몇바이트에 지나지 않습니다.
통상 리팩토링에 대한 반론은 다음과 같은 양상을 띕니다. 리팩토링을 많이 한다 --> 함수 개수가 많아진다 --> 콜 체인이 길어진다 --> 속도가 느려진다. 메모리 문제보다는 속도 문제에서 리팩토링에 대한 우려가 불거져 나오는 것이죠.
그런데, 함수 호출에 의한 오버헤드는 컴파일러/VM 기술이 발전하면서 점점 줄어들고 있고, 문제가 복잡할수록 그런 낮은 단계의 옵티마이제이션보다 높은 단계에서의 최적화가 훨씬 더 효과적인데, 리팩토링이 잘 되어 함수가 잘게 쪼개어져 있으면 높은 단계의 최적화를 하기가 쉬워집니다. (그래도 여전히 로우레벨의 옵티마이제이션이 필요하다면 매크로나 코드 제너레이션을 쓸 수 있습니다. DavidParnas의 [http://www.acm.org/classics/may96/ 논문] 참고)
- 새싹교실/2011/데미안반 . . . . 23 matches
* 나중에 포인터를 사용하는 실습을 하다 보면 많은 깨달음을 얻을 수 있지 않을까 싶습니다...
* 아무래도 성과가 바로바로 눈에 보이게 출력하여 확인할 수 있는 함수이다 보니, 초보자가 바로 이해하기 어려움에도 불구하고 처음에 배우게 되는 듯 합니다.
* 입, 출력 함수 - printf, scanf
#include <stdio.h> //printf 함수 사용
#include <assert.h> //assert 함수 사용
#include <assert.h> //assert 함수 사용
#include <assert.h> //assert 함수 사용
#include <assert.h> //assert 함수 사용
* 기타 대입 연산자 사용 예에서 -= , /= , %= 한 결과를 assert(val1 == 7); 와 같이 assert함수 안에 넣어 확인하시오.
* 함수
* [박성국] - ^오늘은 함수에 대해서 자세히 배우고 그에 필요한 지식인 지역변수 전역변수 static변수에 대해 자세히 배웠습니다.^ 하나하나 배우면서 C언어어에 대한 자신감을 가졌습니다. 특히 Recursive function에 대해 정확한 이해를 통하여 활용할 수 있게 되었습니다. 항상 스펀지같이 쏙쏙 머리속에 들어오는 수업 감사합니다.
* [이준영] - 수업시간에 제대로 집중을 못해서 잘 못들은 부분을 자세히 배울 수 있어서 다행이었습니다. 재귀함수랑 변수의 유형을 자세히 배웠습니다. 앞으로도 더 많은 걸 배우고 싶어요.
* [강소현] - 함수의 형태를 반환형이 있는 지의 여부와 매개변수가 있는 지의 여부에 따른 4 가지를 실습하여 차이를 알아보았습니다. 그리고 재귀함수에 대한 진도도 나갔으나, 아무래도 그냥 함수 한번 호출하고 끝낼 때보다 이해가 잘 가지 않는 듯 합니다. 다음 시간에 한번 더 복습할 예정입니다. 재귀함수로 만드는 factorial이나 gcd 같은 것을 점화식을 설명하고 보여주면 좀 더 이해가 쉽지 않을까 싶었습니다.
* 재귀함수 복습
* [강소현] - 한 시간은 정말 금방 가네요. 근데 왜 학교 수업 들을 때는 그리 길었던거지!? 재귀함수를 사용할 경우 항상! 빠져나올 수 있는 '''조건'''을 걸어야 한다는 것을 복습했습니다. 뭔가 도미노 원칙 어쩌구 하긴 했지만 정확한 게 아니라 비슷하다-고 했던거에요. 정확한 건 3학년 알고리즘 시간에 divide&conquer을 배우면...<< 간단히 설명하자면 한번에 풀기 힘드니까 나눠서 풀자는 내용입니다.
* 함수 호출 시, stack에 돌아올 주소를 넣어두고 함수가 종료되면 stack에서 빼와서 돌아간다. LIFO(Last In First Out)의 순으로..
* Printf함수는 널 문자를 통해서 출력의 범위를 결정 짓는다.
* 포인터
* [강소현] - 이후의 내용은... 배우고 싶은 사람에 한해 방학 때 하기로 했습니다.진도를 너무 느리게 나가면 안되겠구나하고 느낀.. ;ㅅ; 작년에는 3번 수업으로 포인터까지 나갔는데, 올해는.. 대상이 다르기는 하지만, 조절을 잘 못하기도 했네요. ㅠㅠ
- Java Study2003/첫번째과제/장창재 . . . . 22 matches
자바 API는 윈도우 API와 같이 운영체제에서 제공해 주는 라이브러리와 같은 것입니다. 다시 말해서, 자바 프로그램을 개발하기 위해 사용할 수 있는 라이브러리 또는 클래스들이라 할 수 있습니다. 이러한 자바 API는 서로 관련된 클래스들을 묶어서 패키지 단위로 제공되고 있습니다.
자바의 주된 특징은 기존의 C/C++ 언어의 문법을 기본적으로 따르고, C/C++ 언어가 갖는 전처리기, 포인터, 포인터 연산, 다중 상속, 연산자 중첩(overloading) 등 복잡하고 이해하기 난해한 특성들을 제거함으로써 기존의 프로그램 개발자들이 쉽고 간단하게 프로그램을 개발할 수 있도록 합니다.
자바는 컴파일 시에 에러 검사를 철저하게 하고, 실행 시에 발생할 수 있는 에러에 대해서도 실행 시에 철저하게 검사를 수행함으로써 신뢰도가 높은 프로그램을 작성할 수 있도록 해 줍니다. 또한, C/C++ 프로그램 개발자들을 가장 혼란스럽게 하고, 프로그램의 치명적인 오류를 발생시킬 수 있는 포인터 및 포인터 연산을 자바에서는 사용하지 않게 함으로써, 포인터를 사용함으로써 프로그래머가 범할 수 있는 오류를 없앴다는 것입니다.
자바의 다중 스레드 기능은 동시에 많은 스레드를 실행시킬 수 있는 프로그램을 만들 수 있도록 해 줍니다. 자바는 동기화 메소드들을 기본적으로 키워드로 제공함으로써, 자바 언어 수준에서 다중 스레드를 지원해 줍니다. 자바 API에는 스레드를 지원해 주기 위한 Thread 클래스가 있으며, 자바 런타임 시스템에서는 모니터와 조건 잠금 함수를 제공해 줍니다.
C와 같이 다른 언어로 작성된 함수를 직접 호출합니다.
느린(lazy) 클래스 로딩:
하나의 HTML 페이지 내에 있는 애플릿은 하나의 클래스만을 사용할 경우도 있겠지만, 대부분의 경우 여러 개의 클래스를 필요에 따라 사용하게 됩니다. 여러 개의 클래스를 사용할 경우, 모든 클래스가 동시에 사용되지는 않겠지요. 또한 어떤 클래스는 정의는 되어있지만, 필요에 따라 전혀 사용되지 않을 수도 있겠지요. 따라서, 자바에서는 필요할 경우에만 클래스를 로딩하여 사용하게 됩니다. 이러한 기술을 느린(lazy) 클래스 로딩 이라 합니다.
이러한 문제점은 느린(Lazy) 클래스 로딩에서 발생하거나 메모리 할당과 가비지 콜렉션이 비결정적이고 느린 최악의 경우(worst-case) 특성을 가지며 stop-start 방식으로 모든 스레드를 멈출 수 있다는 문제점이 있습니다. 이를 해결하기 위해 클래스를 미리 로딩(class preloading)한다거나 정적 초기화(static initializer)를 제거하여 패키지 라이브러리에 대해서는 가상머신 초기화를 사용하고 응용프로그램에서는 명시적인 초기화 를 사용하게 하는 등의 기법을 사용할 수 있습니다. 그리고, 메모리 할당과 쓰레기 수집(garbage collection)에 대해서는 정해진 시간 내에 입터럽트 가능한 쓰레기 수집을 하는 것입니다. 또는 표준화된 실시간 API를 제공함으로써 해결할 수 있습니다.
C언어를 이용하여 C 프로그램을 작성한다면 반드시 main이라는 시작 함수를 정의해 주어야 하고, 윈도우 응용프로그램을 작성한다고 하면 WinMain이라는 함수를 꼭 작성해 주어야 하지요. 이러한 것을 규약(protocol)이라 합니다. 마찬가지로, 자바 언어를 이용하여 여러 가지 종류의 자바 프로그램을 작성할 수 있는데, 이 때 각 자바 프로그램의 종류에 따라 해당 규약이 서로 다릅니다. 이렇듯 자바를 이용하여 자바 프로그램을 작성한다는 것은 각 자바 프로그램에서 제시하고 있는 규약을 지켜 프로그램을 작성한다는 것입니다. 자바 언어를 이용하여 작성할 수 있는 자바 프로그램의 종류를 살펴보면 다음과 같습니다.
- Refactoring/BadSmellsInCode . . . . 22 matches
여기서 딜레마가 온다. 어떻게 인스턴스 변수를 삭제하거나 클래스 계증구조를 만드는가를 표현하는 것은 쉽다. 그건 사소한 문제들이다. 하지만 언제 이러한 것들을 해야 할 것인지 표현하는 것은 쉽지 않다. 나는 (여기서의 I는 Martin Fowler) 프로그래밍 미학이라는 모호한 표현으로 얼버무리지 않고 좀 더 확실한 것을 원했다.
* 같은 클래스내에 2개이상의 메소드들에 중복코드 존재시 - ExtractMethod
* 두개 이상 서브클래스 내 중복코드시 - ExtractMethod 한뒤 PullUpField
* 두개이상의 연관없는 클래스 내의 중복코드 - ExtractClass
너무 하는 일이 많은 큰 클래스
* GUI 클래스에서 데이터부가 중복될때 - DuplicateObservedData
Parameter 인자가 많은 함수. 이해하기 힘들고, 사용하기 어렵다.
하나의 클래스가 각각 다른 이유들로 인해서 다른 방식으로 자주 변경될 때.
다른 클래스들이 바뀔 때마다 매번 수정되는 부분.
* 바뀌어야 하는 경우들을 명확하게 한뒤 ExtractClass 하여 하나의 클래스에 모은다.
하나의 변화에 의해 다른 여러 클래스들의 변경 필요시
* 바뀌는 부분들에 대해 MoveMethod, MoveField 하여 하나의 클래스에 넣는다. (없으면 새로 하나 클래스 생성할것)
어떤 메서드가 자신이 속해 있는 클래스의 데이터가 아닌 다른 클래스의 데이터들을 필요로 할 때.
클래스의 변수선언 필드나 함수 프로토타입 같은 곳에 있는, 항상 같이 몰려다니는 데이터 아이템들
거의 쓸모없는 클래스.
* 추상클래스들이 별로 하는 일이 없을때 - CollapseHierarchy
사적인 부분(?)에 대해서 지나치게 관심을 기울이는 위험한(?) 클래스들.
필드, getter, setter만을 가진 어린아이와 같은 클래스.
서브클래스가 부모의 behavior는 재사용하나 부모의 인터페이스를 지원하기를 원하지는 않을 때.
- 새싹교실/2012/Dazed&Confused . . . . 22 matches
* 소라 때리기 게임을 만들었다. 직접 소스코드를 입력하면서 소스코드의 쓰임을 익혔다. getchar(getch로 하다가 Visual Studio에서 즐 날려서 이걸로 대체)함수와 rand 함수를 배웠다. ppt를 통해 함수의 쓰임을 알아 볼 수 있어 좋았다. - [김민재]
* define, rand, srand, 다양한 헤더파일을 처음 써 보았다. 내가 혼자서 다시 해 봐야겠다. 신기했다. 이렇게 다양한 함수를 알게 되어 좋았지만 조금 더 집중해야 할 것 같다. 이번 강의에서는 실습이 적었는데 실습과 직접 프로그래밍을 해 보는 시간을 가졌으면 좋겠다. - [박용진]
* 드디어 반 아해들이 맨붕을 하기 시작했습니다. 뭐 놀라운 결과도 아니지만,, 직접 보니 ...하네요. 이번에도 ppt를 열심히 복붙해서 나누어 줬습니다. 그렇게 하나하나 알려주다가 포인터부터 조금씩 힘들어 하더니 재귀함수 부분에서 실습을 원하길래 피보나치를 짜 보라고 시켰습니다. 표정들이 맨붕 복탄을 맞은 것 같더군요. 음... 그래서 결국 준비한 부분은 다 못 나갔습니다. 다음에 이어서 해야겠네요. 4주차 내용이 끝나면 한번 전반적으로 실습 위주로 시켜야 겠습니다. - [권순의]
* Pointer, 재귀함수, 메모리 등 많은 것을 배우는 시간이었다. 그러나 이 모든 것들이 다 새로운 것이다 보니 심하게 맨붕을 경험하게 되었다. 다음에 차근차근 복습하는 시간을 가져야 겠다.
* 포인터와 구조체, 전역 번수와 지역 변수에 대해 배웠고, 포인터가 어느 곳에서나 자료를 읽을 수 있다고 하는 것과 Call-by-Value, Call-by-Reference에 대해서도 배웠다. 포인터에 대한 개념은 알고 있었지만 깊게는 알지 못했는데 오늘 새싹으로 많은 것을 배울 수 있었다. 그러나 이 모든 것들이 하루만에 끝내려고 하다 보니 너무 부담스러웠다. 조금 더 다양한 프로그래밍 예제에 대한 경험을 했으면 좋겠다. - [김민재]
* 포인터, 재귀함수, 피보나치 수열을 코딩해 보았다. 피보나치는 하다가 실패했지만 자주 코딩을 해 보면 슬슬 감이 올 것 같다. 재귀함수의 return에 대한 개념이 흐려서 아직 재귀함수를 잘 못 쓰겠다. 연습을 자주 해야겠다. Practice makes Perfect?.. 포인터에 대한 개념이 흐렸는데 어느 정도 자리를.. 개념을 잡은 것 같다. 머리 속에서 코딩이 안 되면 펜으로 수도 코드작성이나 수학적으로 해설을 먼저 작성하는 연습을 해 보아야겠다. 강의에서 좀 더 코딩 연습이나 연습 문제 풀기와 같은 것이 많았으면 좋겠다. 단순히 따라적기만 해서는 잘 이해가 안 되는 것 같다. - [박용진]
* 오늘 강의는 지난 주 내용을 복습하는 것 위주로 진행되었습니다. 그래도 한 번 했던 내용이라 저번 주 보다는 이해하는 정도가 다르더군요. 그래서 다시 한번 재귀함수를 통한 피보나치 수열을 짜 보게 했습니다. 저번 주 보다는 그래도 나은 결과를 보여주었습니다. 그래도 지속적으로 반복 학습 시켜야 할 듯 싶습니다. 그와 동시에 실습도 여러번 필요 할 듯 하군요.. - [권순의]
* 함수, 재귀함수, 배열, 메모리 주소, 포인터 등을 복습하였다. 지난 주에 이해되지 않았던 부분에 대해서 상세히 설명해 주셔서 좋았다. 직접 피보나치 수열을 작성해 보면서 재귀함수의 사용을 익힐 수 있어 좋았다. - [김민재]
* 오늘 다시 복습을 했다. 복습을 하며 특히 저번에 재귀함수를 못 했었는데 오늘 다시 공부하여 재귀함수를 이용해 피보나치 수열을 짤 수 있어 좋았다. 앞 부분도 조금 더 실습을 많이 했으면 좋겠다. - [박승우]
- DPSCChapter3 . . . . 21 matches
연관된 혹은 의존적인 객체들의 집합을 만들기 위한 인터페이스를 제공한다. 클라이언트가 구체적인 클래스들에 대한 구체화
Ford parts,Toyota parts,Porsche parts 등등이다. 유사한 클래스들이 클래스 구조를 통해서 확장된다. 각각이 적당한 하위
된 여러 종류의 클래스들 중 하나를 선택할 수 있도록 해주는 것을 의미한다.
우리는 아래와 같은 자동차와 자동차 부분들의 클래스를 가지고 있다.
Vechile과 CarPart는 Object 클래스의 서브 클래스이다. 물론, 이 클래스 구조는 많은 단계에서 전체적으로 단순화된다.
우리는 CarPartFactory라는 추상 팩토리 클래스 정의를 하면서 패턴 구현을 시작한다. 이것은 "구체적인 클래스들에 대한
클래스이다. 그것은 추상적인 상품 생성 함수들(makeCar,makeEngine,makeBody)을 정의한다. 그 때 우리는 상품 집합 당
하나의 구체적인 팩토리 하위 클래스를 정의한다. 각각의 하위 클래스들은 적당한 부분을 만들고 반환하기 위해서 상품 생성
함수를 재 정의한다. 그래서 우리는 Object를 상속한 새로운 하위 구조를 추가한다.
자동차 부분(part) 생성 메쏘드를 구현하기 위해서, 우리는 추상 팩토리 클래스로 시작한다.
그리고 이 메쏘드를 오버라이드하는 구체적인 하위 클래스를 추가한다.
아직, 확실하지 않는 한 부분이 있다. CarAssembler는(factory 클라이언트) 어떻게 구체적인 CarPartFactory 하위 클래스의 인스턴스를 얻을 수 있을까? 그것은 특별한 하위 클래스 자체를 소비자의 선택에 기초해서 인스턴스화 할 수 있을 것이다. 혹은 외부 객체에 의해서 팩토리 인스턴스를 다룰수도 있을 것이다.
하지만, 두 경우에 자동차를 생성하기 위한 코드와 그것의 컴포넌트 하위 부분은 여전히 같다. 즉, 모든 CarPartFactory 클래스들은 동일한 메시지 프로토콜을(다형성)을 구현하기 때문에, 팩토리 클라이언트는 팩토리 타입이 무엇인지 상관하지 않고 호출을 할 수 있다. 그것은 단지 팩토리 프로토콜에 의해 제공되는 일반적인 메시지를 전송한다.
ABSTRACT FACTORY 접근은 좀더 모듈적이고, 좀더 쉽게 확장 가능한 디자인을 할 수 있다. 시스템에 새로운 타입의 자동차를 추가하기 위해서, 우리는 CarPartFactory의 서브 클래스를
- 날다람쥐 6월9일 . . . . 21 matches
= 포인터(Pointer)에 대해서. =
포인터란?
포인터란, 어떤 변수의 '주소'를 참조하는 변수이다. 예)
포인터는 *라는 문자를 통해서 표현하는데,
예를 들어 int *ip, i; 이렇게 하면 뒤의 i는 일반적인 int로, 앞의 ip는 포인터 INT형으로 선언이 된다.
포인터가 가리키는 곳의 값을 쓸 때는 앞에 *을 붙인다. 예) int a = 13; int* ap = &a; printf("%d %d", a, *ap);
하지만 포인터를 왜'쓰는지 잘 모르는 경우가 많다.-_-;
함수 내에서 값을 아무리 바꿔봤자 지역변수 의 내용은 바뀌지 않는다. 이것을 어디서나 쓸 수 있게 하기 위해서.
*cp = a + b; // cp라는 포인터가 가리키는 주소의 값을 a + b로 바꿔준다(main 함수 안의 c).
= 배열과 포인터 =
= 포인터를 이용한 간단한 프로그램 =
이름과 반을 3개 입력받고 포인터를 이용해서 edit라는 함수 안에서 2번째 입력받은 사람을 수정한 후 다시 출력하기. 예) 유정석 1
= 배열의 이동을 포인터로?! =
배열의 이동을 포인터로 :
포인터를 이용한 간단한 프로그램 :
scanf("%s %d", NameC, NumC);// 포인터이므로 '&' 를 붙이지 않는다.
NameC = Name2;//배열도 일종의 포인터이므로 Name2 앞에 '&' 을 붙이지 않는다.
NumC = &Num2;//Num2는 포인터가 아니므로 '&' 을 앞에 붙여야 한다.
edit(NameC, NumC);// NameC 와 NumC, 즉 주소를 edit함수로 전달.
- Gof/Mediator . . . . 20 matches
다른 다이얼로그 박스들은 도구들 사이에서 다른 dependency들을 지닐 것이다. 그래서 심지어 다이얼로그들이 똑같은 종류의 도구들을 지닌다 하더라도, 단순히 이전의 도구 클래스들을 재사용 할 수는 없다. dialog-specific dependency들을 반영하기 위해서 customize되어져야 한다. subclassing에 의해서 개별적으로 도구들을 Customize하는 것은 지루할 것이다. 왜냐하면 많은 클래스들이 그렇게 되어야 하기 때문이다.
director가 리스트 박스와 입력 필드 사이의 조정하는 방법을 요약하자. 도구들은 서로 단지 간접적으로 director을 통해서 통신한다. 그들은 서로에 대해서 몰라야 하며, 그들 모두는 director를 알아야 한다. 게다가 행위는 한 클래스에 지역화 되어지기 때문에 행위는 클래스를 확장하거나 교체함으로써 변하거나 바꿔질 수 있다.
FontDialogDirector 추상화가 클래스 library를 통하하는 방법은 다음과 같다.
DialogDirect는 다이얼로그의 전체 행위를 정의한 추상 클래스이다. client들은 화면에 다이얼로그를 나타내기 위해서 ShowDialog 연산자를 호출한다. CreateWidgets는 다이얼로그 도구들을 만들기 위한 추상 연산자이다. WidgetChanged는 또 다른 추상 연산자이며, 도구들은 director에게 그들이 변했다는 것을 알려주기 위해서 이를 호출한다. DialogDirector subclass들은 CreateWidgets을 적절한 도구들을 만들기 위해서 override하고 그리고 그들은 WidgetChanged를 변화를 다루기 위해서 override한다.
* 몇몇의 클래스들 사이에 분산되어진 하나의 행위가 많은 subclassing하는 작업 없이 customize되어져야 할 때.
1. MediatorPattern은 subclassing을 제한한다. mediator는 다시말해 몇몇개의 객체들 사이에 분산되어질 행위를 집중한다. 이런 행위를 바꾸는 것은 단지 Mediator를 subclassing하기만 하면 된다. Colleague 클래스들은 재사용되어질 수 있다.
1. 추상 Mediator 클래스 생략하기. 추상 Mediator 클래스를 선언할 필요가 없는 경우는 colleague들이 단지 하나의 mediator와만 작업을 할 때이다. Mediator클래스가 제공하는 추상적인 coupling은 colleague들이 다른 mediator subclass들과 작동학게 해주며 반대의 경우도 그렇다.
우리는 DialogDirector를 Motivation에서 보았던 것처럼 font dialog를 구현하기 위해서 사용할 것이다. 추상 클래스 DialogDirector는 director들을 위한 interface를 정의 하고 있다.
Widget 은 widgets들을 위한 추상 기초 클래스이다. 하나의 widget은 자신의 director를 알고 있다.
FontDialogDirector 클래스는 다이얼로그 박스의 widgets사이에 중간이 위치한다. FontDialogDirector는 DialogDirector의 하위 클래스이다.
기본적으로 FacadePattern은 클래스 집단이 있고, 그 클래스 집단을 사용하는 외부 클래스의 입장에서 필요한 패턴이고, MediatorPattern은 클래스 집단이 있고, 그 클래스 집단 내부에서 서로를 사용하기 위한 패턴이다.
- JavaScript/2011년스터디/3월이전 . . . . 20 matches
* with함수 사용시 발생할 수 있는 오류에 대해 알고싶다...(책에서는 생략함)
* 레퍼런스로 함수를 직접 보면서 하니까 한눈에 들어와 좋았다
* 최상위레벨의 범위와 함수의 정의
이곳에서는 함수의 정의가 불가능 하다.
* 자바스크립트에서 함수의 전달인자가 개수의 제한이 없다는 점
* 함수가 데이터로써 사용될수 있다는점
* 슈도 클래스란 함수로서 선언되기 때문인가?
* Argument는 실행중인 함수의 정보를 정의한다 : 함수에 넘기는 파라메터가 유동적임..
* 중첩된 함수는(내부 함수) 익명 함수이면안됨
* 익명함수를 사용한 Dynamic programming
* 함수 내부에서 arguments 객체에 함부로 접근할 경우 생길 수 있는 문제점
* 함수 안에 익명함수 중복으로 쓸 경우 즉시 호출하거나 변수에 넣어 호출 가능하게 만들어야 한다.
* 존 레식이 클래스를 구현한 코드를 보았다!!
* 슈퍼클래스, 서브클래스화를 배웠다
- OurMajorLangIsCAndCPlusPlus/stdlib.h . . . . 20 matches
|| NULL || 널 포인터 상수 값 ||
|| RAND_MAX || 랜덤 함수에 의해서 리턴되는 최대 값 (적어도 32, 767) ||
|| struct div_t || div() 함수에 의해 리턴되는 구조체형 ||
|| struct ldiv_t || idiv() 함수에 의해 리턴되는 구조체형 ||
== 함수 (Functions) - String Functions ==
|| 함수 명 || 설명 ||
== 함수 (Functions) - Memory Functions ==
|| 함수 명 || 설명 ||
== 함수 (Functions) - Environment Functions ==
|| 함수 명 || 설명 ||
|| int atexit(void (*func)(void)); || 프로그램이 정상적으로 종료될 때 전달인자로 넘겨진 함수포인터를 이용해서 특정 함수 실행 ||
== 함수 (Functions) - Searching and Sorting Functions ==
|| 함수 명 || 설명 ||
== 함수 (Functions) - Math Functions ==
|| 함수 명 || 설명 ||
== 함수 (Functions) - Multibyte Functions ==
|| 함수 명 || 설명 ||
== stdlib.h 의 함수 예제 ==
- ProgrammingWithInterface . . . . 20 matches
언제나 개발을 할 때 '어라~ 같은 일 하는데? 이거 Base 클래스 만들어서 위로 올려야 겠는데?' 일말의 틈도 주지 않고 실행한다. 다형성을 사용하는 코드를 생성한다. '와우~! 한결 깔끔해 졌는걸?' 하지만 오산이었다. 시간이 지나서 먼가 추가할 동작들이 생겼다. 이제 고치기 시작한다. Base 클래스 부터... 고치고 나니 컴파일이 되지 않는다. 코드 수정의 여파가 하위 클래스들에게 까지 미친다. 정말 미친다. 이런 상속을 통한 계층 구조는 상위 클래스와 하위 클래스의 결합도를 높여준다. 지나 치게 크게..! 동감하지 않는가? 하나를 고쳤는데 수정할 꺼리가 마구 쏟아지는 상황을...
상속을 사용하는 상황을 국한 시켜야 할 것같다. 상위 클래스의 기능을 100%로 사용하면서 추가적인 기능을 필요로 하는 객체가 필요할 때! .. 이런 상황일 때는 상속을 사용해도 후풍이 두렵지 않을 것 같다. GoF의 책이나 다른 DP의 책들은 항상 말한다. 상속 보다는 인터페이스를 통해 다형성을 사용하라고... 그 이유를 이제야 알 것같다. 동감하지 않는가? Base 클래스를 수정할 때마다 하위 클래스를 수정해야 하는 상황이 발생한다면 그건 인터페이스를 통해 다형성을 지원하는게 더 낫다는 신호이다. 객체는 언제나 [[SOLID|SRP (Single Responsiblity Principle)]]을 지켜야 한다고 생각한다.
자 모든 값을 clear 를 사용해 삭제했는데 topOfStack의 값은 여전히 3일 것이다. 자 상속을 통한 문제를 하나 알게 되었다. 상속을 사용하면 원치 않는 상위 클래스의 메소드까지 상속할 수 있다 는 것이다.
상위 클래스가 가지는 메소드가 적다면 모두 [오버라이딩]하는 방법이 있지만 만약 귀찮을 정도로 많은 메소드가 있다면 오랜 시간이 걸릴 것이다. 그리고 만약 상위 클래스가 수정된다면 다시 그 여파가 하위 클래스에게 전달된다. 또 다른 방법으로 함수를 오버라이딩하여 예외를 던지도록 만들어 원치않는 호출을 막을 수 있지다. 하지만 이는 컴파일 타임 에러를 런타임 에러로 바꾸는 것이다. 그리고 LSP (Liskov Sustitution Principle : "기반 클래스는 파생클래스로 대체 가능해야 한다") 원칙을 어기게 된다. 당연히 ArrayList를 상속받은 Stack은 clear 메소드를 사용할 수 있어야 한다. 그런데 예외를 던지다니 말이 되는가?
자.. Stack과 ArrayList간의 결합도가 많이 낮아 졌다. 구현하지 않은 clear 따위 호출 되지도 않는다. 왠지 합성을 사용하는 방법이 더 나은 것 같다. 이런 말도 있다. 상속 보다는 합성을 사용하라고... 자 다시 본론으로 들어와 저 Stack을 상속하는 클래스를 만들어 보자. MonitorableStack은 Stack의 최소, 최대 크기를 기억하는 Stack이다.
깔끔한 코드가 나왔다. 하지만 MonitorableStack은 pushMany 함수를 상속한다. MonitorableStack을 사용해 pushMany 함수를 호출하면 MonitorableStack의 입력 받은 articles의 articles.length 만큼 push가 호출된다. 하지만 지금 호출된 push 메소드는 MonitorableStack의 것이라는 점! 매번 size() 함수를 호출해 최대 크기를 갱신한다. 속도가 느려질 수도 있다. 그리고 만약 누군가 Stack의 코드를 보고 pushMany 함수의 비 효율성 때문에 Stack을 밑의 코드와 같이 수정했다면 어떻게 될 것인가???
- Ruby/2011년스터디/세미나 . . . . 20 matches
*함수조차 nilClass의 멤버함수
* nilClass의 인스턴스는 nil하나, prototype은 없음. 다른 함수들은 가지고있음
* 멤버변수도 객체, 객체안의 객체!
* 루비에서는 클래스명이 대문자로 시작해야한다!(아니면 에러)
* initialize 함수로 객체 선언하기
* 멤버변수 선언하기(@)
* 이미 생성된 인스턴스에 멤버함수 추가하기
* 함수의 오버라이딩
* 부모 클래스를 동적 변경하면, 자식 클래스의 인스턴스는 어떻게 될까?
* 루비의 클래스/메소드 체이닝을 가르칠까요?
* 루비의 함수는 () 생략가능!
* 블럭을 이용한 반복자 함수
* 아.. 세미나가 끝나니까 할말이 생각나네요..ㅠㅠ 루비의 블록 넘기기는 사실 블록이 yield구문에게 전달되는 것이 아니라 yield를 만나면 함수의 호출부로 컨트롤이 이동해 블록이 있는지 확인하고 실행합니다. 책에서는 co-routine 이라고 이해하면 된다는 설명이 있어요~ 블록이 전달되는게 아니라 컨트롤 플로우가 왔다갔다!! 스위치 태스킹처럼요. 세미나때 설명을 잘 해드렸어야 했는데 죄송천만번입니다 - [서지혜]
* ''의도가 명확하다는 것''이 무엇인지 설명하는 것보다 의도가 명확하지 않은 상황을 제시하는 게 이해하기 좋을 것 같으니 하나 예를 들어볼게. RubyLanguage에서 괄호를 쓰지 않아도 되는 것은 if 구문에 대해서만 그런 것은 아니야. 함수의 경우도 마찬가지지. 만약 내가 매개변수 a와 b를 받아 그 둘을 더해 반환해주는 함수 add(a, b)를 만들었다 치자. 이 메서드를 다음과 같이 이용할 수 있겠지.
* 스스로 찾아보시다니 좋은 자세이십니다. { |x| ~~ } 블록구문은 처음엔 잘 이해가 가지 않지만(지금도) 함수의 구현마저 동적인 루비의 장점이 잘 나타나 있는 부분이라 생각됩니다. - [서지혜]
- 새싹교실/2012/세싹 . . . . 19 matches
- 즉, 소켓 프로그래밍도 해당 함수와 하위 함수들의 작동원리를 잘 모르더라도 어떤 기능을 하는지만 알면 쉽게 통신 프로그래밍을 할 수 있습니다.
* 오피에서 숙제를 했습니다. VS로 하려니까 뭔가 막 오류가 나는데 고치지는 못하겠고 그래서 우분투를 깔아서 시도를 했네요. 용어가 익숙하지 않아서 그런지 함수 설명을 봐도 한번에 와닿지 않아서 힘들었습니다. 아 그리고 숙제를 하다가 생긴 문제인데요. 서버 프로그램을 처음 실행했을 때는 괜찮은데 두 번째로 실행했을 때는 Bind에러가 나네요. 그래서 매번 실행할 때마다 포트값을 수정해야했습니다. 왜 이런 문제가 생긴걸까요? - [권영기]
* 자세한 해결 방법입니다. 소켓을 생성하고나서 바로 setsockopt(mySocket, SOL_SOCKET, SO_REUSEADDR, &anyIntegerVariableThatContainsNonZero, sizeof(anyIntegerVariableThatContainsNonZero)); 함수를 호출하면 이 소켓의 생명이 다하는 순간 해당 포트에 자리가 나게 됩니다. - [황현]
* 데이터 처리에 대하여 좀 더 검색하였는데 기본적으로 send된 정보는 버퍼에 계속 쌓이며, recv가 큐처럼 버퍼를 지우면서 읽는다고 되어있었습니다. 반면 read와 같은 파일포인터 함수로 읽으면 버퍼를 지우지않고 파일포인터만 이동하는 것 같더군요. recv도 옵션을 변경하면 버퍼에 계속 누적해서 보관할 수 있는거 같습니다.
* 스레드 실행 시점이 그때그때 달라서 값이 변하는 변수의 포인터를 인자로 주면 안되는군요. 그것 때문에 고생했습니다. - [김희성]
* 채팅 코드를 보기 좋게 수정해봅시다. 힌트 - cpp 분할, 함수화
* CreateFile함수를 처음 사용하여보았습니다. - [김희성]
* fopen의 경우 Standard함수인데 같은 input일 때, 리눅스에서 다르게 작동할지 궁금합니다. - [김희성]
ReadFile은 파일포인터를 읽은 만큼 옮기던데 ReadSector에서는 옮긴 지점부터 섹터 단위로 세어서 읽는 건가요? 아니면 처음부터 다시 세어 읽는건가요? - [김희성]
* 함수를 반복해서 실행해 보았는데 읽는 위치가 같은 걸 보아, 파일 처음 부분부터 단위를 세는 것이군요. - [김희성]
* CreateFile함수 사용시 문자열이 LPCWSTR로 변환되지 않는 문제가 생기는 경우에는 CreateFileA를 사용해보세요.
i=((int)(*((unsigned char*)MFT+21))<<8)+*((unsigned char*)MFT+20);//Offset으로 포인터 이동
* 뒤집어 읽는 함수는 없고, 리틀엔디언을 빅엔디언으로 변환하는 함수는 있군요.
point=((int)(*((unsigned char*)MFT+21))<<8)+*((unsigned char*)MFT+20);//Offset으로 포인터 이동
클래스화 중, 읽을 수 있는 속성을 늘리는 중. (현재 기본 정보, 파일 이름, data 영역 읽기 가능)
- CleanCode . . . . 18 matches
* 클래스의 이름을 지을 때는 -info, -data와 같은 일반적인 이름을 쓰지 말라.
* Account를 만들면 되지 AccountInfo라는 클래스를 만들 필요는 없다. Account 클래스 내부에 들어가는 정보가 Info니까.
* 아래와 같은 식으로 Account내부의 정보를 하나로 묶으면 AccountInfo 클래스와 getAccountInfo()등이 있을법하지 않은가? -> 저런 구조 자체가 잘못됐을 수 있다. getAccountInfo()와 같은 방법이 아니라 다른 방법으로 일을 시키는 모양이 더 낫다.
* 함수
* 함수는 하나의 일을 하는게 좋다고 하는데 플래그를 쓴다는 것은 함수가 플래그의 값에 따라서 다른 값을 한다고 말하는 것이므로.
* 차라리 다른 일을 하는 함수를 여러개 만드는게 더 낫다.
* 함수 인자는 적을수록 좋다.
* 함수 인자가 많아지게 되면 사용자가 인자들에 대해서 이해를 하기 힘들다.
* 에러를 방지하거나, 처리하는 코드 때문에 함수의 본 임무를 파악하기 힘들게 되면 안됩니다.
* callback 함수라는 것을 이용해서 작업이 끝났을 때 처리할 방법을 정할 수 있다.
* 로그인 성공, 실패에 따른 callback 함수를 한 번에 넘기고 있다.
* 현재는 callback 함수에 이름을 붙여서 인자에 넣고 있지만 주로 익명 함수를 쓰는 js의 특징이나 프로그래머가 직접 이름을 붙여서 관리를 해야 하는 등의 불편함을 고려하여 다른 방식으로 수정하고 싶다.
* 각 callback 함수에 대한 의도가 보다 잘 드러남.
* 자바스크립트에서 지원하는 apply 함수와 arguments로 함수의 인자값을 받아올 수 있는 것을 이용해 외부의 라이브러리 사용 없이도 간단하게 proxy를 구현할 수 있다. jquery-aop 등의 외부 라이브러리도 있다.
- 새싹교실/2011/Noname . . . . 18 matches
* 키보드로부터의 입력받기 : scanf함수
* 함수 #define함수와 일반함수
* 일반함수
자료형 함수명(배개변수){
함수몸체
* #define함수
* 연산자의 종류들과 #define함수의 활용법에 대해서 배웠습니다. 아직 C프로그래밍이 익숙지 않아서 간단한 함수도 어렵게 느껴졌다. 여러 예재로 우선 C프로그래밍에 익숙해 져야 겠다. 수업이 끝난 후 복습을 꼭 해야겠다. - [김창욱]
* 함수만들기
* 재귀함수의 사용
* Factorial 함수만들기
* 피보나치 수열 함수만들기
* 하노이탑 함수 만들기
* 재귀함수의 사용법을 익숙하게 하기 위하여 여러가지 예제를 풀어보았습니다. 처음 두가지 예제는 비슷해서 그런지 금방 끝냈는데 하노이탑은 힘들어 하더라구요. 저도 작년에 이 문제를 풀기위해 온갖 노력을 하다가 그때 선생님의 도움으로 간신히 풀었는데 그 기분이 짱이더라구요. 하노이탑까지는 꼭 풀고 다음을 배워야겠습니다. - [박정근]
* 배열만을 공부하려니까 자꾸 포인터쪽으로 연결되네요ㅠㅠ 포인터는 나중에 따로하려고 했는데 배열을 하면서 같이 공부해야겠습니다. - [박정근]
- 새싹교실/2011/무전취식/레벨7 . . . . 18 matches
stack call은 어떤 함수가 불려졌을때 그 함수가 돌아오기 위해 스택에 자신이 불리어진 위치를 저장하는것.
이진영 : 포인터는 너무 어려워용 ㅠㅠ <b>오빠가 너무 잘가르쳐줘서 감사해용<b>
이소라 : 제가 왜 포인터를 포기했는지 알것 같아요. 이제 끝났다.
* 이제 포인터라는걸 배웠는데 너무 어렵습니다. 주위 친구들은(능력자들) 미리 배워놔서 잘 쓰고 있다는 말을 들으니 너무 부러워요ㅋ. 인터넷에 보니까 포인터배열,배열포인터라는게 있더군요 이게 뭔 소린지ㅋㅋㅋㅋ 다 자기하기 나름이지만 계속해서 난이도가 높아지는 C프로그래밍이 무서워지기 시작합니다ㅋㅋ C과제도 점점 어려워지는데 자기스스로 한게 반정도 쯤? 나머지는 인터넷,선배님 찬스ㅋㅋ 방학동안에 C공부를 엄청나게 해야할것 같아요. 기말고사도 1달을 앞두고 있는데 중간고사때처럼 망치면 안되니까 열심히 복습을 해야겠습니다 - [서원태]
* 포인터의 심화과정은 정말 길지. 그것의 기본 개념을 배웠다고 생각하면된다. 후기 먼저써준것 고맙다. 천릿길도 한걸음 부터라고 너가 하고있는 일이 하나하나 너에게 힘으로 돌아올꺼야. 그리고 인터넷을 찾고 선배들에게 물어보는것은 분명한 '검색'의 일종이다. 자주 찾아서 쓰다보면 너의 지식이 될꺼야. - [김준석]
* 지난 시간 복습을 하고! 드디어 그 포인터라는 것을 들어갔습니다..학기초에 소라가 포인터 포인터@.@ 라고할때 그 포인터가 이렇게 일 찍 다가올 줄은 몰랐네요..ㅋㅋㅋ ㅠㅠ오빠가 잘 설명 해주셔서 대충은 알 것같아요 ㅎㅎㅎㅎ 하지만 꽉 잡고 싶어용! 앞으로 3년은 편해진다고 하시기에......ㅎㅎㅠㅠ 이제 첨 시작 한거니까 겁먹지 않을 테여요!! ㅎ ㅔ헹~~!복습을 마니 해서 좋아요!! - [이진영]
* 우린 복습을 위주로 가르키지! 지식이란 좀 숙성되는데 시간이 걸리니까!!! 포인터를 가르치는건 매우 힘들지용 사람은 기본적으로 계산에 약해.. 그래서 연결되고 연결되고 연결되는 관계를 모르지용... 하지만! 계속 계속 포인터 써보다 보면 느는게 포인터 입니다! 이번 학기 말에는 MFC도 건들여보았으면 좋겠는데 말이지. -[김준석]
내일 맛잇는거 사들고 갈게요 ㅠ 그나저나 포인터를 배웟군요... 어렵다 하아 -[강원석]
* 저도 포인터를 포기한 경험이 있어서 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ못해요.... 앞으로 오빠한테 잘 배울게용...하하 천천히 가르쳐주세용>_< 배열선언하고 배열이름엔 배열이 시작되는 주소값이 들어간다는 것도 배웠어요. 이제 점점 더 어려워지겠죠..흑흑 걱정이 앞서여어어어 이제 소라찬스따윜ㅋㅋㅋㅋ -[이소라]
* 그렇지.. 근데 기계적인 포인터의 개념은 어려운게 아니니까... 잘 가르쳐주마!! - [김준석]
- 새싹교실/2012/AClass/4회차 . . . . 18 matches
-이중포인터는 포인터의 주소값을 갖는 것입니다. 그거에 따라서 &c는 자기 자신 주소를 의미하는 것이고 c는 포인터 a의 주소값을 말합니다. *c또한 a의 주소값입니다 . &a는 a의 주소값, a는 a가 b를 가리키는 것이라면 b의 주소값을 말합니다.
-해설 : 우선 int형 자료형을 가진 데이터의 주소를 가리키는 포인터로 a지정, b의 값에 5를 지정, 포인터의 주소를 가리키는 c를 지정하였다. a의 주소를 이중 포인터 c에 주었다. b의 주소는 포인터 a에 할당하였다. 그리고 이중포인터c에 값을 9로 주었다. 이것은 원래의 a의 주소값을 갖고 있던 c에 9를 대체해준 것이다. 따라서 프린트 *c,**c를 하면 a의 주소와 9가 출력이 된다.
- c언어에서는 char,int,float 와 같은 많은 수의 기본 데이터 형과 배열, 포인터, 구조체 등의 유도된 데이터형으로부터 새로운 데이터형을 만들 수 있는데, 사용자 측면에서 새로운 데이터 형을 정의 할 수 있도록 typedef선언을 제공한다. typedef은 #define과 달리 이미 존재하는 c언어의 데이터 형만을 취하여 정의하고 typedef은 프리프로세서에 의해 처리되는 것이 아니라 c컴파일러에 의해 처리된다. 또한 #define보다 다양한 형태의 치환이 가능하다.
9.2중포인터를 이용하여 3x3행렬을 두개 만들고, 두 배열의 합을 출력하는 프로그램을 짜보세요.
//10.LinearSearch를 구현해보세요. 배열은 1000개로 잡고, random함수를 이용해 1부터 1000까지의 숫자를 랜덤으로 배열에 넣은 후, 777이 배열내에 있었는지를 찾으면 됩니다.
- 데이터를 넣을 Name이라는 변수와 다음 노드를 가리킬수 있도록 하는 Next포인터 변수를 선언했다.
9. 2중포인터를 이용하여 3x3행렬을 두개 만들고, 두 배열의 합을 출력하는 프로그램을 짜보세요.
LinearSearch를 구현해보세요. 배열은 1000개로 잡고, random함수를 이용해 1부터 1000까지의 숫자를 랜덤으로 배열에 넣은 후, 777이 배열내에 있었는지를 찾으면 됩니다. 프로그램을 실행시킬 때마다 결과가 달라지겠죠?
struct Node *NextNode; //다음 노드에 대한 포인터
NODE* 를 반환하는 CreateNode다. NewNode라는 포인터를 생성후 그 해당하는 주소에 malloc함수로 공간을 할당하고 있다.
Malloc으로 할당한 공간은 해당 함수가 끝나도 해제되지 않는다. 이건 속성이 다른 메모리 공간에 할당 했기 때문이다.(?????)
- 새싹교실/2012/우리반 . . . . 18 matches
* 오늘은 태진이형이 내주신 과제를 같이 해보면서 printf와 scanf 자료형 temp if else if를 섞어가며 각각의 함수를 알아보았다. 헷갈리는건 아직 마찬가지지만, 훈련하면 나아질거라고 생각한다. c언어는 정말 규칙이 많은것 같다. 집에서 코딩연습이 필요하다고 생각했고, 여러 규칙지키면서 해야하겠다 ㅋㅋ -[권도현]
* [권도현] - switch, while, for을 배웠습니다. 어려워서 정신을 못차리겠어요 ㅠㅠ 열심히 연습해볼게요 ㅠㅠ ;랑 괄호 주의해야겠습니다. 많은 함수가 아직도 낯설어요.. 코딩 정말 어렵네요..
* 함수에 관하여. scope ( 지역변수, 전역변수), 매개변수.
* 심화로 재귀함수에 대하여.
* do-while, 함수, return, scope, {}
* 점심약속 빨리 끝내고 와서 오늘은 함수를 배웠다. int main()이런 함수를 연달아 써서 함수간의 연결이나 끊김같이 조금은 복잡한 것을 배웠다. 아직 구성이 눈에 않익어 힘들지만 이해가는 부분도 꽤 있었다. 원래 하는날이 아닌데 해주신다고 하신 태진이형 감사합니다 ^^ -[권도현]
* [이미경] - 함수에 대해서 배웠다. 재귀함수도 배웠는데 너무 어려운거 같다 ㅠㅠ 자꾸 부르고 또 부르고 해서 결과를 예측할 수 없었다 ㅠㅠㅠ do while이랑 << 도 배웠는데 <<할 때 2진수까지 생각해야해서 화났다.
오늘은 scope를 배웠다. 함수안의함수 구조가 단순했지만 코드를 처음써보니 어렵게 느껴졌다. 서치, 함수안의함수 스코프 수업시간내에서 배웠지만 기억이 나질 않았다. ㅠ 앞의수업 코딩연습을 하면 뒤수업이 나가고 이게 반복되서 자꾸 못하는거같다. 먼저것, 뒤에것 같이 코딩연습을 해봐야 겠다. -도현-
* 함수와 배열을 배웠다. 배열 쓸 때 0부터 시작하는 걸 잘 기억해야겠다. 중간고사 끝나고 처음 수업 했더니 예전에 배웠던 게 헷갈려서 당황스러웠다. -[미경]
* 구조체??, 2중포인터??
* 포인터
* 저번 시간이랑 이번 시간 두 번에 걸쳐서 포인터에 관한 내용을 배웠는데 코드를 보면 그 당시에는 이해하는데, 다시 직접 해보려니 헷갈린다ㅜㅜ 혼자서 많이 연습해봐야 할 것 같다. 또 동적 할당에 대해서도 배웠는데, 배열과 비슷해서 이해하기 좋았다. 마지막 수업이라 뭔가 아쉽지만.. 한 학기동안 잘 가르쳐주셔서 C 수업 따라갈 수 있었던 것 같다 ^ㅡ^ -[미경]
- 새싹교실/2012/해보자 . . . . 18 matches
- 나중에 함수 배울때 다시 배웁니다.
2. swap(int num1, int num2)함수를 구현하시오. 함수 호출을 배우지 않았기 때문에, 그리고 포인터를 아직 배우지 않았기 때문에 기본적인 코드를 제공합니다.
* 함수는? 수학에서의 함수와 동일한 개념. 매개변수를 넘겨주면 결과값이 나온다!
- 결과값: 함수의 자료형, 즉 반환형
- 함수의 반환형은 변수의 자료형과 같이 쓰면 된다.
- void형은 반환하는 값이 없는 함수다.
* int main()함수에서 return 0를 하는 이유: 메인 함수는 0을 반환하면 프로그램이 끝났다는 것을 알린다.
- void main()은 메인 함수가 아니다!
* 함수의 선언: 컴파일러에게 '이런 이런 함수를 쓸것이다'라고 알리는 것.
* 함수의 정의: 컴파일러에게 '이런 이런 함수는 이런 이런 일을 한다'라고 알리는 것.
* 함수의 호출: 함수에게 매개변수 등을 넘겨주어 결과값을 기다리는 것.
- 5인용C++스터디/클래스상속 . . . . 17 matches
== 클래스 상속 ==
기존의 클래스 위에서 새로운 클래스를 생성할 수 있는 능력을 가르킨다.
즉 어떤 클래스가 다른 클래스의 성질을 물려받는 것.
사람 - 이름, 나이, 살고있는곳,... (기본클래스)
직장인 - 직장명,월급... (서브클래스)
학생 - 학생ID,... (서브클래스)
== 예2)상속할 기본클래스 구축하기 ==
private는 내부의 멤버함수에서만 엑세스가 가능, 즉 리스팅의 다른 부분에서는 데이터멤버나 값에 엑세스하는 것을 막는다.
하지만 상속하려면 private값을 이 기본 클래스에서 상속한 클래스에서 직접 엑세스 한는 것을 혀용하고 싶을 것이다.
이에 protected키워들를 사용해서 현재클래스와 상속하는 클래스에게만 엑세스를 허용한다.
== 예2-1) 서브 클래스 추가하기 ==
- Chapter I - Sample Code . . . . 17 matches
OS에서 공유자원이나 특정코드가 수행되는 도중에 다른 프로세스에 의해 interrupt 되는것을 방지하기 위해 크리티컬 섹션을 사용하게 된다. 이는 윈도우즈 프로그래밍에서 스레드관련 처리를 해 줄 때에도 나오는 용어이다. uCOS-II에서는 단순히 매크로함수를 이용해 크리티컬섹션에 들어오기와 나오기를 한다. 매크로함수가 하는 일은 단순히 인터럽트를 무효화, 유효화 시키는것 뿐이다.
수행시간 측정은 한 task 의 수행시간을 측정하기 위해서 한다. (당연한거 아냐?). 이 측정은 PC의 82C52 타이머 2번을 통해 수행된다. 수행시간 측정을 위한 함수로는 PC_ElapsedStart()와 PC_ElapsedStop()이 있다. 하지만 이 두 함수를 사용하기 전에 PC_ElapsedInit()를 호출해야한다. 이 함수는 두 함수와 관련된 오버헤드를 측정하는데 사용된다. 이렇게 하면 PC_ElapsedStop 함수에 의해 수행시간이 리턴된다(마이크로세컨드). 이 두 함수는 모두 리엔터런트(주 : 몇 개의 프로그램이 동시에 하나의 task나 subroutine을 공유하여 쓰는 것에 대해 말함, from 한컴사전) 하지 않아야한다. 다음은 PC_DispChar()함수의 측정시간을 구하는 예이다.
uCOS-II는 여타의 DOS Application 과 비슷하다. 다른말로는 uCOS-II의 코드는 main 함수에서부터 시작한다. uCOS-II는 멀티태스킹과 각 task 마다 고유의 스택을 할당하기 때문에, uCOS-II를 구동시키려면 이전 DOS의 상태를 저장시켜야하고, uCOS-II의 구동이 종료되면서 저장된 상태를 불러와 DOS수행을 계속하여야 한다. 도스의 상태를 저장하는 함수는 PC_DosSaveReturn()이고 저장된 DOS의 상태를 불러오는것은 PC_DOSReturn() 함수이다. PC.C 파일에는 ANSI C 함수인 setjmp()함수와 longjmp()함수를 서로 연관시켜서 도스의 상태를 저장시키고, 불러온다. 이 함수는 Borland C++ 컴파일러 라이브러리를 비롯한 여타의 컴파일러 라이브러리에서 제공한다.[[BR]]
'''uCOS-II를 끝내기 전에 PC_DOSSaveReturn 함수를 호출해야한다. 그렇지 않으면 DOS가 curruped mode 가 되어버리고 이것은 당신의 windows에 영향을 줄 수도 있다.'''
- MFCStudy_2001/진행상황 . . . . 17 matches
* 알게된점 또는 처음해본것 : 내가 만든 클래스 넣기,has-a 포함 이랑 더블 버퍼링이랑 2차원 배열 전달하기,강제 형변환의 위험성,
lib파일 포함시키는 범,릴리즈 모드와 디버그 모드의 차이점,메인 윈도우의 포인터 얻어오기(CAlcaDlg *pDlg=(CAlcaDlg*)AfxGetMainWnd();)
고친점 : 별로 없다. 비트맵을 멤버 변수로 넣었다.
일단 클래스 별로 다 분류하긴 했지만.. 개별 멤버에 접근하려니까(3번째에서는 몽땅 리턴하는
함수를 마니 만들었었다.) 함수 만들기도 짜증나고 해서.. 다 프렌트 클래스로 넣어 버렸다. 좀
*1월 14일 : 공이 떨어지는 각도를 랜덤함수를 사용해서 일정하지 않도록 함, Stage 4, 5 그림
*1월 14일 - 13일 일요일에 석천이형의 조언에 따라 코드 전체적으로 대대적인 Refactoring(이 용어가 맞는지는 모르겠네여..^^;;)을 해서 할수 있는 한 많은 코드들을 함수로 만들었습니다. 이에 따라 라인수가 아주 많이 줄어들게 되었고, 공격과 방어 인공지능을 같은 함수로 동작하게 하여 방어 할 수 있는 패턴은 모두 컴퓨터 공격할 수 있게 하였습니다.(덕분에 코드를 체계적으로 만들때는 상당히 힘들었지만, 한번 그렇게 하니 작업이 훨씬 쉬어 졌습니다. 참으로 중용한 사실을 몸소 체험 한거 같습니다) 3,4 방어 및 공격 인공 지능을 추가 했습니다. 이제 사람을 이길 확률이 좀더 높아 졌지만, 아직도 부족한것 같고 띈 3,3 방어 및 공격과 효율적인 3 만들기를 추가할 예정입니다.
* 앞으로 더 할일(level3 공격 함수화, 띈 3,3 공격및 방어, 오목 알고리즘 문서화)
* level3공격의 함수화
* 또 아주 가끔 생기는 버그들 수정 및 띈 3,3 공격및 방어 함수 작성시도..(아직 달성 못함)
* 앞으로 더 할일 - 오목 알고리즘 문서화 및 띈 3,3 공격과 방어 함수 작성
* 이전까지 - C++ 가상함수, 상속에 대한 개념을 공부하고 윈도우에서 그림그리는 원리를 알았습니다. ㅜ.ㅜ
* 멤버 변수의 중요성을 깨닫고 있습니다. 참 유용하게 쓰입니다. -.-
- MoreEffectiveC++/Basic . . . . 17 matches
ps = &s2; // 그냥 포인터만 세팅하는 거다.
지역함수 안에서 지역 객체를 생성하여 Reference로 리턴할 경우 지역 함수가 반한되면 지역 객체는 없어질 것이고, 리턴되는 Reference는 존재하지 않는 객체에 대한 다른 이름이 될 것이며, 경우에 따라서 컴파일은 될지모르나 나쁜 코드라고 하네요.-차섭-
오해의 소지가 있도록 글을 적어 놨군요. in, out 접두어를 이용해서 reference로 넘길 인자들에서는 in에 한하여 reference, out은 pointer로 new, delete로 동적으로 관리하는것을 의도한 말이었습니다. 전에 프로젝트에 이런식의 프로그래밍을 적용 시켰는데, 함수 내부에서 포인터로 사용하는 것보다 in에 해당하는 객체 사용 코딩이 편하더군요. 그리고 말씀하신대로, MEC++ 전반에 지역객체로 생성한 Refernece문제에 관한 언급이 있는데, 이것의 관리가 C++의 가장 큰 벽으로 작용하는 것이 아닐까 생각이 됩니다. OOP 적이려면 반환을 객체로 해야 하는데, 이를 포인터로 넘기는 것은 원칙적으로 객체를 넘긴다고 볼수 없고, 해제 문제가 발생하며, reference로 넘기면 말씀하신데로, 해당 scope가 벗어나면 언어상의 lifetime이 끝난 것이므로 영역에 대한 메모리 접근을 OS에서 막을지도 모릅니다. 단, inline에 한하여는 이야기가 달라집니다. (inline의 코드 교체가 compiler에 의하여 결정되므로 이것도 역시 모호해 집니다.) 아예 COM에서는 OOP에서 벗어 나더라도, 범용적으로 쓰일수 있도록 C스펙의 함수와 같이 in, out 의 접두어와 해당 접두어는 pointer로 하는 규칙을 세워놓았지요. 이 설계가 C#에서 buil-in type의 scalar형에 해당하는 것까지 반영된 것이 인상적이 었습니다.(MS가 초기 .net세미나에서 이 때문에 String 연산 차이가 10~20배 정도 난다고 광고하고 다녔었는데, 지금 생각해 보면 다 부질없는 이야기 같습니다.) -상민
// 해당 부모 객체의 포인터에 자식 객체가 가르켜 있으면 형변환이 가능하다.
* Item 3: 절대로! 클래스 간의 다형성을 통한 배열 취급을 하지 말라
이런 클래스를 선언했다. 그리고 다음과 같은 함수로 해당 클래스의 배열을 사용한다고 가정하자
위의 두번째 호출의 클래스 상속의 다형적 성질을 이용한 함수 이용 즉
자 위와 같이 객체의 지움을 담당하는 함수를 작성했을때 역시 문제가 있다.
* '''첫번째 문제는 해당 클래스를 이용하여 배열을 생성 할때이다. . ( The first is the creation of arrays )'''
생각해 보라 Virtual base class가 왜 기본 생성자를 필요로 하는가. 생성자를 만들어 놓으면 상속하는 이후 모든 클래스들에게 로드가 걸리는 셈이 된다. 근원이 흔들려 모두가 영향을 받는 사태이다. 만약? 수만개의 객체 생성이라면 이건 굉장한 문제가 될수 있다.
- OurMajorLangIsCAndCPlusPlus/errno.h . . . . 16 matches
||4||int EINTR||가로채기 함수 호출;발생한 비동기 신호와 호출의 방해된 종료. 이럴 경우에 당신은 다시 호출을 시도해보라.||
||7||int E2BIG||인수가 너무 길다;실행함수에 의해서 실행되는 새로운 프로그램에 주어진 인수가 너무 큰 메모리 공간을 사용할 때.||
||14||int EFAULT||주소 오류; 유효하지 않은 포인터가 발견됨.||
||19||int ENODEV||디바이스의 특별한 정렬을 하는 함수에 주어진 디바이스가 잘못된 타입이다.||
||22||int EINVAL||적합하지 않은 인수. 이것은 라이브러리 함수에 잘못된 인수를 주는것과 같은 종류의 다양한 문제 를 지적하는데 사용한다.||
||32||int EPIPE||부러진 파이프; 다른 파이프의 끝에서 프로세스를 읽는 것은 불가능 하다. 모든 라이브러리 함수 는 SIGPIPE로 일반화된 에러코드를 리턴한다. 이 신호는 만약 처리되지 않거나 막아지지 않으면 그 프로그램을 멈추게 한다. 그러므로 프로그램이 처리되거나 블록된 SIGPIPE를 갖지 않으면 항상 EPIPE가 보일 것이다.||
||33||int EDOM||도메인 에러; 인수의 값이 정의된 함수를 지나 도메인에게 전달되지 않았을 때 수학적 함수에 의해 사용된다.||
||34||int ERANGE||범위 에러; 결과 값이 오버플로우나 언더플로우로 인해 표현되지 않을 때 수학적 함수에 의해 사 용된다.||
||39||int ENOLCK||유용한 락이 아니다. 이것은 파일 락킹 함수들에 의해 사용된다.||
||40||int ENOSYS||함수가 이행되지 않았다. 어떤 함수들은 정의된 옵션이나 명령들이 어떤것에서도 지원되지 않는 것이 있다. 만약 요청한 함수에서 이런 에러를 얻는다면 그것들은 지원되지 않는 것이다.||
|| ||int EINPROGRESS||비블록화 모드로 선택된 대상에 일으킨 완전하지 않은 오퍼레이션에 대해 발생. 어떤 함수들은 항 상 블록을 결코 리턴하지 않아야한다.||
|| ||int EOPNOTSUPP||당신이 요청한 그 오퍼레이션을 지원하지 않는다. 어떤 소켓함수는 소켓의 모든 타입들에서 이해할 수 없고 다른것들은 모든 통신 프로토콜을 충족시키지 못할 것이다.||
|| ||int EBACKGROUND||GNU 시스템에서 어떤 오퍼레이션의 호출자가 터미날의 전면처리 그룹에 없을 때 서버지원 프로토 콜에 이 에러가 리턴된다. 사용자들은 보통 이 에러를 보지 못하는데 왜냐하면 함수들은 SIGTTIN 이나 SIGTTOU신호로 해석하여 읽고 쓰기 때문이다.||
- STL/vector/CookBook . . . . 16 matches
* typedef으로 시작하는 부분부터 보자. 일단 반복자라는 개념을 알아야 되는데, 사실은 나도 잘 모른다.--; 처음 배울땐 그냥 일종의 포인터라는 개념으로 보면 된다. vector<int>::iterator 하면 int형 vector에 저장되어 있는 값을 순회하기 위한 반복자이다. 비슷하게 vector<Object>>::iterator 하면 Object형 vector에 저장되어 있는 값을 순회하기 위한 반복자겠지 뭐--; 간단하게 줄여쓸라고 typedef해주는 것이다. 하기 싫으면 안해줘도 된다.--;
* for 부분을 보면 앞에서 typedef 해준 VIIT 형으로 순회하고 있는것을 볼수 있다. vector<T>의 멤버에는 열라 많은 멤버함수가 있다. 그중에 begin() 은 맨 처음 위치를 가르키는 반복자를 리턴해준다. 당연히 end()는 맨 끝 위치를 가르키는 반복자를 리턴해주는 거라고 생각하겠지만 아니다.--; 정확하게는 '맨 끝위치를 가르키는 부분에서 한 칸 더간 반복자를 리턴'해주는 거다. 왜 그렇게 만들었는지는 나한테 묻지 말라. 아까 반복자는 포인터라고 생각하라 했다. 역시 그 포인터가 가르키는 값을 보려면 당연히 앞에 * 을 붙여야겠지.
* 우리가 여태까지 배운 거만 써보면 이렇게 고칠수 있다. 그 유명-_-한 동적배열이다.--; 아.. delete [] 저거 보기 싫지 않은가? c와 c++의 고질적인 문제점이 바로 저거다. 메모리 관리를 프로그래머가 해줘야 한다는거.. 자바 같은건 지가 알아서 delete 해주지만.. c나 c++에서 delete 안해주면.. X되는 꼴을 볼수 있다. (본인이 한번 경험해 봤다.) 그래서 잘 디자인된 클래스는 클래스 내에서 알아서 없애줘야 한다. 바로 vector를 쓰면 저 짓을 안해줘도 된다. 또 고쳐보자.
* 그래서 pointer만을 이용해서 저장하자. 하지만 쓸모 없는 객체는 우리가 지워줘야 한다. 포인터를 넣어줄때에는, 컨테이너가 소멸될때는 포인터들은 지워지겠지만. 그 포인터들이 가르키는 값들은 지워지지 않기 때문이다.
vector<Obj*> v; // 포인터를 저장하는 vector
// 벡터에 Obj객체들의 포인터를 넣는다.
* 노파심에서 말하는 건데.. 함수로 객체를 넘길때는 꼭 참조! 참조! 입니다. 값이 안 바뀌면 꼭 const 써주시구여. 참조 안 쓰고 값 쓰면 어떻게 되는지 이펙티브 C++에 잘 나와 있습니다.(책 선전 절대 아님) 복사 생성자를 10번 넘게 호출한다는 걸로 기억함.
* 구조체에서 함수역시 가능하고, constructor, destructor역시 가능합니다. 다만 class와 차이점은 상속이 안되고, 내부 필드들이 public으로 되어 있습니다. 상속이 안되서 파생하는 분제들에 관해서는 학교 C++교제 상속 부분과 virtual 함수 관련 부분의 동적 바인딩 부분을 참고 하시기 바람니다.--["상민"]
- ZeroPage_200_OK/note . . . . 16 matches
* prototype은 클래스가 들고 있어야하는 함수들을 특정 인스턴스가 들고 있게 만드는 것이다.
=== 함수형 언어 ===
* 함수를 일급객체로 다루는 언어
* 함수를 마치 일반적인 인스턴스처럼 다루는 언어
* 클로져 : 내부의 있는 외부에 있는 함수의 지역 변수를 쓸수 있는것. 때문에 의도하지 않은 결과를 가져올수 있다.
* p.do() 에서 p가 실행문맥이다. 그러나 이 함수를변수로 받으면 var f = p.do; f(); 이런식으로 그러면 f는 실행문맥이 없기 때문에 전역객체가 실행문맥으로 간주된다.
* 결론적으로 함수 앞 마지막 . 앞에 있는 것이 중요하다.
* Class : 함수와 맴버 변수가 각각 class와 인스턴스에 나누어 져있는것.
* prototype : 함수와 맴버 변수 모두 인스턴스에 저장되있는것
* 단지 함수는 다른 인스턴스에 존재한다.
* 실제 호출해야 하는 함수를 찾는 과정
* 자바스크립트는 함수와 일반 변수와의 구분이 없기때문에 변수 또한 dispatch가 된다.
* 따라서 callback함수로 해결한다.
* 위와 같은 형식으로 내려줄경우 클라이언트(요청한 쪽)에서 _callback함수만 정의해두면 로딩이 끝남과 동시에 불리게 된다.
* 이 응답은 마치 JSON에 함수만 감싼형식이기 떄문에 JSON with Padding, JSONP라 부른다.
- 새싹교실/2012/나도할수있다 . . . . 16 matches
* 3월 22일, 6피에서, 이현민이랑 추선준 성생님과 c를 visual studio를 이용해서 수업을 했습니다. 함수를 몇개 배웠습니다. for,while이 어려웠습니다. 집에가서 다시한번 해보려고 합니다. 아는게 없어서 다음에 뭘 해야 할지 모르겠습니다. - 신윤호 회고지
* 소라때리기 게임에 이용된 함수 소개
* 지난주에 수업했던 for,while의 복습으로 시작했다. 1부터 10까지의 합을 구하는 프로그램을 짜보라고 했는데 쉽게 하지 못하고 많이 버벅거렸다. 둘다 집에 비주얼 스튜디오가 없어서 복습을 안한 것 같다. 그리고 소라때리기 게이을 타이핑하게 하고, 소라때리기 게임에서 쓰이는 함수들을 설명해주었다. 그런데 한번에 너무 많은 양을 배워서 그런지 이해도가 떨어지는 것 같아서 다음주에 보충수업을 하기로 했다. 다음주 과제로는 MP를 추가해서 마법공격, 체력회복을 추가해오는것을 내주었는데 아마 안해올것 같다. -추성준
* 시작하자마자 while로 1부터 10까지 더했다. 나는 버벅거렸다. 근데 조언을 구하면서 해봤다. 게임코드도 베껴써봤다. define은 메인함수 바껭서 하는 거라고 배웠다. select=getch() 이거가 좀 헷갈렸다. break가 나오면 멈춘다고 한다. 오늘 정말 여러가지를 배운거 같다. 때리기 게임안에 많은 함수가 들어있는게 신기했다. 복습도 좀 더 열심히 해야겠다. 집에 비쥬얼스튜디오도 깔고 스스로 하는 습관을 들여야겠다. -신윤호
* 함수, 구조체, 배열, 포인터
/* 함수 생성 (입력받은 숫자가 1인지 아닌지 판단하는 함수) */
/* a,b 바꾸는 함수*/
* 이번주도 굉장히 많은 내용을 배웠다. 함수, 구조체, 배열, 포인터를 가르쳐줬는데 역시 한번에 이해시키기란 쉽지 않은 것같다. 다음주에도 어김없이 보충수업을 해야겠다. 짧은 수업시간에 많은걸 배우는게 쉽지 않는데 지각,결석 하지않고 잘 따라와줘서 고맙다. -추성준
* 오늘 너무 힘들다. 그냥 힘들다 내가 함수를 새로 만드는 걸 배웠는데 헷갈린다. 다 지친다.ㅠㅠ 잘 하고 싶다. 근데 해보라고 하면 난 아무생각도 나지 않는다. 도대체 어떻게 해야할지 모르겠다. 포인터라는걸 배웠는데 모르겠다. 다음주에 보충시간에 더 열심히 배워야겟다. -신윤호
* 오늘 매우매우 많은것을 배웠다. 함수만드는법이랑, 배열이랑, 구조체랑, 포인터쓰는법을 배웠다. ㅋ 배우긴 했는데 머리에 들어있지는 않은것같다. ㅋㅋ 담주에 보충때 좀더 머리에 넣을수 있도록 노력해야겠다. ㅋㅋㅋㅋ 아 힘들다 ㅋㅋㅋ빨리 집에 가고싶다. ㅋ- 이현민
- TermProject/재니 . . . . 15 matches
if (select == 1) menu1(); // 각 선택에 맞게 함수를 호출
else error(); // 잘못 입력하였을 경우 에러메시지를 출력하는 함수 호출
if (select >= 1 && select <= 3) // 서브메뉴의 선택에 따라 화면에 출력하는 함수를 호출
sort(i, j); // 정렬 함수를 호출함
prt_select(); // 선택된 서브메뉴에 따라 출력하는 함수를 호출
avr(); // 평균 산출 함수를 호출
avr(); // 평균 산출 함수를 호출
for (int j = 0 ; j < i ; j++) // 정렬 함수를 호출하여 정렬함
void sub_menu() // 1, 2번 메뉴의 경우 서브 메뉴를 입력받아 선택된 메뉴를 출력하는 함수
error(); // 잘못 입력하였을 경우 에러메시지를 출력하는 함수 호출
void avr() // 평균을 산출하는 함수
void prt_all() // 3, 4번 메뉴를 선택했을 경우 공동으로 사용하는 출력 함수
grade(i); // 학점을 산출하는 함수 포출
void grade(int i) // 학점을 산출하는 함수
void error() // 메뉴를 잘못 입력하였을 경우 에러 메시지를 출력하는 함수
- 05학번만의C++Study/숙제제출/4 . . . . 14 matches
* INT형을 만족하는 숫자를 입력하면 그 숫자를 저장하는 클래스를 생성되었다는 메시지와 함께 생성하라. 만약 입력된 숫자를 가진 클래스가 이미 존재할 경우에는 클래스가 가짖 숫자를 출력하고 해당 클래스를 삭제한다. 프로그램이 종료될떄에는 모든 클래스를 삭제한다. (단 숫자의 출력은 파괴자에서 해야한다.)
* 생성되는 전체 클래스의 개수는 255개를 넘지 않는다고 가정한다.
클래스가 생성되었습니다.
클래스가 생성되었습니다.
클래스가 생성되었습니다.
1을 가진 클래스가 파괴되었습니다.
3을 가진 클래스가 파괴되었습니다.
클래스가 생성되었습니다.
2을 가진 클래스가 파괴되었습니다.
4을 가진 클래스가 파괴되었습니다.
- HardcoreCppStudy/두번째숙제/ConstructorAndDestructor/김아영 . . . . 14 matches
- 생성자(Constructor) 클래스 이름과 같은 이름을 지닌 함수
- 클래스의 객체가 생성될 때, 자동으로 호출
{{{~cpp class 클래스이름{
클래스이름( ){ } //생성자 함수정의
//클래스 멤버 정의
- 객체가 소멸될 때 수행해야 할 작업들을 위한 함수
{{{~cpp class 클래스이름{
~클래스이름( ){ } //소멸자 함수정의
//클래스 멤버 정의
- HardcoreCppStudy/첫숙제/Overloading/변준원 . . . . 14 matches
C++의 새로운 특징 중 하나인 디폴트 전달인자를 살펴보자. 디폴트 전달인자는 함수의 호출에서 대응되는 실제 매개변수를 빠뜨렸을 때 자동적으로 사용되는 값이다.
전달인자 리스트를 가지고 함수를 사용할 때에는 디폴트 전달인자를 오른쪽에서 왼쪽의 순서로 첨가해야 한다. 즉, 어떤 전달인자의 값을 내정하려면 그 전달인자보다 오른쪽에 있는 모든 전달인자를 디폴트 전달인자로 해야 한다.
8.7 참고-디폴트 전달인자를 가진 문자열 함수
◎ 함수의 다형성(함수의 재정의)
다음은 함수의 다형성에 대하여 알아보자. 디폴트 전달인자는 개수를 변화시켜 가면서 같은 함수를 호출하게 했다. 함수의 다형성은 함수의 재정의라고도 하는데, 이는 여러 개의 함수가 같은 이름을 사용할 수 있게 해준다. ‘다형성’이라는 표현은 많은 형태를 가질 수 있게 해 준다.
함수 재정의의 중요한 열쇠는 함수의 전달인자 리스트인데, 이것을 함수의 시그내처라고도 한다.
8.8 참고-left() 함수의 재정의
- LUA_4 . . . . 14 matches
1. 함수
오늘은 함수에 대해서 알아보겠습니다. 루아에서 함수도 하나의 객체(?)입니다.
>a() -- 그러면 a 도 함수가 된다.
이처럼 간단하게 foo라는 함수를 만들어 봤습니다.
[ function 함수명() end ] 형태로 함수를 만들 수 있습니다.
이제 매개변수를 넘겨서 반환값을 받는 함수를 만들어 보겠습니다.
sum은 a,b 라는 매개 변수를 받아 a+b 연산을 한 후 반환해 주는 함수 입니다. 이제 좀 특이한 루아만의 가변 매개변 수, 복수 반환 함수를 만들어 볼까요?
함수는 사용하기에 따라 변형할 수 있는게 많아서 천천히 다양한 방법을 설명하겠습니다. 대신 변수의 범위(scope)에 대해서 간단하게 예제로 살펴 보겠습니다.
>> print (inside) -- 상위 함수의 local 변수에 접근 할 수 있습니다.
local 이 없이 변수를 선언한다면 함수 밖에서도 값을 참조/변경 할 수 있습니다.
변수 범위는 이 밖에도 다양한 이슈를 만들 수 있습니다. 예를 들면 do ~ end 문에서도 local 로 범위를 한정할 수 있고 function 자체도 변수와 같이 범위(scope)를 한정하여 사용할 수 있습니다. 또한 local을 사용하지 않으면 전역 범위 내에서 변수나 함수 자체를 접근/변경할 수 있습니다.
- MineFinder . . . . 14 matches
지뢰찾기 프로그램의 윈도우클래스 이름이 '지뢰 찾기' 였다. 윈도우 OS 의 특징상 해당 윈도우 핸들간 메세지의 발생에 따라 해당 윈도우프로시저에서 처리가 된다. 해당 윈도우 핸들은 윈도우 클래스 이름을 아는 이상 FindWindow 함수를 이용해서 찾으면 될 것이다.
* [http://zeropage.org/~reset/zb/download.php?id=KDP_board_image&page=1&page_num=20&category=&sn=&ss=on&sc=on&keyword=&prev_no=&select_arrange=headnum&desc=&no=57&filenum=1 1차일부분코드] - 손과 눈에 해당하는 부분 코드를 위한 간단한 예제코드들 모음. 그리고 지뢰찾기 프로그램을 제어하는 부분들에 대해 Delegation 시도. (CMinerControler 클래스는 처음 '막 짠' 코드로부터 지뢰찾기 제어부분 함수들을 클래스화한것임)
* 현재 열려있는 프로그램 중에서 지뢰찾기 프로그램을 윈도우 클래스 이름으로 찾아낸다.
처음에는 전체에 대한 환경설정을 하게 된다. 기본적인 클래스는 다음과 같다.
|| CMineSweeper || 실질적인 두뇌에 해당되는 부분. CMinerController 와 CMinerBitampAnalyzer 를 멤버로 가지며, 이를 이용하여 게임상황분석, 지뢰찾기관련 판단 등을 한다 ||
위의 결과를 보면, 가장 많이 호출되어 시간을 점유하는 것은 GetPixel와 PumpMessage이다. mfc의 함수와 윈도우 메세지드리븐 방식에 대해서는 수정할 수 없다 하더라도, 해당 함수에 대해서 호출 횟수를 줄이는 방법은 강구해야 할 것이다.
즉, 저 함수들을 최적화 시키던지, 아니면 저 함수들이 호출되는 횟수를 줄여야 하는 것이다.
목표는 Func time 이 많이 걸리는 함수들에 대해서 그 횟수를 줄이는 방법.
- VendingMachine/재니 . . . . 14 matches
== 클래스 나누기 ==
이정도면 클래스를 나누는 것은 끝난 것 같으니깐 각각의 객체(클래스)에 필요한 역할을 나누어보자..^^
* 클래스를 너무 많이 만들어서 괜히 복잡해졌다는 재동이 형의 지적을 받았습니다.[[BR]]
아직 클래스 사용법도 제대로 모르는지라 서툴기도 하고.. 결론은 역시 공부해야할 것이 많다는 것...^^
''클래스 수가 많아서 복잡해진건 아닌듯(모 VendingMachine 의 경우 Requirement 변경에 따라 클래스갯수가 10개 이상이 되기도 함; 클래스 수가 중요하다기보다도 최종 완료된 소스가 얼마나 명료해졌느냐가 복잡도를 결정하리라 생각). 단, 역할 분담할때 각 클래스별 역할이 명료한지 신경을 쓰는것이 좋겠다. CoinCounter 의 경우 VendingMachine 안에 멤버로 있어도 좋을듯. CRC 세션을 할때 클래스들이 각각 따로 존재하는 것 같지만, 실제론 그 클래스들이 서로를 포함하고 있기도 하거든. 또는 해당 기능을 구현하기 위해 다른 클래스들과 협동하기도 하고 (Collaboration. 실제 구현시엔 다른 클래스의 메소드들을 호출해서 구현한다던지 식임). 역할분담을 하고 난 다음 모의 시나리오를 만든뒤 코딩해나갔다면 어떠했을까 하는 생각도 해본다. 이 경우에는 UnitTest 를 작성하는게 좋겠지. UnitTest 작성 & 진행에 대해선 ["ScheduledWalk/석천"] 의 중반부분이랑 UnitTest 참조.--["1002"]''
- 새싹교실/2011/무전취식/레벨8 . . . . 14 matches
* 파일 입출력 : 파일 포인터를 이용해서 파일을 받아옵니다. 엽니다. 임시저장소에 넣엇다가 출력합니다. 파일을 닫습니다.
* 왜 4번이 실행됬을까? => 파일포인터가 가르키는 파일 구조(struct)안에 답이있다 => 파일을 얼마나 읽었는지 저장하기때문이다.
이소라 : 파일입출력을 처음 봤어요. 네.. 그걸 포인터로 쓰는지도 몰랐어요 잘 배웠어요. 근데 담주에 못할것 같아요.
서원태 : 파일입출력을 봣는데 해보면 재밌을것 같다. 근데 구조체가 이해가 안되요. 포인터배열이랑 배열포인터랑 차이점이 뭔가요?
강원석 : 파일입출력을 포인터로 배웠는데 포인터를 처음부터 배워야할것 같아요. 포인터랑 Array도 그렇고 할것이 많네요
* 파일 입출력을 처음 보게되었는데 어려워도 해보면 정말 재미있을것 같아요. 여태 많이 봐왔던 파일들의 위치를 나태내어주던(주소창에 막 써졌던 것들)것에 대해 오늘 배운 파일 입출력에서 실체를 알게되었습니다ㅋ 포인터는 정말 중요한것 같아요. 반드시 여러번 이용해보면서 포인터에대해 익숙해 져야겠습니다. 그리고 저도 C관련 책을 하나 구해서 따로 자습을 해야 할것 같아요. - [서원태]
* 음.. 포인터 없는 C란 존재할수 없지. 다음번에는 어떤 예제를 해볼까 두근두근 하구나. 원태 열심히는 하지만 이부분 외에도 다른부분에 신경써보면 좋겠어. 이시간에 집중하고 다른시간에 딴것을 해보렴. 다른것도 받쳐줘야 프로그래밍도 잘한단다. - [김준석]
* 파일 입출력...을 배웠지요 저 나름 열심히 쳐다봤는뎅 잘 모르겟네욧.. 구조체란 것도..너무 생소 해요!! fgets도 ㅠㅠ 으아아악 모르는거 투성이가 나와버렸어요@.@ 제눈은 빙글 빙글..ㅋㅋ 음 저도 왠지 고등학교 때 html 잠깐 아주 조금 배웠었는데 이런것 한 것 같기두 해용..히히 저도 죄송하여요 선생님♥..오빠가 없었다면 전 C 찌질찌질 왕찌질이 였을꼽니당...ㅎㅎ 근데 지금 포인터때매 너무 혼란하네용 더 알려주세요>.< 복..습도 할꼽니당!! -[이진영]
* 우왕=ㅂ= 귀엽게 써주었네~! 진영이 너무 귀엽다 ㅠㅠ 파일 입출력은 다음시간에 복습할겁니다. 이렇게 한번씩 생각해본다니 신난다!! 뭘해볼까!? 빠지지 말고 와야되요!!! 그리고 포인터에 대한 질문 고마워요. 뒤에 또 다시 복습 하겠습니다. 포인터는 중요하고 중요하고 중요한것이니까요. 아싸 신난다~! - [김준석]
- 5인용C++스터디/멀티미디어 . . . . 13 matches
MFC는 멀티미디어를 위한 별도의 클래스를 제공하지 않는다. Win32 API함수 차원에서 멀티미디어를 지원하기 때문에 MFC에서는 별도의 클래스로 만들어 놓지 않은 것이다.
우선 사운드를 연주하는 API함수를 보자.
PlaySound 함수를 사용하려면 mmsystem.h 파일을 먼저 include 해주어야 하고,
앞서 만든 예제를 보면 PlaySound 함수는 사운드 파일 연주가 완전히 종료되기 전에는 리턴하지 않으므로 연주중인 동안은 어떤 일도 할 수 없다. 이런 방법을 동기화 방식이라고 한다.
반대로 PlaySound함수가 연주를 시작해 놓고 곧바로 리턴하는 비동기 연주 방식이 있다.
SND_LOOP 플래그를 지정하면 반복적인 효과음이나 배경음악을 연주하는 등의 설정을 할 수 있을 것이다. 연주를 중지시키려면 PlaySound 함수의 첫 번째 인수를 NULL로 하여 다시 호출해 주면 된다. 따라서, 오른쪽 마우스 버튼을 누르면 연주가 중지될 것이다. 주의할 것은 SND_LOOP 플래그는 반드시 SND_ASYNC와 함께 사용해야 한다. 만약 동기화 연주방식으로 반복연주를 하면 무한 루프로 빠져버릴 위험이 있다.
리소스에 포함된 사운드를 연주하려면 PlaySound의 세 번째 인수에 SND_RESOURCE 플래그를 주고 첫 번째 인수에 리소스의 ID를 준다. 두 번째 인수에는 리소스를 가진 실행파일의 인스턴스 핸들을 주어야 하는데 MFC에서는 AfxGetInstanceHandle() 전역함수로 인스턴스 핸들을 구할 수 있다. 다음과 같이 코드를 작성해 보자.
PlaySound함수는 메모리 크기의 제한을 받아서 1-2분 정도의 사운드 밖에 낼 수 없다는 점, Wave형태만 지원한다는 점, 연주과정에 사용자가 개입할 수 없다는 단점이 있다.
MCI는 멀티미디어 요소에 대한 지원을 장치독립적으로 제공하는 일종의 라이브러리이다. 이것은 PlaySound 함수가 하지 못하는 여러 가지 일을 할 수 있지만, 사용 방법은 훨씬 더 복잡하다.
MCIWnd 윈도우는 마우스 왼쪽 버튼을 눌르면 만들어진다. 그 전에 hWndAVI가 유효하면 먼저 MCIWnd를 닫는 작업부터 해주고 있다. MCIWnd를 만드는 함수는 MCIWndCreate 함수이다.
- MFC/Print . . . . 13 matches
출력을 구현하기 위해서는 view 클래스로 부터 상속받은 수많은 함수들을 오버라이딩 해야한다.
= 프린트 로직과 관계된 함수들 =
뷰클래스의 5개의 멤버함수는 프로그래머가 재정의 해야한다. 최소한 5개중에서 OnPreparePrinting(), OnPrepareDC(), OnPrint()는 구현해야한다.
프린터 작업과 관계되는 모든 함수는 CPrintInfo 형의 객체 포인터가 인자로 전달된다. 이 객체는 프린터 작업을 관리하는 함수들을 연결시켜준다.
모든 멤버 변수는 public 변수로 다음과 같다.
|| m_pPD || CPrintDialog 객체에 대한 포인터. 출력 대화 상자를 나타낸다. ||
|| m_lpUserData || LPVOID 형식을 갖는다. 생성한 객체에 대한 포인터를 저장한다. 출력작업에 관한 추가 정보를 저장하는 객체를 생성할 수 있도록 한다. CPrintInfo 객체와 연계 시킬 수 있도록 한다. ||
''기타 public 함수도 제공하다. 적기 귀찮다. MSDN 찾아보길;;''
- PairProgramming . . . . 13 matches
* 구현과제 : 데이타베이스 클래스(Database.inc)
참고사항 : 몇몇 함수에 대해서만 TDD를 적용시켰다.
나는 .NET의 System.Data의 구조를 보고 즉시 PHP에 적용시키고 싶어졌다. ASP.NET에는 SqlConnection , OdbcConnection , OleDbConnection을 제공해 준다. 이 클래스들을 잘 사용하면 DataTier의 종류가 바뀌어도 코드의 수정을 최소화 시킬 수 있다. PHP는 여러가지 종류의 데이타베이스 관련함수를 제공해준다. 어떠한 데이타베이스를 사용하느냐에 따라 동일한 기능을 하는 다른 이름의 함수를 호출해야만 한다.
IConnection을 이용해 각각의 Connection에 대해 단일의 인터페이스를 제공하고 IConnection을 구현하는 MySqlConnection , SqlConnection , OciConnection을 만들자는 것이 나의 생각이었다. 파트너는 switch구문을 이용해 클래스의 상속 구조를 없애는 것과 비교해서 어떠한 이점이 있는가에 대해 질문했다. 이것은 장시간의 토론으로 이어졌다.
하나의 클래스를 구현하고 구현된 하나의 클래스에서 switch로 호출되어야 하는 함수를 결정하면 된다는 것이었다.
나는 일차적으로 switch코드를 없앨 수 있다는 점을 설명했다. 우리는 Connection클래스가 그다지 크게 바뀌지 않을 것이라는 것에 대해 동의했었고 이 점을 근거로 switch를 사용하는 것이 유지보수를 힘들게 하는가에 대해 질문했다. 솔직히 이정도 코드라면 누구나 수정할 수 있을 것이라고 생각한다. 그리고 그렇게 많은 시간을 필요로 하는 작업도 아니라고 생각한다. 파트너는 Connection을 생성하는 부분을 include 화일로 관리하고 그곳에 한번만 define문을 작성하면 문제가 없다고 주장했다.
추가적으로 토론했던 사항 : Connection 클래스의 생성자에 매개변수로 데이타베이스 타입을 넘겨주면 된다는 것과 파생된 클래스를 생성하는 것
긴 토론 끝에 파트너는 나의 의견에 동의했지만 만약 계속 이런 속도로 작업이 진행된다면 회사에서 가만있지 않을 것이다. (어제도 TDD를 사용했었는데 기존의 코딩시간에 비해 3배정도 더 늦어졌다. 그리고 다 끝내지도 못했고 무엇을 먼저 테스트 해야할지 갈팡질팡했었다. 처음부터 함수단위 테스트만 시도해야겠다는 생각이 원인같다.)
- UnixSocketProgrammingAndWindowsImplementation . . . . 13 matches
= 기본적인 함수/개념들 =
fprintf(stderr, "socket 함수에서 에러"), exit(1);
// bzero라는 함수도 있지만 초기에 0으로 채우는 것이 편하다.
// SERVER_IP의 경우 문자열 포인터를 넣어야한다.
= Server 가 될 프로그램에 필요한 함수 =
= Client 가 될 프로그램에 필요한 함수 =
※ connect와 server 함수중 어떠한 함수가 닮았는지 이야기 해보자.
= 정리에 필요한 함수 =
= server/client 공통 - 입출력 함수 =
◎ UNIX 체계에서 사용하던 함수들의 헤더파일이 Windows 기반에서는 존재하지 않을 수도 있다.
◎ main() 함수 내부에
// client의 요청이 오면 server는 accept() 함수로 요청을 받아들인다.
- BasicJava2005/5주차 . . . . 12 matches
- static은 클래스에 종속되는 변수로 인스턴스명이 아닌 클래스명으로 호출된다.
2. Math클래스 와 기초클래스의 Wrapper 클래스
- Math클래스에는 각종 함수와 상수들이 선언되어 있다.
- 각종 Wrapper클래스(Integer, Double, Character...)
- 클래스의 명을 쓰기가 귀찮을때.....
6. 모든 예외의 상위클래스 Exception
- 모든 예외는 Exception클래스를 상속받는다.
throws : 이 함수에서는 예외처리 하고 싶지 않을때 사용한다.
- CCNA . . . . 12 matches
* 클래스A : 0xxx xxxx.xxxx xxxx.xxxx xxxx.xxxx xxxx형식(0.0.0.0~127.255.255.255)
즉, 1.0.0.0~126.0.0.0은 클래스A(1~126)
* 클래스B : 10xx xxxx.xxxx xxxx.xxxx xxxx.xxxx xxxx형식(128.0.0.0~191.255.255.255)
즉, 128.1.0.0~191.254.0.0은 클래스B(128~191)
* 클래스C : 110x xxxx.xxxx xxxx.xxxx xxxx.xxxx xxxx형식(192.0.0.0~223.255.255.255)
즉, 192.0.1.0~233.255.254.0은 클래스C(192~233)
//네트워크를 나타낼 땐 호스트 부분을 0으로 표현. 그리고 각 클래스에서 표현 가능한것의 제일 작은 수와 제일 큰수는 사용불가.
*호스트부분이 모두0은 네트워크, 1은 브로드캐스트 번호이므로 사용하지 않는다. -> 각 클래스에서 사용가능한 최대 호스트수는 순계산-2해줘야함.
* 각 클래스별 디폴트 서브넷 마스크
* 클래스A : 255.0.0.0
* 클래스B : 255.255.0.0
* 클래스C : 255.255.255.0
- CNight2011/고한종 . . . . 12 matches
누님께 배열과 포인터의 기본, 주소에 의한 .. 뭐라고해야하나 암튼. 근본적으로 배열은 포인터와 동일. 이런것을 배웠다.
배열이 근본적으로 포인터란 것은 이미 알고 있었으나 실제 컴파일러에서 이런식으로 표현 된다는 것을 배웠다.
-> 포인터 연산자를 동원해서 표현하자면 &arr[0]이 된다.
== 포인터 ==
datatype* : 포인터 자료형 선언법 -> 이게 독자적인 자료형이라고 봐도 무관.
*val_name : 해당 포인터변수가 가르키는 변수의 값을 참조
&val : &연산자 우측의 주소값을 불러온다.(이건 val자리에 들어가는 변수가 포인터 자료형이 아니여도 됨)
포인터 변수에 주소값이 저장된다고 생각하는것보다. 그 주소에 해당하는 변수를 가르킨다고 생각하는게 옳다.
다중 포인터도 배웠다.
한 '노드'에 의미가 있는 값과 다음 노드의 주소를 가르키는 포인터를 담는다.
보통 끝은 Null을 가르키는 포인터가온다. 하지만 맨처음 노드를 가르켜 순환형 리스트가 될 수 도 있다.
- DebuggingSeminar_2005/DebugCRT . . . . 12 matches
Debug C Runtime 클래스를 이용하면 라이브러리가 알아서 동적할당되는 메모리를 역추적하여 누수되는 메모리를 가늠하는 것이 가능하다.
|| _CRTDBG_CHECK_ALWAYS_DF || _CrtCheckMemory() 함수를 모든 new, delete 함수에 대해서 자동 호출 되도록 지정한다.[[BR]] 이 함수는 할당된 공간의 유효성을 지속적으로 체크한다. 즉 domainerror나 기타 메모리 access에 관한 부분을 검사한다. 대신 오버헤드가 상당하다. 그러나 그만큼 디버깅의 효율성을 높여줄 수 있다. ||
= CRT 기타 함수 =
CRT의 기본 함수들의 출력은 디버그 메시지 윈도우이다. 이를 변경하기위해서는 _CrtSetReportMode()라는 함수를 이용해서 출력에대한 일반 목적지를 지정하고, _CrtSetReportFile()를 이용해서 특별한 스트림 목적지를 설정해야한다.
''crtdbg.h는 ASSERT, ASSERTE라는 메크로 함수를 생성한다. 둘의 차이점은 ASSERTE는 assertion 표현을 보고하고, 다른 것은 하지 않는 다는 것이다.''
''두번째 인수는 파일 스트림의 _HFILE 형식의 포인터이거나 다음의 식별자들 중의 하나이다.''
대체로 클래스에서의 메모리 유출은 동적 멤버 변수들이 만들어졌을 때 해야하는 '삼의 법칙'을 지키지 않는데서 비롯되는 경우가 많다.
동적 멤버변수를 사용하는 경우에는 대입, 할당 생성자, 소멸자를 반드시 만들어야한다.
- DesignPatterns/2011년스터디/1학기 . . . . 12 matches
1. 처음엔 단순히 인터페이스 대신 넘겨받는 구체클래스를 써야해서인 줄 알았는데 상위기술이 하위기술에 의존하는 것이 아닌 하위기술이 상위기술을 지원하기 위해 만들어지는 것이라는것을 알게되었다.
1. 멤버변수를 선언하면 꼭꼭 getter/setter를 만들었던 나를 반성...(나중엔 귀찮아서 public으로 한적도 있다지)
1. 팩토리 메소드 패턴이 뭔지 잘 모르겠다. 기반 객체가 알지 못하는 파생 클래스를 생성한다니. 기반클래스는 원래 파생클래스를 알지 못해! 이말은 생성되는 파생클래스는 기반클래스를 '''반드시 확장해야 한다'''는 건가? 어려워.
1. 자바 스윙의 코드 일부를 보니 알거같기도.. 코드에서 기반클래스를 확장하는 파생 클래스가 아니라 속성이나 기능만 변경된 클래스를 구현 상속해 생성하고 있다.
1. '''Model''' : 비즈니스 로직에 필요한 데이터들을 저장하는 클래스군.
1. '''Control''' : Model과 View 사이의 정보 교환을 제어하는 클래스군. 모델군의 데이터를 뷰가 출력하는데 용이하도록, 뷰에서 받은 데이터를 모델에게 적합하도록 가공해준다.
- Gof/Command . . . . 12 matches
Menu는 쉽게 Command Object로 구현될 수 있다. Menu 의 각각의 선택은 각각 MenuItem 클래스의 인스턴스이다. Application 클래스는 이 메뉴들과 나머지 유저 인터페이스에 따라서 메뉴아이템을 구성한다. Application 클래스는 유저가 열 Document 객체의 track을 유지한다.
* MenuItem 객체가 하려는 일을 넘어서 수행하려는 action에 의해 객체를을 인자화시킬때. 프로그래머는 procedural language에서의 callback 함수처럼 인자화시킬 수 있다. Command는 callback함수에 대한 객체지향적인 대안이다.
- 처리할 request에 대해 명령어들을 어떻게 수행해야 할지 알고 있다. 어떠한 클래스든지 Receiver로서 활동가능하다.
2. Command는 첫번째단계의 클래스 객체이다. Command는 조작되어질 수 있으면서 다른 객체들과 마찬가지로 확장가능하다.
4. 새로운 Command를 추가하기가 쉽다. 왜냐하면 이미 존재하고있는 클래스들을 고칠 필요가 없기 때문이다.
MacroCommand의 열쇠는 Execute 맴버함수에 있다. 이것은 모든 부명령어들을 탐색하면서 그들 각각의 Execute operation를 수행한다.
아마도 CommandPattern에 대한 첫번째 예제는 Lieberman 의 논문([Lie85])에서 나타났을 것이다. MacApp [App89] 는 undo가능한 명령의 구현을 위한 command의 표기를 대중화시켰다. ET++[WGM88], InterViews [LCI+92], Unidraw[VL90] 역시 CommandPatter에 따라 클래스들을 정의했다. InterViews는 각 기능별 명령에 대한 Action 추상 클래스를 정의했다. 그리고 action 메소드에 의해 인자화됨으로서 자동적으로 command subclass들을 인스턴스화 시키는 ActionCallback 템플릿도 정의하였다.
THINK 클래스 라이브러리 [Sym93b] 또한 undo 가능한 명령을 지원하기 위해 CommandPattern을 사용한다. THINK 에서의 Command들은 "Tasks" 로 불린다. Task 객체들은 ChainOfResponsibilityPattern에 입각하여 넘겨지고 소비되어진다.
- HardcoreCppStudy/두번째숙제/This포인터/김아영 . . . . 12 matches
'''* this 포인터'''
그 클래스 내부에서 this는 자신 A의 포인터를 가르키는것이다.
클래스 내부 함수 f가 있다면
f()로 클래스 내부에선 호출이 가능한데 정확히 this->f()에서 this가 생략된 형이다.
class A에서 class B의 내부함수를 호출하는데
class A에서 class B의 내부함수 호출시에 this라는 인자를 넘겨준다.
그러면 B클래스에서 A클래스의 포인터를 받을수 있기 때문에 A라는 클래스에
- MFC/ObjectLinkingEmbedding . . . . 12 matches
OLE 컨테이너, 서버 사이의 통신은 윈도우 운영체제를 매개로 동작한다. 각 OLE 를 지원하는 프로그램은 공통의 OLE DLL을 가지는데 이 것이 윈도우의 기본지원 부분이다. DLL 안의 함수들은 이렇게 객체사이의 통신을 지원한다. 이때 이를 지원하는 표준적인 인터페이스가 COM(Component Object Model)이다. 본질적으로 엠비드된 객체의 모양과 컨테이너가 그것과 통신하는 방법을 정의한것이다.
|| QueryInterface() || 특정한 인터페이스가 객체에 의해 지원되는지를 검사. 지원된다면 포인터가 리턴된다. ||
OLE서버를 어떤 방식으로 식별할 것인가? OLE객체는 문서, 프로그램등 OLE를 지원하는 어떤 프로그램도 될 수 있다. 시스템에 있는 각각의 OLE객체는 클래스 ID 또는 CLSID라고 부르는 128비트의 숫자로 식별한다. 이들은 GUID라고도 불리우며 알고리즘을 통해서 생성되기 때문에 모두 독특한 값을 지니게된다. 이러한 정보는 윈도우 시스템의 레지스트리에 저장되게 된다.
== OLE 객체 클래스 ==
CDocItem 에서 파생되는 2개의 클래스 COleClientItem, COleServerItem 은 각각 컨테이너와 서버의 관점에 해당하는 OLE객체를 나타낸다.
COleServerItem 안에서 서버를 지원하는 인터페이스도 많은 함수를 갖는다.
|| OnDraw() || 객체가 in-place 활성화 되었을때 서버에 있는 뷰클래스의 OnDraw() 함수에 의해서 그려진다. 따라서 컨테이너에 잇는 요소를 그리는 일은 서버측에서 구현되어야 하는 것이다. ||
== OLE 도큐먼트 클래스 ==
서버측에는 COleServerDoc에서 파생된 도큐먼트를 이용한다. 서버측에서는 반드시 OnGetEmbeddedItem() 멤버를 구현해야한다. 이는 이 함수가 순수가상 함수이기 때문이다.
- NUnit/C++예제 . . . . 12 matches
* 먼저 프로젝트를 Managed C++ 클래스 라이브러리로 만든다.
* Test Fixture 될 클래스의 앞에는 TestFixture, 테스트 함수 앞에 Test 인 Attribute 를 붙인다.
메인프로젝트에서 만든 새 클래스를 테스트 프로젝트에서 테스트하고 싶다. 어떻게 해야할까? 순진한 인수군은 #include <domain.h> 이렇게 하고, 테스트 클래스에 .h랑 .cpp 참조 넣어주면 될줄 알았다. 이것땜에 어제밤부터 삽질했다. 이렇게만 하면 안되고... 새로 만든 클래스를 일단 보자.
평소대로 하자면 이렇게 하면 될것이다. 하지만 현재 프로젝트는 [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmxspec/html/vcmanagedextensionsspec_16_2.asp Managed C++ Extensions]이다. 이것은 C++을 이용해서 .Net을 Platform위에서 프로그래밍을 하기 위하여 Microsoft에서 C++을 확장한 형태의 문법을 제안된 추가 문법을 정의해 놓았다. 이를 이용해야 NUnit이 C++ 코드에 접근할수 있다. 이경우 NUnit 에서 검증할 클래스에 접근하기 위해 다음과 같이 클래스 앞에 [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmxspec/html/vcmanagedextensionsspec_16_2.asp __gc] 를 붙여서 선언해야 한다.
__gc의 가 부여하는 능력과 제약 사항에 대해서는 [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmxspec/html/vcmanagedextensionsspec_4.asp __gc] 을 참고하자. NUnit 상에서 테스트의 대상 클래스는 무조건 포인터형으로 접근할수 있다. 이제 테스트 클래스의 내용을 보자.
아.. __gc를 쓰면 닷넷 플랫폼없는 곳에서는 쓸 수가 없겠네요. 그러면 이방법은 어떤가요? 일단 테스트할때는 테스트할 클래스에 __gc를 붙이잖아요? 나중에 배포할때는 __gc를 없애는 겁니다. 물론 Managed C++ Extensions의 문법을 쓰면 안되겠죠.(__gc빼고) 매크로를 잘 쓰면 어떻게 될거 같기도 한데... --[인수]
- ProjectCCNA/Chapter5 . . . . 12 matches
* 클래스A : 0xxx xxxx/xxxx xxxx.xxxx xxxx.xxxx xxxx형식
즉, 1.0.0.0~126.0.0.0은 클래스A(1~126)
* 클래스B : 10xx xxxx.xxxx xxxx/xxxx xxxx.xxxx xxxx형식
즉, 128.1.0.0~191.254.0.0은 클래스B(128~191)
* 클래스C : 110x xxxx.xxxx xxxx.xxxx xxxx/xxxx xxxx형식
즉, 192.0.1.0~233.255.254.0은 클래스C(192~233)
* 네트워크를 나타낼 땐 호스트 부분을 0으로 표현. 그리고 각 클래스에서 표현 가능한것의 제일 작은 수와 제일 큰수는 사용불가.
*호스트부분이 모두0은 네트워크, 1은 브로드캐스트 번호이므로 사용하지 않는다. -> 각 클래스에서 사용가능한 최대 호스트수는 순계산-2해줘야함.
* 각 클래스별 디폴트 서브넷 마스크
* 클래스A : 255.0.0.0
* 클래스B : 255.255.0.0
* 클래스C : 255.255.255.0
- Yggdrasil/가속된씨플플/4장 . . . . 12 matches
* 장의 제목 그대로의 내용이다. 프로그램의 구조화(함수)와 데이터의 구조화(구조체) 등등을 설명하고 있다.
== 함수 ==
* 참조에 의한 전달은 그 전달인자의 별명(?)을 넘겨준다. 즉 그 변수 자체를 넘겨주는 것이나 다름없다. 즉, 함수 내에서 그 전달인자로 전달된 변수가 바뀌면 원래의 값에도 변화가 온다. 그래서 적절히 const로 값이 바뀌지 않도록 제한해주는 것도 좋다. 복사를 안 하므로 오버헤드를 줄일 수 있음.
인데, compare는 함수인데 괄호는 쓰지 않는다. 괄호를 쓸 경우 그 인자까지 알아서 써줘야할 것 같은데, sort의 정확한 구조를 잘 모르는 나에겐 좀 벅찬 방법이다. 하여튼 괄호는 쓰지 않는다.
compare 함수 포인터를 넘겨주면 students vector(또는 list)내에서 값을 꺼낸다. Student_info 형이 나오겠지 그 것들을 compare 함수에 넘겨주는 거다. --[인수]
* throw로 예외 상황이 발생되었다는 것을 알린다. 예외 클래스엔 여러개가 있으며, 생성자로 문자열을 집어 넣을 수 있고, 이건 일반적으로 출력이 안되지만, what()함수로 확인 가능.
== String 클래스 ==
* max()라는 함수가 의심스럽다. 분명 msdn에도 algorithm헤더에 있다고 했는데 컴파일하면 자꾸 정의되지 않은 이름이라 에러를 뱉어낸다. 이 함수의 정체는?
- 새싹교실/2012/부부동반 . . . . 12 matches
C를 배우면 함수를 잘 만들어야 한다 - [http://kangcom.com/sub/view.asp?sku=201004090011&mcd=571]
* 구조체와 클래스의 차이점, 구조체의 한계를 벗어나기 위한 수단
* 함수
* 피보나치 수열을 계산하는 함수 작성
1000번째, 10000번째 피보나치 수를 계산해 낼 수 있는 함수 작성
* 포인터의 의미와 문법
* 포인터 연산
* 배열과 포인터의 관계
* 다중 포인터
* 포인터를 통해 swap(int, int) 작성해보기
* 컴파일러의 도움없이 스스로 메모리와 포인터의 관계를 통해 완벽한 코드 구현
* 포인터를 활용하 거품 정렬(Bubble Sort) 구현해보기
- 이승한/질문 . . . . 12 matches
strlen 처럼 int 형 배열의 길이를 구하는 함수를 짜던중 이해 안되는 부분.
메인에서 들어간 sizeof(scores)는 배열 전체 크기를 리턴하는 반면에 함수에 들어간 sizeof(scores)는 int* 형의 크기를 리턴한다.
참조를 이용해 배열을 함수에 넘길수는 없는건가요?? 배열은 잘 넘어가지 않네요;;
vs에서 타이핑하는 방식이외에 자동으로 함수를 생성해주는 바법사를 이용해 firend 함수를 생성할수는 없나요??
아마 승한이가 원하는 답은 아니겠지만 한번 적어본다. 지금 함수에 전달하는 것은 인트형의 포인터이기 때문에 함수는 지금 받은 것이 숫자인지 배열인지 알 수 가 없지. 게다가 주소를 참조하게 되서 함수 안에서 그 값을 변경해주면 원본 값도 변하게 되고. 그래서 나는 함수 안에 멤버 변수를 만들어서 전달 값을 복사해서 쓰거든. 보통 전달인수를 받을 때 컴파일러에서 그 원본 값을 쓰지 않고 복사값을 사용하는 건 알지? 그 작업을 프로그래머가 해주는 것이지. 밑은 여태 말한대로 구현하고 간단하게 테스트한 소스야.
cout << "\n함수에 전달된 값이 변해도 scores의 값은 변하지 않는다.\nscores: ";
- Benghun/Diary . . . . 11 matches
최근 모듈화에 대해서 공부하다가 dependency에 대해서 생각해 보았다. 무엇을 만들었을 때 dependency가 발생하는가? 함수나 클래스를 사용할 때 발생하더라. 클라이언트 코드는 사용하는 함수나 클래스가 변경될 때 영향을 받을지도 모른다. 그렇다면 dependency를 최소화하는(또는 없애는) 방법은 함수 나 클래스를 사용하지 않으면 된단 말인가? 코드 중복은 어떻게 없앨 수 있더라?
아는 사람 중에 함수나 클래스를 만드는 것을 대단히 꺼리는 사람이 있다. 만들면 좋을 것 같은 간단한 함수조차도 직접 만들려고 하지 않는다. 하지만 이미 잘 만들어 진 라이브러리는 자주 사용한다. dependency가 없다면 변경에 영향을 받는 모듈이 없을 것이다. 나름대로 잘 사용하는 replace all in files, replace all in file, copy & paste등이 강력한 프로그래밍 도구중 하나인 것 같기도 하다.(최소한 나보다는 잘 사용하는 것 같다, 나름대로의 노하우도 있는 것 같다) 아마도 그는 dependency를 최소화하는 것에 큰 관심이 있거나 다른 이유가 있나보다.
table에 대한 query가 여러 곳에 분산되어 있었다. table이 변경되자 모든 코드를 살펴야 했었다. 이 문제를 해결하기 위해 테이블에 접근하는 클래스와 쿼리를 실행하는 클래스를 추가했다. Java 웹 애플리케이션 프레임웍 분석과 설계의 노하우, Applying UML and Patterns, 마소 2003/7 고전을 찾아서4 모듈화와 정보은닉의 상관관계가 도움을 줬다.
- Gof/Strategy . . . . 11 matches
텍스트 스트림을 줄 단위로 나누는 많은 알고리즘들이 있다. (이하 linebreaking algorithm). 해당 알고리즘들이 그것을 필요로 하는 클래스에 긴밀하게 연결되어있는 것은 여러가지 이유 면에서 바람직하지 못하다.
이러한 문제는, 각각의 다른 linebreaking을 캡슐화한 클래스를 정의함으로 피할 수 있다. 이러한 방법으로 캡슐화한 알고리즘을 stretegy 라 부른다.
Composition 클래스는 text viewer에 표시될 텍스틀 유지하고 갱신할 책임을 가진다고 가정하자. Linebreaking strategy들은 Composition 클래스에 구현되지 않는다. 대신, 각각의 Linebreaking strategy들은 Compositor 추상클래스의 subclass로서 따로 구현된다. Compositor subclass들은 다른 streategy들을 구현한다.
* ArrayCompositor - 각각의 줄에 특정 수의 단어가 들어가도록 줄나눔을 하는 알고리즘을 가진 클래스.
* 많은 관련 클래스들이 오직 그들의 행동들에 의해 구분된다. Strategy들은 많은 행위중에 한가지로 상황에 따라 클래스을 설정해주는 방법을 제공해준다.
* 당신은 알고리즘의 다양함을 필요로 한다. 예를 들어, 당신이 알고리즘을 정의하는 것은 사용메모리/수행시간에 대한 trade-off (메모리를 아끼기 위해 수행시간을 희생해야 하거나, 수행시간을 위해 메모리공간을 더 사용하는 것 등의 상관관계)이다. Strategy 는 이러한 다양한 알고리즘의 계층 클래스를 구현할때 이용될 수 있다.
* 클래스가 많은 행위들을 정의한다. 이는 다중조건문들에 의해서 구현되곤 한다. 이러한 많은 조건문들 대신, 각각 관련된 조건들을 Strategy 클래스들에게로 이동시킬 수 있다.
- Java Study2003/첫번째과제/노수민 . . . . 11 matches
자바의 주된 특징은 기존의 C/C++ 언어의 문법을 기본적으로 따르고, C/C++ 언어가 갖는 전처리기, 포인터, 포인터 연산, 다중 상속, 연산자 중첩(overloading) 등 복잡하고 이해하기 난해한 특성들을 제거함으로써 기존의 프로그램 개발자들이 쉽고 간단하게 프로그램을 개발할 수 있도록 합니다.
자바는 컴파일 시에 에러 검사를 철저하게 하고, 실행 시에 발생할 수 있는 에러에 대해서도 실행 시에 철저하게 검사를 수행함으로써 신뢰도가 높은 프로그램을 작성할 수 있도록 해 줍니다. 또한, C/C++ 프로그램 개발자들을 가장 혼란스럽게 하고, 프로그램의 치명적인 오류를 발생시킬 수 있는 포인터 및 포인터 연산을 자바에서는 사용하지 않게 함으로써, 포인터를 사용함으로써 프로그래머가 범할 수 있는 오류를 없앴다는 것입니다.
자바의 다중 스레드 기능은 동시에 많은 스레드를 실행시킬 수 있는 프로그램을 만들 수 있도록 해 줍니다. 자바는 동기화 메소드들을 기본적으로 키워드로 제공함으로써, 자바 언어 수준에서 다중 스레드를 지원해 줍니다. 자바 API에는 스레드를 지원해 주기 위한 Thread 클래스가 있으며, 자바 런타임 시스템에서는 모니터와 조건 잠금 함수를 제공해 줍니다.
클래스로더는 자바 소스를 컴파일해서 생성된 클래스 파일을 로딩한다.
클래스 파일내의 메서드, 변수들, 객체 변수들을 자바가상머신의 각 메모리에 로딩한다.
객체변수, 클래스변수 --> 힙 영역..
- MFC/DynamicLinkLibrary . . . . 11 matches
Library.DLL을 3개의 프로그램 A,B,C가 동시에 공유한다고 하면 각각의 프로그램이 실행될때마다 각 프로그램에서는 DLL파일의 함수로의 링크가 일어난다. 이런 과정은 윈도우 운영체제에 의해서 자동으로 이루어지고, 한개의 프로그램이라도 실행이 종료되지 않으면 윈도우는 DLL을 메모리에서 제거하지 않고 남겨준다.
프로그램과 DLL이 메모리 안으로 로드되자마자 사용되는 함수들에 대한 링크가 성립된다.
프로그램이 먼저실행되데 DLL은 프로그램의 요청이 발생한 시점에서 메모리에 로드된다. 그때가 되서야 프로그램은 DLL로부터 함수의 어드레스를 얻고 그것을 사용해서 함수를 호출한다.
관련함수) LoadLibrary(), GetProcAddress(), FreeLibrary()
DLL은 함수에 대한 코드만을 저장는데 국한되는 것이 아니다. 비트맵, 폰트와 같은 리소스들을 DLL 안에 위치시킬 수도 있다. 예를 들자면 카드놀이에 사용되는 Cards.dll 에서 카드들에 대한 비트맵 이미지와 그 것들을 다루는데 필요한 함수들을 포함하고 있다.
DLL 에 있는 요소들은 export 된 것들만을 접근 할 수 있다. export 는 함수, 클래스, 글로벌 정적 변수, 리소스들이 가능하다.
== DllMain() 함수 ==
독립적 실행은 불가능하지만 main함수의 변형된 형태를 포함한다. 이 곳에서는 dll이 사용되기 전에 초기화되는 내용들이 포함되게 된다. DLL초기 로드시 운영체제가 호출한다.
- MoreEffectiveC++/Operator . . . . 11 matches
* Item 5: 사용자 정의 형변환(conversion) 함수에 주의하라!
* C++에서는 크게 두가지 방식의 함수로 형변환을 컴파일러에게 수행 시키킨다:[[BR]] '''''single-argument constructors''''' 와 '''''implicit type conversion operators''''' 이 그것이다.
* '''''implicit type conversion operator''''' 은 클래스로 하여금 해당 타입으로 ''return'' 을 원할때 암시적인 변화를 지원하기 위한 operator이다. 아래는 double로의 형변환을 위한 것이다.
뭐 이런 암시적 형변환을 막을려면, 형전환 시키고 하는 암시적 사용을 하지 않고, 다른 함수로 명시적으로 해 줄수 있다.
우리는 ++와 --연산자(이하 가칭 가감 연산자)를 즐겨 쓴다. 이 연산자 역시 클래스에서 정의해서 사용할수 있다.
위의 코드에서는 strlen() 함수내부에서 p에 관련한 null pointer 검사가 필요하지 않다. 왜냐하면 && 에서는 앞의 조건이 부정 즉, ( false && anything ) 의 경우에는 뒤의 조건(anything)은 수행조차 안하기 때문이다. operator ||의 경우도 특정 조건에서,(true || anything) 뒤에 코드를 수행하지 않은다는 것은 비슷하다.
해당 함수(construcWidgetInBuffer())는 버퍼에 만들어진 Widget 객체의 포인터를 반환하여 준다. 이렇게 호출할 경우 객체를 임의 위치에 할당할수 있는 능력 때문에 shared memory나 memory-mapped I/O 구현에 용이하다 constructorWidget에 보이는건 바로
이거 간단히 보이지만 placement new의 전부이다. operator new의 역할은 해당 객체를 위한 메모리를 찾고(할당), 해당 포인터의 반환이고 placement new의 경우에는 호출자가 이미 메모리를 확보하였고, 단순히 포인터 반환만 해준다. 모든 placement new가 반드시 이런 pointer의 전달 역할을 한다. 그리고 size_t 인자가 아무런 이름이 없어도 반항 안한다. 자세한건 Item 6을 보면 이해가 갈것이다.
메모리 해제(deallocaion)은 operator delete함수에 행해지는데 일반적으로 이렇게 선언되어 있다.
- VendingMachine/세연/1002 . . . . 11 matches
1. 명확하지 않는 변수/함수&메소드 이름에 대해 - 이름을 다르게 바꿔준다. 또는 무엇을 하기 위한 것인가에 입각, 함수/메소드 로 추출한다. [[BR]]
3. 긴 메소드 - 함수 & 메소드를 따로 추출. 즉, 하나의 함수 내에서 하는 일들이 많다고 생각될 때. [[BR]]
4. 중복 - 중복되는 부분에 대해 함수 & 메소드로 추출.[[BR]]
하지만 이건 추후에 Vending Machine 에서 메소드를 다른 클래스에게로 이양시켜주면서 UI 부분과 관련한 클래스를 추출해 낼 수 있을 것 같다고 생각합니다. 여기서는 추후에 진행하도록 하겠습니다.
이 이외엔 쓰이지 않지만, private 멤버로 있습니다. 이러한 입력을 받기 위한 임시변수는 그냥 멤버에서 없애주면 됩니다.
그리고, select_drink-1 식으로 쓴 것이 많은데, 이 이유는 아마 번호를 1,2,3,4 ... 로 찍기 위함일 것입니다. 그리고 select_drink 또한 vending_machine 의 멤버인데, 특별히 하는 일이 없는 한 지역변수로 두는것이 낫습니다.
이쯤에서 문제점 - vending_machine 이 완전히 God 클래스입니다. 완전히 이 프로그램 자체가 vending_machine 객체와 동급이 되어버리죠.
- woodpage/VisualC++HotKeyTip . . . . 11 matches
*현재 커서에 있는 변수나 함수의 type이 tooltip으로 나옴
*멤버 변수 / 함수 목록이 팝업창으로 나타남
*디버그시 실행 하다가 함수나 어떤 루틴으로 안으로 들어가서 실행
*역시 이동하는 기술로 BrowseGoToDefinition 이라고 함 마우스 오른쪽 팝업메뉴에도 나옴 사용법은 예를 들어 fSelect()라는 함수를 사용했을때 그함수내용을 보고싶으면 fSelect에다가 커서를 놓고 F12를 누름 (변수,define도 됨) 그럼 fSelect()가 구현된(?)곳으로 이동함 사용하면 아주 유용함 단점은 *.ncb 파일이 조금 커짐 별문제 아님 사실 마우스 오른쪽 팝업에서 쓰는걸 더 많이 씀
*BrowseGotoReference라고 함 함수는 선언된곳으로 감 예를 들어 클래스 맴버 함수면 클래스 header로 감
*Ctrl + Shift + H 를 누르면 클래스 header에서 cpp로 cpp에서 header로 이동한다. 한마디로 원추~!
- 새싹교실/2011/Pixar/3월 . . . . 11 matches
* Keywords : 컴파일러, 프로그래밍 언어, printf 함수, main 함수, #include, assert 함수, 변수, 자료형
* main 함수는 프로그램이 시작하는 부분이예요. 앞으로 함수를 배우기 전까지 모든 코드는 main 함수 안에 작성합니다.
* printf 함수는 콘솔에 내용을 출력해주는 역할을 합니다.
* printf 함수가 내용을 출력해준다는 것을 컴퓨터가 모르니까요!
* 위에서 분명 모~든 코드는 main 함수 안에 쓴다고 했는데 #include <stdio.h>는 맨 위에 썼어요.
* 아, 그리고 assert도 함수같은 것인데 assert가 무슨 일을 하는지는 똑똑한 아저씨들이 assert.h에 써두었습니다. 우리는 그냥 #include <assert.h>를 적어 저 파일을 컴퓨터가 읽어볼 수 있게 알려주기만 하면 됩니다. printf를 쓸때처럼요!
* 1주차에는 수업시간에 했던 간단한 Hello World랑 간단한 연산과 assert함수에대해서 배우고 응용해 보았다. 수업시간에했던 C공부에 생겼던 의문들을 자세하게 다 알 수 있어서 좋았다. C가 한참막막해보였는데 새싹교실 첫시간에 희망이생겼다. 다음시간에도 많이 배우고 갔으면 좋겠다. - [김연석]
- .bashrc . . . . 10 matches
# 별칭(alias)이나 함수, 프롬프트같은
function _exit() # 쉘에서 종료시 실행할 함수
# 별칭(alias)과 함수들
# 논쟁의 여지가 있지만 몇몇 함수들은 조금 덩치가 큰데(즉, 'lowercase')
# 이 파일 크기를 줄이고 싶다면 이런 함수들은 스크립트로 빼도 됩니다.
# 많은 함수들은 bash-2.04 예제에서 거의 그대로 갖다 썼습니다.
# .. 과 함수들
# 파일 & 문자열 관련 함수들:
# 프로세스/시스템 관련 함수들:
# 이 함수는 리눅스의 'killall' 스크립트와 거의 비슷하지만
- C++스터디_2005여름/학점계산프로그램/문보창 . . . . 10 matches
static const int NUM_STUDENT; // 학생 수(상수 멤버)
Student * student; // 학생들의 배열 포인터
// 상수멤버 초기화
// 점수를 입력받아 객체배열의 멤버를 초기화
static const int NUM_GRADE; // 과목 수 (상수 멤버)
void find_average(); // 평점을 구하는 함수
void input_grade(); // 점수을 입력받는 함수
void show(); // 출력함수
// 상수 멤버의 초기화
fin.ignore(100, ' '); // 사용자 지정 문자가 나올때까지 읽어 버리는 함수
- CppStudy_2002_1/과제1/Yggdrasil . . . . 10 matches
int count=0;//함수가 호출된 횟수를 셈
cout<<"함수를 몇번 호출 합니까?";
cout<<"당신은 지금까지 "<<n<<"번 함수를 호출 하셨습니다.\n";
char *str;//문자열을 가리키는 포인터
//beany의 str멤버를 새 블록을 지시하도록 설정
//beany의 ct 멤버를 설정한다.
//함수는 사용자에게 이름과 핸디캡을 요구한다
//함수는 전달인자로 전달된 값들을 사용하여
//함수는 handicap을 새 값으로 초기화한다
//함수는 golf 구조체의 이름을 표시한다
- HardcoreCppStudy/첫숙제/ValueVsReference/김아영 . . . . 10 matches
- 함수는 인수의 값을 스택에서 읽어들인다.
- 변수 자체의 값을 전달하는 것이 아니라 인수로 사용되는 변수에 대한 포인터를 전달하는 것이다.
- 함수에 배열을 전달하는 유일한 방법이다.
- 함수내에서 인수로 사용되는 변수의 값을 변경할 수 있다. (특정 상황에 따라)
- 인수를 전달할 때에는 함수에 전달되는 인수가 포인터라는 사실이 함수 정의와 프로토타입에 반영되어야 한다.
- 함수내에서 전달된 변수를 사용하기 위해서 간접(indirection) 연산자를 사용해야 한다.
값에 의한 전달에서 변수의 값이 함수에서 변경될 수 없는 반면에, 참조에 의한 전달에서 변수의 값이 함수에서 변경될 수 있다.
- LoveCalculator/zyint . . . . 10 matches
음.. 그래도 클래스가 없다닛~!! 에잇 클래스가 없는 C++은 단팥없는 붕어빵이얏~!(괜히 심술중..ㅎ) ㅋ~
ㅎㅎㅎ 위에줄은 단순히 심술이었구.ㅎ 넘흐 잘해놓으셨엉..ㅎ 함수나누는 능력이 넘흐 좋으셈..ㅎ
└ 사실;; 아직 클래스 공부는 안해서 쓸줄 모르거덩 ㅋㅋㅋㅋㅋ 그래서 못썼어;; 아직 벡터랑 이런거만 배워서 일단은 저리 해두었엉 ㅠㅠ
함수가 막 나열되어 있어서 좀 보기는 그렇다... 크크-zyint
알파벳에서 숫자가 아닌 문자(alpha = alpha - 'a' +1)로 처리 하였다면 가독성이 좋아지지 않았을까? 그런데, 이건 내 취향일 수도 있지만,.. class로 함수들을 묶어 외부 접근을 못하게 했으면 나중에 소스코드를 재사용하기 훨씬 쉬워졌을텐데. 함수 분류는 현태 말대로 좋은거 같네. (그리고 upper함수는 toupper라고 이미 구현되어 있어.) - 이영호
위에말대로 클래스는 아직 배우지 않아서;; 배우면 곧 적용시켜야 겠네요^^ 아직 클래스의 위력은 잘 모르겠어서; -zyint
- RedThon/HelloWorld과제 . . . . 10 matches
* HelloWorld를 .py파일을 실행해서 HelloWorld출력하기(3가지로) 힌트 : 클래스, 함수, 그냥
다음..함수를 이용한...나름대로..함수이길..바라고 있음...;;
* 문자열를 변수에 할당해서 그냥 출력(print), 리스트를 함수에 전달인자로 넘겨준 다음 루프를 써서 출력, 문자열을 함수에 전달인자로 넘겨준 다음 루프를 써서 출력하는 세가지 방법으로 숙제를 잘 했네.
그리고..클래스...상당히..어려울거같아...좀더..공부한후에 할께요..
사실 그 클래스때문에 오프모임을 하자는 거지. 클래스라는 문법도 생소할 뿐더러, 클래스를 가지고 객체 지향이라는 개념을 이야기할 수 있기 때문이야. --[Leonardong]
- RubyLanguage/Class . . . . 10 matches
= 클래스 =
* 인스턴스화 할 수 없는 클래스
* Class 클래스는 Module 클래스의 서브 클래스
* 클래스 = 모듈 + 인스턴스화 능력
* 따라서 클래스는 하나만 상속할 수 있다.
* '''Include''' : 클래스가 모듈을 상속받는 것.
* 앞의 Service 클래스는 최상위 레벨의 namespace에 속해 있고, 뒤의 Service 클래스는 Library 모듈에 속해 있다.
- whiteblue/MyTermProject . . . . 10 matches
// 함수 선언
// 메인 함수의 끝 //
////////////////// 메세지 출력 함수 //////////////////
/////////////// 선택 메뉴 함수 ////////////////
//////////////// 결과 출력 함수들 ////////////////////
///////////////// 그 밖의 함수들 /////////////////////
void sort(int * x) // 소트 함수
int input() // 올바른 입력을 위한 입력함수
void grade_() // 등급을 입력하는 함수
void pass() // 바로 넘어가지 않기 위한 함수
- 데블스캠프2002/진행상황 . . . . 10 matches
* 목요일의 ["RandomWalk2"] 에 대해서 다시 CRC 디자인 세션과 구현시간을 가져보았다. (["ScheduledWalk/재니&영동"], ["ScheduledWalk/창섭&상규"]) 이번에는 신입회원팀과 기존회원팀으로 나누어서 디자인 세션을 가지고, 팀별로 구현을 하였다. (신입회원 팀에서의 클래스 구현에서는 1002가 중간 Support)
Python으로 만든 스타크래프트 놀이는 참가자들이 무척이나 좋아했다. 또 그 직전에 Python Interactive Shell에서 간단하게 남자, 여자, 인간 클래스를 직접 만들어 보게 한 것도 좋아했다. 아주 짧은 시간 동안에 OOP의 "감"을 느끼게 해주는 데 일조를 했다고 본다.
* 대체적으로 RandomWalk 는 많이 풀었고, HanoiProblem 은 아직 재귀함수를 많이 접해보지 않은 신입회원들에게는 어렵게 다가간거 같다. - 상협
* 추상화 단계에 대해서 - 세미나 대상자의 수준을 파악하고, 그 사람에게 친숙한 지식들 (만일 컴구조에서 어드레스/옵셋 이야기를 그들이 배웠던 포인터의 개념과 같이 설명했더라면? 우리가 파이프라인 설명을 들었을때 책에서 세탁기의 예가 나온것처럼 설명을 했었더라면?)과 융합시키는 건 어떨까. 정직이가 중간에 '포인터 지금 어렵죠? 그거 나중에 어셈을 배우면 그냥 저건 메모리 주소에요' 라고 설명했었는데, 그것을 실제로 메모리 그림을 그려주고, 포인터의 값이 어떻게 들어가는지에 대해 설명했었더라면 어떠했을까? --석천
* 불필요한 스레드일지도 모르겠으나, 일단 완벽히 어셈쪽 이야기를 하는 것이 아니라, 단순히 C 언어같은 하이레벨 언어에서의 관점으로 얘기하는 것이라면, 포인터란 '가르키는 것' 이라는 추상적인 개념일 뿐입니다. 오히려 어설프게 메모리의 주소라는 개념을 알게 된다면 나중에 더욱 큰 혼돈을 불러일으킬 수 있습니다.. 저처럼요.. -["zennith"]
* 불필요한 스레드란 없으니 걱정말고. ^^; 개인적으로 C 와 어셈과의 포인터관계를 어디서 찾았냐면, 해당 주소값이란 것이 무엇인가에서 찾았다. (단, 내가 정직이나 남훈이보단 하드웨어 관련지식이 깊지 않다) '포인터 값을 화면에 찍었을 경우에 나오는 엄청나게 큰 숫자(윈도우의 경우 32비트) 의 의미는 무엇인가?' 라는 질문을 하게 되었고. 그 이후 메모리가 16메가바이트라는 건 메모리에 0번부터 16메가바이트-1 이라는 번호를 부여하고, 해당 번호에 값을 대입하는 것이라는 접근을 하게 되었지. (물론, 이것도 물리적 주소는 아니겠지. 결국 우리가 이용하는 주소란 OS 에 의해 한번 걸러진 논리적 주소겠지.) 추상화의 정도를 이야기하라는 건 꼭 해당 언어 기준으로 이야기하라는 게 아니라, 경험에 대한 연결고리(여기서는 'C에서 포인터 변수를 화면에 찍어보니 이상하게 큰 숫자가 나왔다' 정도)를 찾아보자라고 한다면 정말 이야기가 '추상적'이려나; --석천
- 레밍즈프로젝트/연락 . . . . 10 matches
2. 픽셀의 기능 : Pixel 인터페이스는 draw라는 순수 가상 함수를 가지고 있어 그리고 전달인자로 CMyDouBuffDC*를 받게 되지. 그리고 SetPixel(int x, int y)따위를 통해서 윈도우에 그림을 그리게 되지 (이부분은 [레밍즈프로젝트/프로토타입/SetBit]참조)을 통해서 배경에 대한 픽셀을 뿌리게 되는거지.
4. CMyDouBuffDC는 생성되면 더블 버퍼링을 준비해주게 되. 그리고 이 녀석을 선언하고 파괴하는 곳은 View의 OnDraw뿐이야. 나머지는 모두 포인터또는 참조를 이용해서 넘겨 받아야 해
2. UML. GAME클래스 내부를 그려서 설명해 보았는데. 드로잉 부분에서 윈도우 핸들과 종속이 걸린대. 수정 방법에 대해서도 이야기 해 주셨는데. 현재 코드 부분에서는 CMyDouBuff 부분 이외에는 수정할 곳 이 없어. 일단 클래스 구조는 잘 짠듯 싶어!!
4. 레밍에 대해서. 일단 내일까진 레밍 클래스 모습을 거의 완성해 보려고 함;;
클래스 구조 짜는거 같이 모여서 해야 할 것 같기도해;; 너무 어려워;; 그리고 위의 코드는 당연히 에러가 나는거야;; Pixel 녀석을 CArray에 쳐 넣으삼 - 이승한
야 버튼리스트 클래스랑 버튼클래스 따로만들어서 추가하는 건 해봤는데 도무지 감이 안잡힌다
니말대로라면 버튼리스트 클래스에다 버튼추가하는 함수만들어서 그거 호출하면 저절로 버튼리스트에 하나씩 추가되서 밖히는거잖아
- 사과나무/과제방/1회차/김도익 . . . . 10 matches
scanf 함수는 사용자로부터 자료를 입력받는 함수입니다.
scanf() 함수는 입력란을 만들어 자료를 입력받는 함수입니다. 입력된 자료는 매개변수로 지정한 변수에 대입됩니다. 문장 형식을 통해 입력된 자료를 변수에 대입한다는 점에서 변수의 값을 문장 형식에 사용하는 printf() 함수와는 출력 방향이 반대인 셈입니다
scanf() 함수를 사용하기 전에 printf() 함수로 안내문을 보여주는 것이 좋습니다.
scanf() 함수로 입력된 자료는 변수에 저장됩니다. 이때 입력받을 수 있는 자료형의 종류가 정해진 상태이므로 사용자가 제대로 입력해주어야 합니다. 따라서 scanf() 함수로 자료를 입력받기 전에 어떤 자료를 입력해야 하는지 알려주는 안내문이 필요합니다. 이 안내문은 printf() 함수를 통해 미리 보여줄 수 있습니다.
- 새싹교실/2011/A+ . . . . 10 matches
그 뒤에 배열과 포인터를 동시에 나가려 했으나 이해력의 부족으로 배열선언 하는법까지만 배웠다.
* 중간고사 범위에 맞춰서 함수에대해서 배웠다. 진경이한테 얼핏 배워서 쓰는법은 알았었지만 return에 대해서 정확히 이해를 못했었는데 이번 수업으로 return쓰는 법을 이해하게 되었다. 함수를 쓸 수 있게 된덕에 앞으로 좀더 많은것을 짤 수 있게 될 것 같다. 그리고.. 팩토리얼을 짜봤다.[고한종/팩토리얼]
아참 함수도 배운것같다.
그런데 중간시험볼때 왠지 함수옆에 ;이거 안쓴것같다 제길.....
* 아, 실수로 피드백 쓰는 걸 까먹어서 언제 했는지도 기억이 안난다. 큰일이다. 당연히 뭐했는지도 기억이 안난다, 다만 내가 아직 배열과 포인터를 못쓰는걸 보아 복습을 했었던 것 같다. 진짜 배열 이전에 배우는 것이라면 이제 능숙하게 쓸 수 있는 것 같다. - [고한종]
* 피드백 쓰는게 갈 수록 늦어지고 있다 큰일이다 으헝헝. 배열과 포인터, call by value==pass by value에 대해서 배웠고 과제는 swap()을 구현해보라 하셨다. 포인터사용이 아직 능숙하진 않지만 이걸 이용하면 이제 할 수 있는게 무궁무진 해지겠지... 과제완료 : [고한종/swap()] 그리고 이걸 이용해서 다음 C프로그래밍 과목 과제로 예상되는 sort를 시도하고 있으나 잘안됨 ㅜㅠ - [고한종]
F10 : 한 단계씩 실행( 함수에 들어가지 않는다.)
F11 : 함수까지 포함, 한단계씩 실행
- 새싹교실/2011/AmazingC/6일차 . . . . 10 matches
* 함수의 선언 방법
* 함수엔 반환형이 존재한다.(반환형을 쓰지 않아도 된다)
* 함수의 선언부: 반드시 함수 호출하기 전에 선언을 해놓아야 한다!!
* 함수의 선언부=정의부가 될 수 있다.
* sum2의 경우 호출시 메인함수 위에 선언이 되어있나 확인한 다음 sum2의 정의부를 실행한다!!
* 함수의 recursive호출
6일차를 너무 늦게 올렸다. 얘들아 미안 ㅋㅋㅠㅠ 함수에 대해 좀 자세하게 알려주고 싶어서 2파트로 나눴다. 함수의 기본적인 개념들이라, 그리 어렵진 않았을 것 같다. 그리고 삼항 연산자를 이용해서 팩토리얼을 계산하는 방법도 알려주었다. 다음 시간엔 지역변수,전역변수,정적변수에 대해 배우고, 함수를 이용한 다양한 연산을 연습합니다.-[[신기호]]
- Adapter . . . . 9 matches
클래스 인터페이스를 예상되는 다른 인터페이스로의 변환을 한다. '''Adapter'''는 상이한 인터페이스 때문에 다른 달랐던 클래스의 일을 묶는 역할알 한다.
DP의 p147을 보면 '''Adapter'''클래스는 반드시 그것의 '''Adaptee'''를 타입으로 선언해서 가지고 있어야만 한다.이런 경우에는 해당 클래스와 그것에서 상속되는 클래스들만이 기능을 사용(adapt)할수 있다. Smalltalk에서 엄격한 형검사(Strong Typeing) 존재 않으면, class 가 '''Adapter'''에서 '''Adaptee'''로 보내어지는 메세지를 보낼수 있는 이상 '''Adaptee'''가 어떠한 클래스라도 상관없을 것이다. [[BR]]
자 그럼 Adapter를 적용시키는 시나리오를 시작해 본다. ''Design Patterns''(DP139)에서 DrawingEditor는 그래픽 객체들과 Shape의 상속도상의 클래스 인스턴스들을 모아 관리하였다. DrawingEditor는 이런 그래픽 객체들과의 소통을 위하여 Shape 프로토콜을 만들어 이 규칙에 맞는 메세지를 이용한다. 하지만 text인자의 경우 우리는 이미 존재하고 있는 TextView상에서 이미 구현된 기능을 사용한다. 우리는 DrawEditior가 TextView와 일반적으로 쓰이는 Shape와 같이 상호작용 하기를 원한다. 그렇지만 TextView는 Shape의 프로토콜을 따르지 않는 다는 점이 문제이다. 그래서 우리는 TextShap의 Adapter class를 Shape의 자식(subclass)로 정의 한다. TextShape는 인스턴스로 TextView의 참조(reference)를 가지고 있으며, Shape프로토콜상에서의 메세지를 사용한다.; 이들 각각의 메세지는 간단히 다른 메세지로 캡슐화된 TextView에게 전달되어 질수 있다. 우리는 그때 TextShape를 DrawingEditor와 TextView사이에 붙인다.
우리는 Tailored Adapter안에서 메세지를 해석을 위하여 해당 전용 메소드를 만들수 있다. 왜냐하면 디자인 시간에 Adapter와 Adaptee의 프로토콜을 알고 있기 때문이다. The Adapter class는 유일한 상황의 해석을 위해서 만들어 진다. 그리고 각각의 Adapter의 메소드는 Adaptee에 대한 알맞은 메세지들에 대하여 hard-codes(전용 함수 정도의 의미로 생각) 이다
Adapter시나리오의 두번째는 Adaptee의 인터페이를 디자인 시간에 알수 없을 때 이다. Adaptee의 인터페이스를 먼저 알수 없기 때문에 우리는 하나의 인터페이스에서 다른 것으로 메세지를 간단히 해석할수 없다. 이런 경우에는 메세지의 변형과 전달의 일반적 규칙에 맞추어 Pluggable Adapter를 사용한다. Tailored Adapter와 같이 Pluggable Adapter도 해석기를 Client와 Adaptee사이의 해석기를 제공한다. 하지만 각각의 특별한 경우를 위한 새로운 Adapter클래스의 정의를 필요하지 않다. Pluggable Adapter가 쓰이는 경우의 상태를 생각해보자
- Class . . . . 9 matches
물 : '물'이라는 클래스.
음.. 나만의 생각일지는 모르겠는데... 물 시리즈로 모델링을 한다면 물 클래스를 상속받는 지하수 클래스, 해수 클래스 등등으로 보통 가지 않남?;
해수 : '해수' 라는 클래스.
- 염분 : '염분' 이라는 클래스.
클래스 '염분'
염분 : '염분'이라는 클래스
- 바닷물 속에는 다양한 원소들이 '염분'이라는 단어로 추상화된다. ->클래스.
- DPSCChapter1 . . . . 9 matches
* 어떤 클래스들이 frameworks로서 서로 잘 작동하는지에 대해
'''디자인 패턴'''은 끊이없이 발생하는 클래스 구성상의 문제에 해결책을 제시하는 재사용할수 있는 실행 모델이나 아키텍처이다. 때로 패턴은 단독적이거나 하위 클래스 구조에서 어떻게 매서드 들이 함께 작용하는지를 묘사한다.; 아마도, 패턴상에서는 좀더 빈번히 다중 클래스나 그들의 인스턴스의 협력을 보여줄다.
디자인 패턴은 새로운 패턴에 관해서 간단하게 원리를 표현하고, 패턴은 존재하는 모습을 꾸준히 설명한다.패턴은 세부내용에 들어가기 앞서, 좀더 큰 관점으로 이해를 할수있게 한다. 패턴은 우리가 좀더 큰 관점에으로 ㄸ 다른 디자이너들의 생각의 교환시 객체과 클래스가 어떻게 구성되어 있는지 묘사한다. 우리는 "싱글턴 메소드로 데이터 베이스 접근 부분을 구성했습니다." 그리고 "데이터 베이스 접근은 오직 하나의 인스턴스만이 접근하도록 해습니다. 그 클래스는 싱글 인스턴스의 방법 사용을 위해서 클래스 변수를 사용할것입니다. 그 클래스는 광역으로 광역으로 접근가능한 인스턴스로 될것이지만, ''나중고침''
그 클래스는 그 인스턴스가 만들어지고... "고 말할수 있습니다. 당신은 어떻게 설명하겠습니까?
- DelegationPattern . . . . 9 matches
클래스에 대해 기능을 확장하는 두가지 방법중 하나이다. 하나는 상속이고 하나는 위임(Delegation) 이다. 상속을 하지 않아도 해당 클래스의 기능을 확장시킬 수 있는 방법이 된다.
또한, 클래스 하나가 방대해질때, 적절하게 그 클래스의 책임을 다른 클래스들에게 위임해주는 것은 ["Refactoring"] 의 방법이 된다.
DelegationPattern을 쓸 때 중요한 점은, DelegationPattern을 사용하는 클래스의 클라이언트는 그 클래스가 Delegation을 쓰는지 안쓰는지 몰라야 한다는 것이다. 즉, 우리에게 있어 DelegationPattern이 사용된 클래스는 여느 클래스와 동일하게 인식되고 사용되어져야 한다. 게을러서 남에게 자신의 숙제를 위임하는 학생은 절대 남들에게 그 사실을 노출해선 안된다.
- DevelopmentinWindows . . . . 9 matches
* 윈도우즈 프로그래밍을 하기 위해 필요한 함수들을 제공
* 윈도우즈 API를 클래스로 포장하여 제공하는 클래스 라이브러리
||LPCSTR||NULL 문자로 끝나는 문자열 상수 포인터||
||LPSTR||NULL 문자로 끝나는 문자열 포인터||
* 함수명
* 윈도우를 만드는 함수는 CreateWindow, 메시지를 보내는 함수는 SendMessage
||p & lp||포인터 변수||
- MFC/CObject . . . . 9 matches
MFC의 계층 구조의 최상단에 있는 클래스이다. 자바로 치자면 Object 클래스에 비슷한 클래스이다.
이 클래스로부터 파생된 클래스는 다음의 3가지 레벨로 구분되는 기능이 있다.
|| DECLARE_DYNAMIC() || 런타임 클래스 정보를 지원한다. ||
|| DECLARE_DYNCREATE() || 런타임 클래스 정보와 동적인 객체 생성을 지원한다. ||
|| DECLARE_SERIAL() || 런타임 클래스 정보와 동적인 객체 생성, 그리고 객체들의 시리얼화를 지원한다. ||
''각각은 보조 매크로가 필요하며 DECLARE_ 대신 IMPLEMENT_ 접두사가 붙은 형태이다. 보조매크로는 클래스의 구현 파일 부분에 포함되어야 한다.''
- OurMajorLangIsCAndCPlusPlus/stdio.h . . . . 9 matches
== 함수 리스트 ==
|| 함수형식 || 용도 ||
|| int fgetpos(FILE *, fpos_t *) || 해당 스트림의 포인터의 위치를 fpos_t에 저장한다. ||
|| FILE * freopen(const char *, const char *, FILE *) || 세번째 인자의 스트림을 닫고 그 포인터를 첫번째 인자의 파일으로 대체한다. ||
|| int fsetpos(FILE *, const fpos_t *) || 해당 스트림의 포인터를 지정한 위치로 옮긴다. ||
|| int fseek(FILE *, long, int) || 해당 스트림의 포인터를 세번째 인자를 기준으로 두번째 인자만큼 옮긴다. SEEK_SET : 스트림 시작, SEEK_CUR : 현재 포인터 위치, SEEK_END : 스트림 끝 ||
|| long ftell(FILE *) || 해당 스트림의 포인터의 위치를 리턴 합니다. ||
|| void rewind(FILE *) || 해당 스트림의 처음으로 포인터를 이동한다. ||
- SpiralArray/Leonardong . . . . 9 matches
TDD로 풀었다는 점이 기쁘다. 처음부터 너무 메서드를 어디에 속하게 할 지 고민하지 않고 시작한 것이 유용했다. 그 결과로 예전 같으면 생각하지 못했을 Direction클래스와 그 하위 클래스가 탄생했다. 또한 행렬은 최종 결과물을 저장하고 보여주는 일종의 뷰처럼 쓰였다.
현재는 행렬 구성이 비효율적이다. 움직였던 기록을 가지고 행렬을 구성하기를 반복한다.이것을 수정할 때 좀더 효율적으로 작동하게 만들어야겠다. Mover클래스, Array클래스의 종료검사, 테스트 케이스는 확실히 Refactoring이 필요하다.
지난 번 리팩토링 대상이었던 Mover클래스, Array클래스의 종료검사, 테스트 케이스를 리팩토링 했다. 테스트 케이스와 Array클래스는 쉽게 리팩토링 할 수 있었다. 하지만 Mover클래스를 손대는데 오래 걸렸다.
goStraight 전 버전은 Direction클래스를 이용해서 이동한(벽을 만나면 이동하지 않음) 위치를 얻어내고, 이동한 기록을 저장하는 형식이었다. 벽에 대한 검사가 겹치는 것 같아 mover에서 바로 벽을 검사하고 벽에 들어서면 종료하는 것으로 만들었다. 그러고 보니 따로 카운트 할 필요가 없어 moveCount변수를 없앴다. mover가 종료 조건도 검사하는데 board 넓이만큼 이동했으면 끝나는 것이기 때문이다.
- VisualBasicClass/2006/Exam1 . . . . 9 matches
㉢ 폼 위에서 마우스 포인터를 컨트롤을 두고 싶은 위치에서 클릭, 드래그하면 컨트롤이 나타난다.
13. 서브프로그램과 함수에 관련된 설명 중 가장 부적절한 것은?(1점)
③ 함수는 수행한 결과를 호출한 프로그램에게 반한하는데 입력 인수는 여러 개일 수 있으나 출력 인수는 오직 하나이다.
④ 일반적으로 함수 이름이 F_Name일 경우, 이 함수 내부에는 F_Name = 식 형태의 할당문이 있어야 한다.
16. 다음의 주어진 함수(용어)에 결과를 기록하시오.(3점)
17. 날짜/시간 함수의 결과가 옳지 않은 것은? (7월 6일 오전 11시)(1점)
18. 다음의 결과를 보고 ①~③번에 필요한 함수를 입력하시오.(* 단, '_' 기호는 공백임.)(3점)
인터프리터이다 보니 평소에 많이 짜지 않는 이상 함수 하나하나의 특징을 잘 모르기 때문에...
- 간단한C언어문제 . . . . 9 matches
안옳다. 메인함수 정의가 잘못되어있다. -yahar
C언어의 컴파일러에 따라 메인함수는 저렇게 쓰일 수가 있어요;;; 특정 컴파일러는 return형이 int형이 아니라고 warnning을 내기도 하죠;; - [이영호]
옳다. 콘스트 캐릭터 별에이는 포인터의 주소 그러니까 &a 값만 변하지 않는거같다(아닌가;;)-[정수민]
옳지않다. atof함수로 float변환은 되었지만, atof함수의 프로토 타입이 있는 헤더를 추가하지 않았기 때문에 int형으로 return된다. 즉, num엔 숫자 123이 담긴다. ANSI C99에서는 프로토타입이 선언되지 않으면 컴파일되지 않도록 변했다. - [이영호]
안옳다. 단순히 포인터만 존재한다. -[정수민]
옳지않다. 포인터만 있다. - [이영호]
옳지 않다. static은 C++의 private와 비슷하다. 한 파일이나 특정 로컬함수에서만 쓰인다는 것을 표현한다. - [이영호]
옳지않다. 함수의 프로토 타입이 정의되지 않았기 때문에 return형이 int형으로 바뀐다. 프로토타입은 return 타입을 컴파일러에서 알기 위해 쓰이는 것이다. - [이영호]
- 객체지향분석설계 . . . . 9 matches
영구적으로 저장되는 데이터를 선택한다. 이 자료들은 Entity 클래스가 된다.
각 클래스간의 상관관계를 분석, Control 클래스와 Boundary클래스로 나누어 선택한다.
* Control 클래스 : DB와의 연결, 객체의 컨트롤을 담당하는 클래스
* Boundary 클래스 : 화면 UI를 담당하는 클래스
위의 분석을 바탕으로 하여 Sequence Diagram을 개략적으로 작성한다. 역시 Actor와 각 클래스들을 미리 배치한 다음 필요한 조작들을분석한다.
- 데블스캠프2011/둘째날/Machine-Learning/NaiveBayesClassifier/김동준 . . . . 9 matches
// 들어온 데이터의 신뢰성을 체크하는 함수. 신뢰성이 없는경우 False 반환
//자기 Section 이 아닌 내용을 Calculate 하는 함수. Index 에 반응하며 수행시 초기화 후 계산한다.
//해당 단어에 대한 자기 Section 이 아닌 단어수를 Calculate 하는 함수. Index 에 대응하며 수행시 초기화 후 계산한다.
//해당 기사에 대한 연산 결과를 반환하는 함수. 양수일 경우 해당 Index Section 에 일치하는 기사로 판단한 것이며, 음수일 경우 해당 Index Section 에 일치하지 않는 기사라고 판단한 것이다.
// Ln[p(S) / p(!S)] 값을 계산하는 함수. Index 에 대응한다.
// Sigma Ln[p(Wi ^ S) / p(Wi ^ !S)] 값을 계산하는 함수. Index 에 대응한다. 단 특정 단어에 대한 Advantage 를 부과한다. (Advantage 함수 참조)
// 특정 단어에 대한 Advantage 부과함수. 해당 Index Section 에만 존재하는 단어일때 빈도에 따른 가산점을 부여한다. 가산은 해당단어수 / Section 전체기사수 * 50 이다.
// 해당 File 변수에 대한 Index Section 과의 매치율을 보여주는 함수. 맞은 것과 틀린것, 그리고 그 것에 대한 판단 확률을 반환한다.
- 새싹교실/2011/쉬운것같지만쉬운반/2011.3.29 . . . . 9 matches
* 표준 입,출력 함수 중 대표 함수 설명~
1. printf 함수의 작동 원리
4. 다음 printf 함수와 scanf 함수 사용 중 틀린 것을 고르고, 제대로 고치시오.
* 오늘은 표준 입출력 함수, 상수&변수의 의미와 각종 연산자들에 대해서 배웠다. 역시 배우면 배울수록 흥미롭다. 그런데 용운이는 다 알고있고 형준이는 안오고 뭔가 나만 배우고 있는 듯한 느낌이...... ㅜㅜ. 아무튼 지금은 무식해도 올해가 끝나갈 쯤엔 나도 C언어 마스터가 되야지. - 송치완
* 내가 새싹할 때 설명을 안했던 부분이 있어서 발견을 못했구나 ! scanf함수 라인의 의미는 "10진수 정수형을 입력받아 x 변수에 저장하겠다."인데, 이때 x 앞에 &를 붙여줘야 돼. "x -> &x" 이렇게 바꿔줘야 돼~ - [박성현]
1. 개행 문자(\n)는 printf 함수에서 줄을 넘길 때 사용합니다. 이것에 캐리지 리턴(\r)을 직접 타이핑하지 않는 이유는 printf 함수가 텍스트 모드로 출력하기 때문에 자동으로 캐리지 리턴이 앞에 붙게 되기 때문입니다.
- 새싹교실/2012/도자기반 . . . . 9 matches
그전에 헤더파일을 불러오는 부분(#include<stdio.h>)과 main함수의 형태(int main(void){return 0;})에 관해서도 설명했습니다.
(stdio가 뭘 뜻하는지, 다른 헤더파일에는 무엇이 있는지 와 main앞에 int는 왜붙은건지 괄호안에 void는 뭔지 왜 마지막에 return 0;을 썼는지에 관해서 설명했습니다. 하지만 아직 함수를 안배워서 그런지 이해가 잘 가는것 같지는 않았지만 일단 이렇게 알아두면 된다고 했습니다.)
마지막으로 입출력 기본 함수 사용법을 알려준 후 C수업시간에 한 예제들과 간단한 과제들을 직접 해보게 시켰습니다.
* 다양한헤더파일을 설명해줬습니다. 2주차 예제에 새로 등장한 stdlib.h, time.h 에 포함되는 간단한 함수들을 설명했습니다. 그리고 #define을 쓰는 이유도 설명했습니다. 랜덤변수를 얻기 위한 rand함수와 사용법 등을 알려주면서 다시 한번 winapi.co.kr 에 대해서도 언급했습니다. 또한 srand(time(NULL))을 사용하여 씨드를 설정해줘야 매번 다른 값이 나오는 것도 설명 했습니다.
구조체 선언 방법과 typedef를 쓰는 이유를 설명 하는데 구조체 예제 안에 배열이 있어서 배열에 대해서 먼저 설명했습니다. 배열의 이름이 갖는 의미와 인덱스로 접근가능한 자료구조라는 것을 설명했습니다. 그 다음으로는 미뤄왔던 함수에 대해서 설명했습니다. 이번에도 예제로 설명하려 했는데 파라미터로 포인터를 받아오기에 먼저 포인터에 관한 설명을 했습니다. swap예제를 사용하여 call by value 기반의 C에서 포인터를 사용하여 call by reference를 구현 할 수 있다고 설명했습니다. 그리고 배열접근 방법에 인덱스와 배열이름+숫자 로 접근하는 방법도 알려줬습니다.
- 실습 . . . . 9 matches
객체와 클래스 (성적 관리 프로그램)
성적 관리하는 프로그램을 클래스(class)를 이용하여 C++로 작성하여 본다.
1. 클래스(Class) 설계
Member 함수
입력함수 void Input(char szName[],int nKorean, int nEnglish,int nMath);
총점 함수 int GetTotal(void);
등수 함수 int GetRank(void);
등수 기록 함수 void SetRank(int nRank);
결과출력 함수 void PrintResult();
- 채팅원리 . . . . 9 matches
ReceiveEvent : 클라이언트의 이벤트를 받는 부분이다. 이 이벤트가 StatusDisplay 클래스에 적용된다. 각각의 이벤트는 다음과 같다.
Broadcast : 클라이언트끼리 주고받는 대화 내용을 전달하는 클래스이다.
SendUser : 클라이언트 사용자가 현재 접속되어 있는 사람들의 ID를 알 수 있게 List에 사용자 이름을 보내주는 클래스이다.
클라이언트쪽에는 4개의 Thread가 있다. JFrame을 사용한 클래스가 2개 있는데, 하나는 Login때 ID사용 허가를 확인한는 프레임이고, 다른 하나는 채팅의 기본 프레임이다. 4개의 Thread는 다음과 같다.
ChatMain : 채팅의 주 인터페이스를 관리하는 클래스이다. 이 클래스에서 대부분의 GUI를 관리하고, 채팅메세지보여준다. 또한 채팅에 접속한 사람들의 ID를 보여준다.
ReceiveMessage : 서버로부터 전달되는 메시지를 받아서 ChatMain 클래스의 메시지 출력 화면에 보여주는 역할을 한다.
UserList : ChatMain 클래스의 사용자 List에 접속한 사용자 ID를 보여주는 기능을 한다.
서버가 시작하면 ReceiveEvent 클래스에서 클라이언트로부터 전달되는 Event를 기다리는 동시에 StatusDisplay 쓰레드와 다른 쓰레드들을 시작한다.
- 허아영/C코딩연습 . . . . 9 matches
포인터 처리에 대한 연습
• 포인터로 배열들의 요소를 지적하고 배열간의 자료교환을 하는 프로그램을 작성하시오.
- 변수형과 포인터와의 관계, 포인터가 가리키는 대상의 크기 등을 보여주는 기능을 첨가하여 작성하시오.
함수 이름을 막 짓던 습관을 버리기로했다.
함수를 기능 별로 만들려는 습관은 가지기로 했다.
=== 팩토리얼(재귀함수 쓰지않고) ===
>>팩토리얼- 재귀함수<<를 쓰지않고 !! */
아직도 프로그래밍하는데 세미콜론을 빠트린다던지, scanf 함수를 쓸 때 변수앞에 &을 붙지지 않을 때가 다반사다.
- 05학번만의C++Study/숙제제출/2 . . . . 8 matches
* 평상시에는 문자열의 주소를 하나의 전달인자로 취하여, 그 문자열을 한 번 출력하는 함수를 작성하라. 그러다가 0이아닌 int형 값을 두 번째 전달인자로 제공하면, 그 시점에 도달할 때까지 그 함수가 호출되었던 횟수만큼 그 문자열을 반복해서 출력한다. (문자열이 출력되는 횟수는 두 번째 전달인자의 값이 아니라 그 함수가 호출되었던 횟수와 같다.)물론 이 함수는 거의 쓸모가 없다. 하지만 이것은 이 장에서 설명한 몇 가지 프로그래밍 기술을 사용할 것을 요구한다. 이들 함수를 사용하여 함수의 작동을 보여 주는 간단한 프로그램을 작성하라
* 여기서 질문!! 전달인자가 1개인 함수와 2개인 함수만들어 오버 로딩 하라는 것인가? 그게 아니라면... cin을 라인별로 입력 받아햐겠는데.. 어떤때는 변수를 하나만 받고 어떤때는 변수를 두개 받아야하니.. 라인별로 처리 해야할듯.. 하지만 라인별로 처리해도....;;;; 음... 생각이 떠오르지 않음..;;; 쳇..;;[[BR]] 어제 교수가 defalte 에 대해 설명했던거 같은데.. 전달인자를 취하지 않으면 이미 입력된 변수의 값으로 처리한다. 라고...;; 음..;;;이렇게 해야하나?
- CppStudy_2002_1 . . . . 8 matches
* C++의 클래스 부분을 미리 여러가지 과제들과 함께 같이 공부하는 공간입니다.
|| 7.18 ||8.함수의 활용(104page)|| 458P ~ 460P 프로그래밍 연습 + ???? ||
|| 7.25 ||9.객체와 클래스(60page)|| ["BusSimulation"] ||
|| 8.1 ||10.클래스를 사용하자(64page)||["StringOfCPlusPlus"] ||
|| 8.9 ||11.클래스와 동적 메모리 할당(76page)||["LinkedList"] ||
|| 8.16 ||12.클래스 상속(72page)|| ["LinkedList/StackQueue"][[BR]]C++2팀과의 프로그래밍 잔치? 링크드 리스트로 스택,큐 구현||
상협. [STL/string|String] 클래스의 스펙을 어떻게 주었는지? 사람들이 왜 전부 String 이용 프로그램 GOD 클래스를 만드는걸까 궁리.
- Gof/Visitor . . . . 8 matches
이러한 operations들의 대부분들은 [variable]들이나 [arithmetic expression]들을 표현하는 node들과 다르게 [assignment statement]들을 표현하는 node를 취급할 필요가 있다. 따라서, 각각 assignment statement 를 위한 클래스와, variable 에 접근 하기 위한 클래스, arithmetic expression을 위한 클래스들이 있어야 할 것이다. 이러한 node class들은 컴파일 될 언어에 의존적이며, 또한 주어진 언어를 위해 바뀌지 않는다.
이 다이어그램은 Node class 계층구조의 일부분을 보여준다. 여기서의 문제는 다양한 node class들에 있는 이러한 operation들의 분산은 시스템으로 하여금 이해하기 어렵고, 유지하거나 코드를 바꾸기 힘들게 한다. Node 에 type-checking 코드가 pretty-printing code나 flow analysis code들과 섞여 있는 것은 혼란스럽다. 게다가 새로운 operation을 추가하기 위해서는 일반적으로 이 클래스들을 재컴파일해야 한다. 만일 각각의 새 operation이 독립적으로 추가될 수 있고, 이 node class들이 operation들에 대해 독립적이라면 더욱 좋을 것이다.
우리는 각각의 클래스들로부터 관련된 operation들을 패키징화 하고, traverse 될 (tree 의 각 node들을 이동) abstract syntax tree의 element들에게 인자로 넘겨줄 수 있다. 이를 visitor라고 한다. element가 visitor를 'accepts' 할때 element는 element의 클래스를 인코딩할 visitor에게 request를 보낸다. 이 request 또한 해당 element를 인자로 포함하고 있다. 그러면 visitor는 해당 element에 대한 operation을 수행할 것이다.
예를든다면, visitor를 이용하지 않는 컴파일러는 컴파일러의 abstact syntax tree의 TypeCheck operation을 호출함으로서 type-check 을 수행할 것이다. 각각의 node들은 node들이 가지고 있는 TypeCheck를 호출함으로써 TypeCheck를 구현할 것이다. (앞의 class diagram 참조). 만일 visitor를 이용한다면, TypeCheckingVisior 객체를 만든 뒤, TypeCheckingVisitor 객체를 인자로 넘겨주면서 abstract syntax tree의 Accept operation을 호출할 것이다. 각각의 node들은 visitor를 도로 호출함으로써 Accept를 구현할 것이다 (예를 들어, assignment node의 경우 visitor의 VisitAssignment operation을 호출할 것이고, varible reference는 VisitVaribleReference를 호출할 것이다.) AssignmentNode 클래스의 TypeCheck operation은 이제 TypeCheckingVisitor의 VisitAssignment operation으로 대체될 것이다.
VisitorPattern으로, 개발자는 두개의 클래스 계층을 정의한다. 하나는 operation이 수행될 element에 대한 계층이고 (Node hierarchy), 하나는 element에 대한 operation들을 정의하는 visitor들이다. (NodeVisitor hierarchy). 개발자는 visitor hierarchy 에 새로운 subclass를 추가함으로서 새 operation을 만들 수 있다.
- JavaScript/2011년스터디/7월이전 . . . . 8 matches
* 오늘은 PairProgramming으로 [http://probablyinteractive.com/url-hunter URLHunter]를 만들어보았는데 setInterval 함수를 사용하여 계속 페이지 주소를 바꿔주는 부분까지 성공했습니다. 처음에는 setTimeout 함수를 사용해서 생각처럼 제대로 작동하지 않았어요. 다음주엔 새내기가 스터디에 합류할텐데 매우 기대됩니다. 우리가 했던것들을 설명해주고 같이 [http://probablyinteractive.com/url-hunter URLHunter]를 만들어보려고 해요. 시간이 너무 걸리지 않도록 어떻게 접근할지 주말에 미리 생각해보겠습니다. - [김수경]
* 오늘은 새 멤버가 두명 합류했습니다. 기쁘기도 하고 앞으로 스터디를 어떻게 진행해야할지 고민도 조금 되네요! /URLHunter는 점점 그럴듯해지고 있습니다. 지난시간에 문제가 됐던 부분을 해결했어요. 다만 급하게 문제를 해결해나가느라 코드가 지저분해진 게 문제네요. 다음주에 기능이 다 구현될 것 같은데 코드 정리도 좀 해야겠습니다. - [김수경]
* 함수가 프로퍼티로 사용될 수 있다??-43p 라는 표현이 있는데 그게 어떤 것인지 잘 모르겠더라구요.
* 저희는 저번주 숙제로 함수까지와 바로뒤 객체까지 새로 공부해보았는데요. 둘다 이 명령어들은 대체 뭔가, 이건 무슨뜻이야?! 가 다반사였습니다. 이해할 수 없는 명령어들은 나중에 다시 나올것이라 가정하고(..) 몇몇개 넘어갔구요. 개념적인 것에서 불리언, 함수, 객체, 프로퍼티등에 대해서 다시 고민해봤어요. 우선 문자열로 숫자를 써놓고 그것을 연산하면 숫자로 바뀐다는 것이 어떤 것인지 좀 명확히 해보았구요, 불리언은 T/F==1/0라는 것에 대해도 보았지요. 함수는 C에서 배웠던 것과 유사해서 크게 어려움은 느끼지 않았구요(앞에 함수 선언을 할 필요가 없더군요!). 문제는 객체/프로퍼티 였는데, 뒤에있는 예제들을 통해 어떤 객체의 속성? 쯤으로 프로퍼티가 있다는 결론을 내렸어요. (이것을 토대로 코딩해보았을때도 저희 예상대로 나왔지요.) ..또 띄어쓰기 문제때문에 한참 고민한 것도 생각나네요. -[김태진]
- MoreMFC . . . . 8 matches
그럼 이제 이 책에서 처음 나오는 MFC programming source를.. 공개 한다. Dialog based로 프로젝트를 연후 Dialog에 관한 class는 project에서 뺀후 App클래스내에 이 source를 쳐주면 될것이다. - 신기 하게도 App class와 MainWindow클래스만 있다. 이런 source는 처음 봐서 생소 했지만, MFC에서 제공해주는 source보다는 깔끔해 보였다.-
// CWinApp::InitInstance를 override한 가상함수이다.
떡하니 source를 보면 어떻게 돌아가는 거야.. --; 라는 생각이 든다.. 나도 잘모른다. 그런데 가장 중요한것은 global영역에 myApp라는 변수가 선언되어 있다는 사실이다. myApp 라는 instance가 이 프로그램의 instance이다. --a (최초의 프로그램으로 인스턴스화..) 그리고, CWinApp를 상속한 CMyApp에 있는 유일한 함수 initInstance 에서 실제 window를 만들어준다.(InitInstance함수는 응용 프로그램이 처음 생길 때, 곡 window가 생성되기전, 응용 프로그램이 시작한 바로 다음에 호출된다) 이 부분에서 CMainWindow의 instance를 만들어 멤버 변수인 m_pMainWnd로 pointing한다. 이제 window는 생성 되었다. 그렇지만, 기억해야 할 것이 아직 window는 보이지 않는다는 사실이다. 그래서, CMainWindow의 pointer(m_pMainWindow)를 통해서 ShowWindow와 UpdateWindow를 호출해 준다. 그리고 TRUE를 return 함으로써 다음 작업으로 진행 할 수 있게 해준다.... 흘. 영서라 뭔소린지 하나도 모르겠네~ 캬캬.. ''' to be continue..'''[[BR]]
그리고, 그 다음으로 진행되는 것이. CMainWindow에 있는 OnPaint라는 함수. window의 client 영역에 무언가를 그리는 함수가 호출된다. (그 전에 이것 저것 많이 있겠지만... 뭐 매크로를 통해 messagemap 관련 entry라던지.. 이런것들을 선언해 주는 작업.. --a) 그래서, DrawText를 이용해 화면 중앙에 "Hello, MFC"를 그린다. 그러면 이 프로그램의 기능(?)은 끝이다.[[BR]]
- SuperMarket/인수 . . . . 8 matches
// map<string, Cmd*> 이런식으로 string에는 커맨드를,Cmd 클래스는 HelpCmd클래스, Deposit클래스 등등의 부모 클래스, 즉 명령 클래스들의
// 조상 클래스를 포인터로 넣어줬습니다. 동적 바인딩을 하기 위해서..--; Parser생성할때 map 테이블에다 명령들을 넣어주면서 그 명령에
// 해당하는 클래스를 동적 할당해주면서 넣었습니다. 소멸자에서는 해제하는 것도 잊지 않았구요. 나름대로 상당히 고민을 했지만..--;
- UpdateWindow . . . . 8 matches
일반적으로 하노이의 탑은 재귀함수 알고리즘이 가장 쉽기 때문에, 재귀함수를 사용하여 짜고 있었다.
재귀함수가 실행될때마다 Invalidate()를 호출하도록 해 두었는데. 화면 갱신은 재귀함수가 끝난 경우에만 하고 있었다.
[상규]군에게 물어 해답을 찾았다. Invalidate()함수는 다음 WM_PAINT메세지가 왔을때 화면을 다시 그리도록 명령하는 함수이다. 재귀나 반복문을 수행하는 동안에는 WM_PAINT 메세지가 발생하지 않기 때문에 강제적으로 WM_PAINT메세지를 발생시켜 주어야 하는데, 그 함수가 UpdateWindow()함수이다.
- VisualStuioDotNetHotKey . . . . 8 matches
==== 클래스 뷰 ====
Shift+Alt+F12 : 이거 찾기보다 좋더군요. 함수나 define등 아무거나에서 사용
==== 소스파일의 함수헤더만 보이기 ====
Ctrl-M, Ctrl-L : 소스파일의 함수헤더만 보이기 (구현부는 감추고) (토글 키)
==== 함수툴팁 강제 호출 ====
Ctrl-Shift-Spacebar : 함수이름편집중 '''툴팁'''으로나오는 함수와매개변수설명이 안나올경우, 강제로 나오게
현 함수를 빠져나감.
- WOWAddOn/2011년프로젝트/초성퀴즈 . . . . 8 matches
아래 함수는 문자열이 들어오면 몇 byte를 차지해주는지 알려주는 함수이다
Addon이 적재되면 해당 프로그램 전체가 올라간것이기 때문에 WOW 메모리에 할당이 되있다. 따라서 Addon에서 flag는 따로 메모리를 할당 받았다는 얘기. 따라서 전역 변수는 addon의 함수 어디서든 접근이 가능하단 소리가 된다.
=== 자동 Update함수 찾고 timer찾기 ===
우선 와우에서는 API설명상. Addon에 Sleep을 걸어놓으면 전체 시스템이 멈추는것으로 되어있다. 그렇다면 쓰레드를 만들어서 Sleep을 했다가. 복귀하면 하는건 어떨까? 우선 Sleep을 Lua의 System함수 패키지인 OS에서는 지원해주지 않는다.
2주를 찾아서 자동으로 0.1초나 0.2초사이에 자동으로 Check를 해주는 함수를 찾아해매었다.
자 Frame에 OnUpdate라는게 있고 OnUpdate가 실행될때마다 HelloWoW_OnUpdate라는 함수를 실행해준다.
OnUpdate에 적용할 함수를 만들고 가상 프레임이 아닌 실제 프레임을 툴로 만들어 생성하게 하면
- 레밍즈프로젝트/프로토타입/파일스트림 . . . . 8 matches
CFile 클래스 내의 Write() 함수를 이용해서 'A' ~ 'Z' 까지 써 넣는 함수 (OnWriteFile())와,
파일에 쓰여진 'A' ~ 'Z'까지 불러들여서 화면에 출력하는 함수 (OnReadFile()) 함수이다.
위의 OnWriteFile()에서 쓰여진 Open() 함수와 Write() 함수를 쓰게 될것 같다.
기본적인 Read() 함수도 사용할 것 같다.
- 새싹교실/2012/열반/120319 . . . . 8 matches
== main 함수 ==
== printf 함수 ==
* 출력을 위한 함수
* printf 함수가 명시적으로 정의되지 않았기 때문에 컴파일에 실패하거나, 경고가 뜸.
* 함수들을 쓸 수 있도록 함.
* .h : 함수들의 집합
* else if, 전역 변수, 함수
* 재귀함수를 이용한 반복문을 먼저 설명하려 합니다.
- 새싹교실/2013/이게컴공과에게 참좋은데 말로설명할 길이 없네반 . . . . 8 matches
> 배열에 도달했을때, 이제 속도를 죽이고 천천히 포인터와 엮어서 설명한다.
> 그리고 포인터까지 설명을 끝내면, 이제 게임을 만든다.
> 이런 게임을 발전시키는 방향으로 포인터 연습
- 진도 : 컴퓨터 역사, 컴퓨터 언어의 역사, 컴퓨터 구조(미약하게.. 운영체제가 뭔지, 메모리가 뭔지, 컴퓨터가 뭔지.), 자료형, main함수(기본 구조)
- 진도: 캐스트 형변환과, 자동 형변환 방식, 리턴값이 왜 필요한지 예시를 통한 설명(함수약간설명)
- 진도 : 복습, 여러가지 함수 가르쳐줌.(puts, getch, gotoxy, Sleep)
- 앞으로의 방향 : 이제 문제를 풀면서 메모리의 구조를 다시 전반적으로 설명하고, 입출력방식, 간단한 알고리즘(유클리드 호제법같은)을 가르친다. 이렇게 준비를 한후 포인터에 돌입. 그리고 포인터에 대해서 이해가 어느정도 쌓였을때 발전시킬 수 있는 프로그램을 만들게 하면서 실력을 증가시킨다.
- 스네이크바이트/C++ . . . . 8 matches
== 클래스 연습 ==
int getTotal(); //총점을 구하는 함수
=== 클래스안에서의 스태틱 ===
== 포인터 ==
배열포인터
포인터++
포인터 배열
구조체 포인터
- 이영호/개인공부일기장 . . . . 8 matches
☆ 구입해야할 책들 - Advanced Programming in the UNIX Environment, Applications for Windows, TCP/IP Illustrated Volume 1, TCP/IP Protocol Suite, 아무도 가르쳐주지않았던소프트웨어설계테크닉, 프로젝트데드라인, 인포메이션아키텍쳐, 초보프로그래머가꼭알아야할컴퓨터동작원리, DirectX9Shader프로그래밍, 클래스구조의이해와설계, 코드한줄없는IT이야기, The Art of Deception: Controlling the Human Element of Security, Advanced Windows (Jeffrey Ritcher), Windows95 System Programming (Matt Pietrek)
☆ 레퍼런스 - 리눅스 공동체 세미나 강의록, C언어 함수의 사용법(함수 모음), 데비안 GNU/LINUX, C사용자를 위한 리눅스 프로그래밍, Add-on Linux Kernel Programming, Secure Coding 핵심원리
3일 (수) - Real Time Signal (기초) - fcntl, umask, 등의 함수에 대한 깊은 공부가 필요함.
28 (목) - C++(연산자 오버로딩, 연산자 오버로딩으로 String 클래스 디자인 해보기.)
26 (화) - Compilers, C++(다양한 Virtual 상속, Class의 메모리 구조-C의 구조체와 대비하여/Class는 구조체로 포인터함수를 사용해 구현한 메모리 구조와 비슷하다.)
- 26 (화) - malloc, new로 생성되어지는 메모리 구조. dynamic memory alloc은 변수(클래스)앞 1WORD(32비스에서 4바이트) 앞에 정보(크기, 위치, 사용)를 저장한다.
- 10학번 c++ 프로젝트 . . . . 7 matches
* 현재 시각일떄의 버튼 입력함수[김정욱]
* 초시계 함수[박정근]
* 초시계일때의 버튼입력 함수[박재홍]
* 알람 설정 함수[김정혜]
* 알람 설정 일떄의 버튼입력 함수[윤종하]
* 3부분 전부 연결 성공했으나, 초시계를 클래스로 묶으면 에러가 발생.
* 초시계 클래스 문제 해결해야지..
- 2dInDirect3d/Chapter2 . . . . 7 matches
이 객체는 IDirect3D 객체와는 달리 실질적일 일을 하는 객체이다. 이 객체를 생성하는 함수는 다음과 같다. IDirect3D 객체는 이것을 생성하기 위해 존재한다고 해도 과언이 아니다.
3. pPresentationParameters는 D3DPRESENT_PARAMERTERS의 포인터형이다. 저것은 Device의 형태를 결정하는 구조체이다.
5. 다 사용한 이후는 꼭!! '''Release()'''함수를 사용하여 사용을 해제시킨다.
2. D3DVIEWPORT8 객체는 멤버는 다음과 같다.
백버퍼를 싹 지우는 함수를 보자
백버퍼에 그림이 들어오거나 클리어 한 경우엔 그것을 앞으로 끌고나와야 한다. 그것을 하는 함수가 Present함수이다.
- CNight2011/윤종하 . . . . 7 matches
== 포인터 ==
* 다중포인터는 포인터의 포인터의 포인터의 포인터의 ... 포인터이다.
- COM/IUnknown . . . . 7 matches
COM 객체를 다루는데 있어서 가장 핵심적인 인터페이스. REFIID 를 이용해 ID 에 맞는 인터페이스 포인터를 얻을 수 잇다.
COM 객체를 다른 포인터에 할당하거나 NULL 로 초기화 할 때 호출하여 참조카운터를 올바르게 유지해야만 객체의 정상적인 소멸을 보장할 수 있다.
※ 이론적인 내용은 C++ 의 스마트 포인터 파트를 참조. 참조카운팅의 용도와 필요성에 대해서 숙지한다.
C++ 스마트 포인터에서는 참조 카운팅을 이용해서 dangling pointer 문제를 해결한다. boost 의 shared_ptr이 이를 구현한다.
IUnknown 은 구현체가 유효한 기간동안 인터페이스 포인터를 변경시키면 안된다.
인터페이스 포인터는 '''QueryInterface(IID_IUnknown, (void**) &pIUnknownInterface)''' 를 통해서 얻을 수 있으며, 이의 유효를 검사하는 것이 가능하다.
정상규현된 컴포넌트라면 인터페이스 포인터를 비교하는 것을 통해서 각 객체가 같은 컴포넌트의 인스턴스인지 확인이 가능하다.
- Cpp/2011년스터디 . . . . 7 matches
* 클래스에 관해 공부하고, 그걸 토대로 프로그램을 짜본다.
* 클래스부분을 간단하게 공부해봄.
* 움직이는 블럭을 클래스화해서 짜려고 하는 중.
* 태진이 한텐 좀 미안한데 혼자서 따로 만들어 보고 있었다. X코드와 VS2008은 서로 다른점이 너무 많아서 둘이 같이하면 이래저래 진행이 안될것 같아서; 움직이는 블록과 이미 자리잡은 블럭(+배경) 그리고 이들을 움직이게 하는 함수. 이렇게 3개를 class화 했다. 이 중 이미 자리를 잡은 블럭은 다른 두개의 객체에서 접근가능하면서, 유일하게 하나만 존재해야 했다. 그래서 찾아본결과. 싱글톤 패턴이란게 있어서... 이것 때문에 하루동안 고생했다. 어쨋든 성공 ㅋㅋ 뭔가 끝이 보이는 느낌이다. 근데 왠지 완성시키고 나면 종나 느릴것 같아..
* 보니까 동적할당한답시고 포인터형만 선언해놓고 정리를 안함
* 이때서야 깨달았다. 아 함수만 선언해놓고 순서를 안정해 놨구나.
* Set함수에 false를 반환하는것도 대충해놨었고. false를 받았을시 작업도 안 설정 해놨었다.. 으아
- HanoiProblem . . . . 7 matches
* 재귀함수에 대한 이해
'''재귀함수에 대한 이해'''
재귀함수가 사용되는 대표적인 예 몇가지를 보여줍니다. 재귀함수 사용에도 그 종류가 다른데, 대표적인 종류들을 보여주는 것이 중요합니다. "아, 재귀함수라는 것이 이렇게도 사용될 수 있구나!" 퍼뮤테이션/콤비네이션, 피보나치수열, 트리검색, 팩토리알, 조건문과 재귀호출로 반복문(while) 만들기 등이면 충분하지 않을까 합니다.
그리고 재귀함수를 만들 때 유의점과 사고보조물을 가르쳐 줍니다. 유의점이라면 재귀함수는 리턴되는 값의 종류(타입)가 모두 동일해야 한다는 것, 재귀호출을 벗어나는 지점 근방에서 유의해야 한다는 점 등이고, 사고보조물로는 스택의 상태를 그림으로 그리는 방법이나, 수식을 사용하는 방법 등이 있겠죠.
- Java Study2003/첫번째과제/곽세환 . . . . 7 matches
자바의 주된 특징은 기존의 C/C++ 언어의 문법을 기본적으로 따르고, C/C++ 언어가 갖는 전처리기, 포인터, 포인터 연산, 다중 상속, 연산자 중첩(overloading) 등 복잡하고 이해하기 난해한 특성들을 제거함으로써 기존의 프로그램 개발자들이 쉽고 간단하게 프로그램을 개발할 수 있도록 합니다.
자바는 컴파일 시에 에러 검사를 철저하게 하고, 실행 시에 발생할 수 있는 에러에 대해서도 실행 시에 철저하게 검사를 수행함으로써 신뢰도가 높은 프로그램을 작성할 수 있도록 해 줍니다. 또한, C/C++ 프로그램 개발자들을 가장 혼란스럽게 하고, 프로그램의 치명적인 오류를 발생시킬 수 있는 포인터 및 포인터 연산을 자바에서는 사용하지 않게 함으로써, 포인터를 사용함으로써 프로그래머가 범할 수 있는 오류를 없앴다는 것입니다.
자바의 다중 스레드 기능은 동시에 많은 스레드를 실행시킬 수 있는 프로그램을 만들 수 있도록 해 줍니다. 자바는 동기화 메소드들을 기본적으로 키워드로 제공함으로써, 자바 언어 수준에서 다중 스레드를 지원해 줍니다. 자바 API에는 스레드를 지원해 주기 위한 Thread 클래스가 있으며, 자바 런타임 시스템에서는 모니터와 조건 잠금 함수를 제공해 줍니다.
- OurMajorLangIsCAndCPlusPlus/Class . . . . 7 matches
=== 구조체에서 클래스로 ===
private - 클래스 멤버만 사용 가능
=== static 멤버 ===
=== const 멤버 함수 ===
=== this 포인터 ===
- PerformanceTest . . . . 7 matches
상기 두 Windows API함수를 사용해서 수행 시간을 측정 할 수 있습니다.
다음은 Binary Search 의 퍼포먼스 측정관련 예제. CTimeEstimate 클래스를 만들어 씁니다.
== ftime함수, timeb 구조체의 사용 ==
비교적 CPU와 OS에 의존적이지 않은 방법으로는 ftime 함수와 timeb 구조체를 사용하는 방법이 있습니다. 밀리세컨드 단위까지 밖에 제공되지 않습니다. sys/timeb.h 헤더에 정의된 내용이 ANSI C 는 아니라고 알고있습니다.
=== ftime 함수의 프로토타입 ===
=== ftime 함수와 timeb 구조체 사용 예 ===
멀티쓰레드로 인해 제어권이 넘어가는 것까지 고려해야 한다면 차라리 도스 같은 싱글테스킹 OS에서 알고리즘 수행시간을 계산하는게 낫지 않을까 하는 생각도 해봅니다. (하지만, 만일 TSR 프로그램 같은 것이 인터럽트 가로챈다면 역시 마찬가지 문제가 발생할듯..) 그리고 단순한 프로그램의 병목부분을 찾기 위한 수행시간 계산이라면 Visual C++ 에 있는 Profiler 를 사용하는 방법도 괜찮을 것 같습니다. 해당 함수들의 수행시간들을 보여주니까요.
- PluggableBehavior . . . . 7 matches
한 클래스의 다른 객체들은 일반적으로 서로 다른 상태와 같은 행위를 가지게 된다. 만약에 다른 로직을 원한다면, 다른 클래스를 쓴다. 우리가 만드는 객체의 90프로는 이렇다. 가끔, 다른 클래스들은 당신이 문제에 대해 어떻게 생각하는가에 대한 효과적인 의사소통을 못 할 수도 있다.(?) 클래스가 많아짐으로써 당신은 짜증이 나고 위협을 받는다. 단 하나의 메소드를 오버라이딩하려고 서브클래싱을 많이 하는것은 낭비다. 또한 이렇게 많이 서브클래싱하면서 유연성이 떨어지게 된다.
서로 다른 행동을 유발하는 것에 사용될 변수를 추가하라. 단 하나의 메소드만 오버라이딩된 수백,수천개의 클래스를 만들지 말고, Pluggable Behavior를 사용하자.
해석 점점 이상해진다.--; 이 또한 C++에서는 함수 포인터로 구현할 수 있을 듯 하다.
- Refactoring/BuildingTestCode . . . . 7 matches
나로하여금 self-testing code로의 길을 시작하게 한 계기는 OOPSLA '92의 한 이야기부터였다. 그때 누군가 (아마도 Dave Thomas)"클래스는 자기 자신의 테스트코드를 가지고 있어야 한다" 라는 말을 했다. 이 말은 테스트를 구성하기 위한 좋은 방법으로 여겨졌다. 나는 모든 클래스에 클래스 스스로를 테스트하는 메소드들 (''test''라 한다.)들을 가지도록 만들었다.
그때 나는 increment development단계에 있었고, 나는 매번 increment 을 완료할때 클래스들에 test method들을 추가했다. 그때 했던 프로젝트는 꽤 작았었고, 우리는 우리의 increment 주기는 한주 단위정도였다. 테스트의 실행은 는 꽤 수월하게 되었다. 하지만 테스트들은 실행하기 쉬웠지만, 테스트를 하는 것은 여전히 지겨운 일이였다. 이것은 내가 체크해야 하는 모든 테스트들이 console 에 결과를 출력하도록 만들어졌기 때문이다. 나는 꽤 게으른 사람이고, 나는 일을 피하기 위해 꽤 열심히 일을 준비했다. 나는 이 클래스들이 프린팅 해주는 것을 체크하는 대신, 컴퓨터가 테스트를 수행하도록 했다.내가 할일은 테스트 코드에 내가 기대하는 결과를 작성하고, 그 비교를 수행하는 것이다. 자, 나는 모든 클래스들의 test method를 수행할 수 있었고, 모든 일이 잘 되면 단지 'OK' 가 출력되는 것을 확인하면 되었다. 이 클래스는 지금 스스로 자기 자신을 테스트를 했다.
- WinampPluginProgramming/DSP . . . . 7 matches
// 실제로 DSP 관련 처리시 호출되는 함수들.
config, // config 시 호출 함수.
init, // init 시 호출 함수
modify_samples1, // DSP 처리시 호출 함수
quit // quit 시 호출 함수
// 실질적인 callback 함수.
// this_mod 는 일종의 this pointer 라고 생각해도 좋을듯 하다. 해당 모듈(위의 mod1~5) 의 포인터이다.
- i++VS++i . . . . 7 matches
printf("%d", i); // 문제가 되는건 함수(i++)또는 함수(++i)이런데에서 문제가 생길거 같은데..
== 함수 에서 사용 ==
연산자 재정의를 하여 특정 개체에 대해 전위증가와 후위증가를 사용할 때에는 전위증가가 후위증가보다 효율이 좋다. operator++(int) 함수에서는 임시 객체를 생성하는 부분이 있다.
그냥 사용한 경우나, for 문에서 사용한 경우는 ++i 와 i++ 의 성능 차이가 없다. 그러나 함수의 전달인자로 사용한 경우는 ++i 보다 i++ 의 코드가 명령어 한개 정도 길어진다. 하지만 그냥 사용한 경우나 for 문에서 사용한 경우에는 i++ 을 쓴 곳을 ++i 로 서로 바꿔 써도 상관 없으나, 함수의 전달인자로 사용한 경우에는 i++ 을 쓴 곳을 ++i 로 바꾸면 실행 결과가 달라진다. 그러므로 함수에서 i++ 을 사용하고 있을 경우 프로그램이 한 줄 이라도 추가되지 않고 ++i 로 바꿀수 있으면 바꾸는 것이 더 효율적이다. 또한 그냥 사용할 경우나, for 문에서 사용한 경우는 ++i 를 쓰지 않아도 상관 없다. --["상규"]
- 만년달력/곽세환,조재화 . . . . 7 matches
int monthDays(int x,int y); // 월의 일수를 계산하는 함수
bool isYunYear(int x)//윤년을 계산하는 함수
int monthDays(int x, int y)//월의 일수를 계산하는 함수
함수를 하나더 사용. 코드이해를 증가시키기위해서...
int monthDays(int x,int y); // 월의 일수를 계산하는 함수
bool isYunYear(int x)//윤년을 계산하는 함수
int monthDays(int x, int y)//월의 일수를 계산하는 함수
- 반복문자열/허아영 . . . . 7 matches
거기다 지역변수로 하면 각 함수에 넣어버리니 수정하기가 힘들지 않을까 하는 생각에 그냥 해버렸건만..;;)
CAUCSE 문자열도 함수 입력으로 넣어 주면 좀 더 변화하기 쉬운 소스가 되지. 그리고 message나 messages 같은 함수 이름도 좀 더 명확하게 하는 게 좋을 거 같아. 나 같으면 밑에 처럼 풀 거야. 함수로 추출해 낼 때는 의미 단위로 추출하는 게 좋아. 그래야 함수 이름을 지을 때 편하지. 역으로 함수 이름을 짖기가 힘들다면 잘못된 설계가 되는거지. --재동
C만 공부 계획했었는데, C++도 공부해야겠다는 생각이 문득 생기네요. 함수이름 신경써서 짓겠습니다 , !
- 새싹교실/2012/벽돌쌓기 . . . . 7 matches
: 함수의 기본선언 방법
: 예제 - swap함수 / add 함수의 구현
* 함수의 구현에 있어서 기본적인 int main(void) {}로 시작하여 간단한 swap함수와 add함수를 구현하여 설명하였고 return값이 정확하게 어떤 의미를 띄는지 함수선언의 자료형에 맞춰 강의하였다.
- 새싹교실/2013/라이히스아우토반/3회차 . . . . 7 matches
* 입력을 위한 함수를 써야 합니다. C언어의 콘솔을 위한 입력용 함수는 이런것들이 있습니다.
int num1 = rand()%10000; //rand()는 임의의 수를 돌려주는 함수.
오늘은 실수를 표시해주는 float 이란 함수와
rand() 함수 등 여러가지를 배웠습니다.
음... 깨달은 점은 정말 함수같은것은 되게 많구나.. 라고 깨달았고
또한 getchar() 과 scanf()등 여러 함수를 배우는 활동이었다.
- 시간맞추기/허아영 . . . . 7 matches
-_- 모르는 함수를 찾아보는데 하루나 걸렸다.
kbhit()이란 함수 인데, 키가 눌러지면 1, 안 눌러지면 0을 리턴을 한다는 것만을 알아냈다.
그런데 time()함수를 사용한 방법에는 문제가 있는데 말이지..ㅎㅎ
time()함수의 기능상의 문제점..ㅎㅎ 사실 이거말고 다른방법을 사용하는게 더 정확한데..ㅎㅎㅎ
다른 함수가 있는걸로 알고 있지만.. 뭐~~
내가 얼핏 보기에는 clock() 함수도 프로그램 시작하고 시간을 제는 것이라고 들었는데, 어떻게 쓰는걸까? - [허아영]
음.. clock_t라는 time_t랑 비슷한 변수를 만들고 변수명=clock() 라고하면 프로그램이 시작된 뒤부터 지나간 시간이 기록되는군.. 그런데 함수의 특성상 정확한 시간을 나타내지는 않는다는 단점이..;;ㅁ;; - [조현태]
- 조현태/놀이/지뢰파인더 . . . . 7 matches
데블스 캠프에서 배운 로보코드를 활용할 생각..^^ 뭔가 객체같은 느낌이 들어서 클래스로 만들어 주기로 했다.^^
그런데 클래스란거 배우지도 않고 막 써도 되는건가..ㅠ.ㅜ 나쁜습관이 들지도..^^;;
클래스명이 로보 만들어놓은 객체의 이름을 레인져로 지어주었다.^^;;;
갈수록 일에 치여 시간이 줄어든다.^^ 오늘은 클래스를 2개나 동원해서 레인져가 자료를 저장할 곳을 조금 만들었다.
한 클래스에서 다른 클래스를 붕어빵 찍듯이 찍어내고, 또 그 클래스가 여러개로 찍혀나가게 했는데..
- 진법바꾸기/김영록 . . . . 7 matches
함수를 만들어 쓰는데 익숙하지 않아 최대한 함수를 많이 이용하는쪽으로 하려다보니
get_maxjarisu 최대 자리수 얻기 함수
get_count 자리수의 값 얻기 함수
get_jegob 제곱함수
기능 : 단순이 제곱을 해주는 함수이다.
behavior 행동함수
- 파스칼삼각형/허아영 . . . . 7 matches
처음에 포인터 에러가 나서, 혼났다 ㅠ
ver.3 파스칼삼각형 코딩한다니까. 보창오빠가 흘려가는 말로 "재귀함수로 짜면 되지 않냐" 고 했던 말이 생각나서
짜봤다. 메모리 낭비없이 깔끔하긴 한데, 제대로 짠건지 모르겠다. 재귀함수는 어쩔 땐 헷갈린다.
지금 나의 머리는 터질 듯 아프단다. ^^; 포인터 때문에 데여갖고-.ㅠ 소스를 아예 바꾸는 큰 공사를 치뤘기 때문에 ㅠ
2차 이상의 배열을 포인터로 넘기는건 고생인데 말야.^^
고생했겠네..^^ 포인터..ㅎㅎㅎ 그래도 즐거운 하루. 즐거운 코딩 되라구.. 진짜 일하러 가야겠다 뱌뱌~~ - [조현태]
엇~ 아영이 누나도 처음엔 원시적으로 짜셨네요~^^;; 후후.. 재귀함수로 이렇게 짤수있는거군요 센스 =ㅅ=b - [김준석]
- 02_Python . . . . 6 matches
* Class 개념 까지는 들어가지 않을 예정 .. 아직까지는 함수 개념 잡기가 바쁠꺼라는 생각이 듬
* 자료형, 연산자 , 기본문법 , 함수 , 모듈을 중점적으로 다룰 예정임
호출 함수 실행 stdout.write("spam, ham.toast\n")
Def, Return 함수 만들기 def f(a,b,c=1, *d): return a+b+c+d[0]
== 함수 와 모듈 ==
=== 함수와 관련된 문 ===
- OpenGL스터디 . . . . 6 matches
* openGL에는 창관리, 상호 작용 인터페이스에 대한 어떤 함수도 없다. 이는 '''일반적인 임플리먼테이션(지정된 규약을 구현한 구현체)'''에 적용하기 위해서이다. Mac이나 리눅스 윈도우 각각 환경에 대해서 모두 접근이 가능케 하기위함이라고 간단히 말할 수 있다.
* openGL을 상징하는 GL을 앞에 붙히는건 이뿐만아니라 함수에도 적용된다는 사실을 하나 알아두자.
=== 함수 이름 규칙 ===
* 위와 같은 방식으로 함수 이름이 정해져있는데 예를 들어보자면 다음과 같다.
* glColor3f(GLfloat a, GLfloat b, GLfloat c); ---->이와 같은 함수를 분석해보면, gl이라는 라이브러리에 Color라는 명령을 담당하는 float인자가 3개있는 함수이다.라고 해석할 수 있다.
- StaticInitializer . . . . 6 matches
문제는 StaticInitializer 부분에 대해서 상속 클래스에서 치환을 시킬 수 없다는 점이다. 이는 꽤 심각한 문제를 발생하는데, 특히 Test 를 작성하는중 MockObject 등의 방법을 사용할 때 StaticInitializer 로 된 코드를 치환시킬 수 없기 때문이다. 저 안에 의존성을 가지는 다른 객체를 생성한다고 한다면 그 객체를 Mock 으로 치환하는 등의 일을 하곤 하는데 StaticInitialzer 는 아에 해당 클래스가 인스턴스화 될때 바로 실행이 되어버리기 때문에 치환할 수 없다.
StaticInitialzer 에서 값만 치환하는 것으로 (상속클래스에서 해당 Class Variable 의 값을 바꿔주는식으로) 해결되는 문제라면 크게 어렵진 않다. 하지만, 만일 저 부분에 DB 나 File 등(또는 File 을 사용하는 Logger 등) 외부 자원을 이용하는 클래스를 초기화하게 된다면 사태는 더욱더 심각해진다. 처음부터 해당 Class 가 DB, File 등 큰 자원에 대해 의존성을 가지게 되는 것이다. 게다가 이는 상속을 하여 해당 부분을 Mock 으로 치환하려고 해도 StaticInitializer 가 먼저 실행되어버리므로 '치환'이 불가능해져버린다.
이를 방지하려면, StaticInitializer 를 일반 Method 로 추출한뒤, 생성자에서 이를 호출한다. (단, 인스턴스를 2개 이상 만드는 클래스인경우 문제가 있겠다.)
실무에서 저러한 StaticInitializer 를 가장 많이 볼 수 있는 곳은 Logging 관련 코드이다. 보통 Logging 관련 코드들은 개발 마무리 즈음에 붙이게 되는데, 일정에 쫓기다 보니 사람들이 Logging 관련 코드에 대해서는 CopyAndPaste 의 유혹에 빠지게 된다. 순식간에 Logging 과 Property(해당 클래스에 대한 환경설정부분) 에 대한 Dependency 가 발생하게 된다. 팀 차원에서 조심할 필요가 있다. --[1002]
- [Lovely]boy^_^/Arcanoid . . . . 6 matches
* 소스에 이것저것 막 넣다 보니 지금 코드가 상당히 지저분해졌다. 중복을 최대한 없애는 방향으로 해놔서 중복은 별루 없지만, 한 메소드가 너무 길고, 클래스 별 역할 분담이 제대로 이뤄지지 않은것 같다. 모든 충돌루틴이 다 CArcaBall에 집중되어 있다.
* 컨테이너에 포인터 안 넣을라고 복사 생성자, 대입 연산자 이런것도 만들어야 했다..--;
* 전체적인 디자인 변화 : 먼저번게 분산식이었다면, 이번건 커다란 관리 클래스에서 알아서 하는 식으로 바꼈다. OOP로부터 점점 멀어지는거 같긴 하지만..--;
CArcaObject - 알카노이드에 등장하는 모든 오브젝트들의 부모 클래스(위치, 크기, 비트맵, getter/setter)
* MFC 책에 보면 비트맵 또는 GDI 쓸때 CPen pen, *pOldPen 이렇게 해서 뭔가 이상한 짓을 하는데 갠적으로는 왜 그렇게 하는지 이해를 못하겠다. 그냥 멤버에 넣어버리면 pOldPen 이런거 안해도 되던데.. 아시는분은 갈쳐 주세요.^^;
* 고로 요지는.. 아--; 왜 이렇게 전달이 안돼지. 저렇게 포인터 만들었다가 그리다가 다시 선택하다가 하는 이유를 잘 모르겠다는..^^;
- 데블스캠프2005/게임만들기/제작과정예제 . . . . 6 matches
우선 랜덤하게 블럭을 생성하기 위해서 start()함수에 srand((int)time(NULL));라고 적어서, 시간을 이용해서 랜덤하게 나오게 한 다음,
블럭을 랜덤하게 호출하는 함수를 만들자. 그리고 그 안에 rand()함수를 사용해서, 임의의 숫자를 얻은후 그 숫자에 맞추어 블럭을 지정하고
테스트를 위해서는 key_Left()와 같은 변수안에 넣고, 랜덤으로 만드는 함수를 호출한후, 호출해 보면 된다.
다 만들어 진 후, 왼쪽, 오른쪽 방향키에 알맞은 인자를 넣어서 함수를 넣고, now_time()에 블럭을 아래로 내리는 함수를 호출하도록 하자.
- 삼총사CppStudy/Inheritance . . . . 6 matches
class CMarine // 마린을 정의한 클래스
class CFirebat // 파이어뱃을 정의한 클래스
다음날 문제점이 발견되었다. 마린과 파이어뱃으로 부대를 구성하여 배열에 저장하려고 하였는데 두개의 클래스가 틀리기 때문에 한개의 배열로는 포함할 수가 없었다.
protected: // protected를 사용한 이유는 상속받은 클래스에서도 이 멤버들을 사용할 수 있게 하기 위함이다.
마린과 파이어뱃은 이 유니트라는 클래스를 상속 받으면 된다.
- 새싹교실/2011/Pixar/4월 . . . . 6 matches
* 누나 솔찍히 어제 시험끝났다고 늦게자고와서 오늘 너무 피곤한상태에서 했어서 집중도못하고 죄송해요 ㅠㅠ. 레몬에이드 제가젤좋아하는건데 누나 짱맛있었어요. 오늘 함수를 배웠는데 시험전에 혼자 공부해놨던게있었는데 그거때매 우쭐해서 솔직히 오늘 좀 건방졌던거같아요 죄송해요 ㅠ-ㅠ . 전역변수 지역변수 그게 솔직히 아직도 엄청 잘은 이해가 안되요 누나. 더많이배우고싶어요 누나 ㅋㅋㅋ . 누나 저 마에스트로 그거 어떻게쓸지 감이안와요..ㅠ.ㅠ.ㅠ.ㅠ.ㅠ
오늘은 함수를 배웟고 재귀를 쓰는법을 배웟는데 재귀는 쫌 많이 어려웠어요
오늘은 변수종류에대해서 배웠다 local,global,static등에 대해배웠고, 반복문을 사용하여달력도 만들어보았고, 함수에 대해서도 배웠다.
오늘은 함수와 재귀와 변수 종류를 배웠다.
함수는 시험치느라 미리 공부해서 왠만한 부분은 다 알았지만 정확하게 함수의 개념에 대해서 알게 되었다
- 새싹교실/2011/무전취식/레벨6 . . . . 6 matches
* Factorial 짤때 중요한건 Stack Call!! 함수 호출시. 스택에 돌아올 주소를 넣어두고 함수가 종료되면 스택에서 빼와서 돌아간다. 너무 많은 자기 자신을 호출하는 함수라면 스택에 너무 많이 쌓여 오버 플로우(Over Flow)로 에러가 나게 된다. 항상!! 종료조건을 정하고 함수를 설계하자.
* 후기 늦게써서 죄송해요...ㅠ_ㅠ 스택은 어렵습니다. 별로 신경써야하는 부분이 아니라고 생각하고있었는데 그래서 재귀함수를 못했나봐요. 배열도 완전히 까먹고있던걸 새로배우는 마음으로 배웠어요. 배열~포인터까지는 다시한번 복습이 필요할것같아요! -[이소라]
- 새싹교실/2011/쉬운것같지만쉬운반/2011.5.3 . . . . 6 matches
- 다섯번째( 치완이랑 용운이 참석: 함수 설명 )
- 여섯번째( 형준이 참석: 처음부터 함수까지 설명 )
5. assert 함수를 사용하는 이유는 무엇인가?
7. printf함수는 어떤 원리로 작동할까?
5. assert 함수를 사용하는 이유는 무엇인가?
7. printf함수는 어떤 원리로 작동할까?
- 새싹교실/2011/씨언어발전/6회차 . . . . 6 matches
저번에 함수, 배열에 이어 포인터에 대해 배웠습니다.
* 포인터를 이용한 동적할당
* 포인터에 대해 개념을 정리하였다. malloc 을 이용하여 동적할당을 하는 방법을 배웠다. 이거 배우기 전엔 그냥 배열에서 a[99999] 이랬는데 ㅋㅋㅋ
오늘 드디어 포인터에 대하여 배웠다.
포인터란 메모리의 주소를 말한다.
- 새싹교실/2012/강력반 . . . . 6 matches
4.입출력 함수
printf - 콘솔창에 출력을 위한 함수
scanf - 콘솔창에서 입력을 받기 위한 함수
* 설유환 - printf함수, scanf함수, if문, else if문, switch 제어문을 배웠다. 특히 double, int, float의 차이를 확실히 배울 수 있었다. 잘이해안갔던 #include<stdio.h>의 의미, return 0;의 의미도 알수 있었다. 다음시간엔 간단한 알고리즘을 이용한 게임을 만들것같다. 그리고 printf("숫자%lf",input);처럼 숫자를 이용해 소숫점 표현량을 제한하여 더 이쁘게 출력하는법도 배웠다.
* 황현제 - 우선 c언어에서 쓰이는 기본적인 연산자가 무엇이 있는지에 대해서 배웠다. 또한 함수 4가지에 대해서 배웠는데, printf, scanf,switch, if에 대해서 배웠고 그리고 새싹강사님께 C를 이용해 작성하신 프로그램을 구경하기도 했는데, C로 이런것도 할 수 있다는 것을 알았다. 새싹 강사님께서 우선적으로 설명을 해주신다음 새싹들이 실습하는 방식으로 수업이 진행됬는데, 옆에서 강사님이 지속적인 피드백을 해주셔서 이해하기가 편했다. 다음에는 반복문에 대해서 배우고, 실습도 해봐야겠다.
- 새싹교실/2012/새싹교실강사교육/3주차 . . . . 6 matches
- 배열, 포인터, 어드레스, 함수, Call-by-value, Call-by-reference, 구조체 -
3.1 함수(function)는 뭐고. 왜 생겼는가? 쓰면 좋은 점은? 함수의 범위(Scope)란?
3.3 메모리 주소(address)와 변수의 메모리 할당. 그리고 *포인터 (pointer)
3.5 자기자신을 부르는 재귀 함수?
- 새싹교실/2012/열반/120402 . . . . 6 matches
== 재귀 함수 ==
* 별을 n개 출력하는 함수입니다.
* 위의 printstar(int) 함수가 정의되었다고 가정
* main은 함수이므로 정의할 때 괄호가 필요합니다. main -> main()
* while, do while 반복문과 재귀함수를 이용한 점찍기를 배웠습니다. -[권우성]
* 별찍기, do while, while을 배웠습니다. 제가 짠 함수가 맞아서 기뻤습니다^o^ -[채유빈]
- 새싹교실/2012/열반/120514 . . . . 6 matches
== 재귀함수 복습 ==
* 재귀 함수를 응용하려면 많은 연습이 필요합니다.
== 포인터와 주소 ==
=== 포인터 ===
// 포인터 변수를 선언할 때에는 '*'를 변수 이름 앞에 붙입니다.
// 포인터 변수 앞에 '*'를 써서 저장된 주소에 접근할 수 있습니다.
- 새싹교실/2012/주먹밥/이소라때리기게임 . . . . 6 matches
void (*func)(PLAYER *, PLAYER *); //신나는 함수포인터
//select에 정의된대로 정의된 함수들.
////////////////게임 프로세스 함수들.
//select에 정의된대로 정의된 함수들.
////////////////게임 프로세스 함수들.
- 새싹배움터05 . . . . 6 matches
|| 2_4/11 || C ([이승한]) || 기본문법과, 포인터 || 중간고사 대비라는 느낌이 진하게 될듯 ||
|| 3_4/25 || [C언어포인터특강] ([상규]) || 포인터 || 포인터를 알려주마! ||
C, 발표잘하는법, PPT제작 기법, [Python], [PHP], [ExtremeProgramming], ToyProblems, Linux, Internetworking(TCP/IP), Ghost(demonstration), OS(abstraction), OS+Windows, Embedded System, 다양한 언어들(Scheme, Haskell, Ruby, ...), 보안(본안의 기본과 기초, 인터넷 뱅킹의 인증서에 대해..), C언어 포인터 특강(?), 정보검색(검색 엔진의 원리와 구현), 컴퓨터 구조(컴퓨터는 도대체 어떻게 일을 하는가), 자바 가상머신 소스 분석
저는 포인터에 대해서 하기로 정해졌습니다. 그 다음으로 리눅스를 인택이형이 해주시면 되겠네요^^ --[상규]
- 여사모 . . . . 6 matches
- 아마도 문자열이 초기화가 안돼서인것 같다. strlen()함수는 char *(캐릭터형 포인터)을 전달인자로 받지.
이 포인터가 가리키는 주소부터 시작해서 주소가 NULL인 주소가 나올 때까지 카운트를 해서 그 값을 리턴하는
게 strlen()함수야. 문자열을 초기화할 때에는 예를 들어 char * arr = "ABCDE"; 라고 하면 arr[5]에는 자동
했을때 23이 나오는 것은 포인터 a가 가리키고 있는 주소+23에 NULL문자가 들어 있다는 뜻이지.
- 아, 그리고 new연산자는 char[b]가 저장될 만큼의 메모리를 확보해서 그 주소를 포인터a에 넘겨주는 거지
- 이연주/공부방 . . . . 6 matches
==== 포인터 처리에 대한 연습 ====
포인터로 배열들의 요소를 지적하고 배열간의 자료교환을 하는 프로그램을 작성하시오.
변수형과 포인터와의 관계, 포인터가 가리키는 대상의 크기 등을 보여주는 기능을 첨가하여 작성하시오.
* 변수형과 포인터와의 관계
* 포인터가 가리키는 대상의 크기를 출력함
- 이영호/미니프로젝트#1 . . . . 6 matches
// 클래스의 상속성으로 인해 기존의 클래스를 고치지 않아서 인것 같다.
file.c -> 파일 입출력을 다루는 함수와 메세지들을 Log하는 부분을 담당한다. 일단 프로그램을 어느 정도 만들고 구현하도록한다.
bot.c -> 봇에 관한 함수.
attack_#.c(# == 임의의 숫자) -> 공격 함수. 요즘 보안홀들을 체크하여 보안홀들을 공격하는 함수들을 집어넣자.
- 정모/2006.5.22 . . . . 6 matches
- 주제 : 표준 입출력, 제어문, 포인터, 함수, 구조체, 클래스, 파일, 타이머, 랜덤, 소켓,
- 월 : 표준입출력, 문법, 함수, MSDN, 비트연산, 아스키 / 수생, 유선, 용안
- 화 : 구조체, 파일 입출력, 포인터(메모리), 디버깅 / 아영, 상규, 선호, 도현
- 목 : 클래스, 객체지향, API / 선호, 인수, 준수, 용재, 창섭
- 한자공/시즌1 . . . . 6 matches
== 멤버 ==
* 클래스의 기본 개념을 공부해 오고, 직접 클래스를 이용해서 코드를 작성해 보았습니다.
* Human 클래스를 짜고, 생성자를 이용해서 초기화를 시키는 방법을 이용해서 수정을 해 봄.
* 처음으로 한자공의 모든 멤버가 모인 날입니다.
* 코드 리뷰는 코드를 설명 하고, 그 후 다른 멤버의 질문과 피드백을 받는 형식으로 진행 했습니다.
- 05학번만의C++Study/숙제제출4/최경현 . . . . 5 matches
cout << "클래스가 생성 되었습니다." << endl ;
cout << m_number << "를 가진 클래스가 파괴 되었습니다." << endl ;
- 확실히.ㅎㅎ 버그가 있네. 이 버그는 클래스를 삭제한 뒤에 그 공간이 비게되는데, 거기에서 값을 체크하는 함수를 실행시키려고 시도했기 때문에 발생하는 문제야.
해결 방법은 그 공간뒤의 클래스들을 한칸씩 앞으로 당기고, i의 값을 1줄여주면 되겠지.ㅎㅎ
- 2학기파이선스터디/ 튜플, 사전 . . . . 5 matches
- 튜플과 리스트의 차이점은 튜플은 변경 불가능형이라는 것과, 리스트가 갖고 있는 것과 같은 메쏘드(자체 함수)를 갖지 않는다는 것이다.
1. 함수에 있어서 하나 이상의 값을 리턴하는 경우
3. apply 함수를 사용할 때
함수를 키나 값으로 활용할 수도 있다.
4. D.has_key(key) : 멤버십 테스트. D가 key를 가지고 있는가 검사. 있으면 참(1), 없으면 거짓(0)을 리턴.
- 2학기파이선스터디/모듈 . . . . 5 matches
* 프로그램(함수, 클래스... )과 데이터를 정의
* 사용자가 모듈에 정의된 함수나 변수의 이름을 사용하도록 허용하는것 ( = 라이브러리)
* 모듈, 함수, 클래스 등..
- AcceleratedC++/Chapter3 . . . . 5 matches
* push_back : vector의 멤버 함수. vector의 끝에다 집어넣는 역할을 한다. 그러면서 벡터의 크기를 하나 증가시킨다.
* size() 멤버 함수 : vector가 소지하고 있는 값들의 갯수를 리턴해준다.
return 1; // main함수가 0을 리턴하면 성공적으로 끝난것이고, 그 외의 숫자는 실패적으로 끝난것이다.
- CPPStudy_2005_1/Canvas . . . . 5 matches
* 슈퍼 클래스
* 아래 4가지를 서브 클래스로 가진다.
* Draw, Add, Remove 함수를 virtual 함수로 가진다.
=== 클래스 사용 예 ===
- CollectiveOwnership . . . . 5 matches
만약 누군가가 클래스의 인터페이스를 변경했으면 변경된 클래스를 사용하는 모든 클라이언트 코드에서 오류가 발생할 것이다. 그렇게되면 클래스를 변경한 사람이 모든 오류를 수정해야만 하는가, 아니면 먼저(컴파일 시간에 오류가 발생할꺼 같은데) 발견한 사람이 수정해야 하는가?
코드 커밋된 상태에서 하나라도 테스트 실패가 있다면 롤백하거나, 수정한다. 고로, 클래스를 변경한 사람이 모든 오류를 수정해야 한다. 만약 이후에 오류를 발견하게 된다면 누구든지 수정할 수 있고, 또 그래야 한다.
특히 이미 많이 코드가 작성된 시점에서 클래스의 인터페이스를 변경하는 것은 너무 많은 코드를 바꿔야하기 때문에 걱정(귀찮음?)이 앞설 수 있다.
- CppStudy_2002_1/과제1/CherryBoy . . . . 5 matches
cout << "당신은 출력 함수를 " << count << " 번 사용하셨습니다.\n";
//함수는 사용자에게 이름과 핸디켑을 요구한다
//함수는 전달인자로 전달된 값들을 사용하여
//함수는 handicap을 새값으로 초기화한다.
//함수는 golf 구조체의 이름을 표시한다
- CppStudy_2002_2 . . . . 5 matches
* C++의 클래스 부분을 미리 여러가지 과제들과 함께 같이 공부하는 공간입니다.
|| 7.18 ||["CppStudy_2002_2/객체와클래스"]||["CppStudy_2002_2/슈퍼마켓"]||
|| 7.25 ||["StringOfCPlusPlus"]||11.클래스와 동적 메모리 할당||
|| 8.9 ||STL(["STL/vector/CookBook"])과 리펙토링 몇가지||STL(["STL/vector/CookBook"], ["STL"])과 12.클래스 상속||
* 소스 올리고 난 다음 코드 리뷰 해보는지? 사람들이 꽤 중복된 코드를 쓴다던지, UI 부분과 로직 클래스 부분이 너무 같이 붙어있다던지 하는 것 같은데.. 재동 당신의 능력을 보여줘; --["1002"]
- EffectiveSTL/Iterator . . . . 5 matches
* 밑에께 안되는 이유는 iterator와 const_iterator는 다른 클래스이다. 상속관계도 아닌 클래스가 형변환 될리가 없다.
* vector<T>::iterator는 T*의 typedef, vector<T>::const_iterator는 const T*의 typedef이다. (클래스가 아니다.)
* string::iterator는 char*의 typedef, string::const_iterator는 const char*의 typedef이다. 따라서 const_cast<>가 통한다. (역시 클래스가 아니다.)
* 하지만 reverse_iterator와 const_reverse_iterator는 typedef이 아닌 클래스이다. const_cast<안된다>.
- HardcoreCppStudy/첫숙제/ValueVsReference/임민수 . . . . 5 matches
c++ 프로그래밍에선 사용자 함수를 많이 쓰게 되는데,
변수 선언시에 전체 선언이 아니라 함수안에서 지역선언으로 하게되면
다른 함수에서는 그 변수를 사용할 수가 없게됩니다.
참조전달에 의한 함수를 사용하였을경우 변수 자체의 값이 바뀌기 때문에 위와 같은 결과가 나옵니다.
* main() 함수의 리턴형이 void 이기 때문에 return 0은 쓰면 안 됩니다. -영동
- JUnit/Ecliipse . . . . 5 matches
따라서 별도의 다운로드 및 인스톨 과정없이 보다 편하게 JUnit을 사용할 수 있는 강점이 있으며, 실제로 마우스의 클릭 몇번으로 대부분의 클래스 및 메서드를 생성해 주는 강력한 기능을 지원합니다.
위의 샘플 클래스를 JUnit을 통하여 테스트 해보도록 하겠습니다.
다음으로 자신이 테스트를 하고 싶은 메서드에 체크를 하고 Finish 하면 TestCase를 상속받는 새 클래스를 자동으로 생성하여 줍니다.
아래와 같은 새 클래스가 생성되었습니다.
Ch03_01 클래스의 allocate() 메서드를 다음과 같이 수정합니다.
- LoveCalculator/허아영 . . . . 5 matches
tolower(해당문자를 소문자로 바꿔줌, 소문자면 그대로)함수 또는 toupper(대문자로)를 쓰고 알파벳에서 숫자가 아닌 문자(alpha = alpha - 'a' +1)로 처리 하였다면 대소문자 따로 처리할 필요 없었고, 가독성 또한 좋아지지 않았을까? - [이영호]
- 좋은 방법이군요 . 잘 보면 함수가 있는 것들이 많네요.
이번에 아영이 함수 잘 나눈거 같다.
그래서 gets쓰고 저런함수들 썼구나 ㅠㅠ - [zyint]
그래서 또고쳤...;;ㅁ;; 킁..ㅎ 그리구 아영이두 함수 나누는거 수준급이양..ㅎ - [조현태]
- MFC/Control . . . . 5 matches
하나의 컨트롤은 클래스와 연계될 수도, 안될 수도 있다. 정적 컨트롤의 경우 클래스가 필요없을 것 같지만 CStatic 이라는 클래스를 통해서 모양을 변경하는 것이 가능하다. 마찬가지로 버튼 컨트롤들의 경우도 대부분 Dialog 객체를 통해서 처리가 된다. CButton 클래스의 경우에는 컨트롤을 관리하는데있어서 객체가 필요할 경우에 이용하게 된다. 이러한 모든 컨트롤들은 모두 윈도우의 일종이기 때문에 CWnd 에서 상속된 클래스를 이용한다.
- ObjectProgrammingInC . . . . 5 matches
결국 포인터.
attrib을 찍는다는 문제를 주셨는데... attrib가 private라 가정하고, 따라서 method1의 함수가 구조체(클래스)의 attrib을 고친다는 뜻으로 판단하고 생각해본다면... C++의 this란 예약어가 없다면 C언어에서 C++과 같은 class의 표현은 어려울 듯. 메모리주소로 가능을 할 수도 있으나, 코드 조작을 어셈블리 차원으로 내려가 하나하나 손봐야함... (이 답이 아니라면 낭패)
함수인자로 명시적으로 포인터를 넘겨주던지 해야겠네 ㅡ.ㅡ;; 결국 뻘짓이구만 ㅋㅋㅋ - [eternalbleu]
- Polynomial . . . . 5 matches
다항식을 표현하는자료구조는 크게 두가지로 생각해 볼 수 있다. linked list 와 array 이다. 배열은 모두들 잘 알겠고 linked list 는 동적으로 storage를 할당받아 각 노드를 포인터로 연결한 자료구조를 말한다..(라고 우선 설명만 해둬야지 정확한 정의는 내리지 못하겠다..-_-). 물론 동적으로 할당받지 않고도 linked list 를 구현할수 있지만 그럴꺼면 배열로 하는게 낫지 그 노가다를 뭐하러 하나...-_-
// 위의 정의한 구조체에 포인터 변수 두개가 더 필요하다.
다음과 같은 prototype 을 갖는 함수를 구현해야 한다. (이름은 달리해도 상관없다..)
* 다항식을 표현하는 클래스를 만들어서 operator overloading 을 사용해도 되겠지만 이는 위에 말한 내용을 이미 구현한 후 이걸 클래스로 포장하는거기때문에 지금수준에서는 무리라고 생각됨... - 임인택
- RubyLanguage/ExceptionHandling . . . . 5 matches
* 예외 클래스들은 Exception 클래스를 상속받는다.
*사용법 : rescue 예외클래스명
* 예외 클래스를 상속하여 새로운 예외 클래스를 추가할 수 있다
- Spring/탐험스터디/2011 . . . . 5 matches
리소스 함수의 4가지 method : CRUD(Create, Read, Update, Delete)
1.2. Runtime Injection : 다형성을 만들기 위해서 사용한 방법. 개인적으로 코딩할 때 다형성의 사용이 좀 부족하다고 느꼈는데, Runtime시에 오브젝트간의 관계를 맺게 하지 않고 그냥 클래스에 맞춘 코딩을 했기 때문인 것 같다. 앞으로 코딩을 하는데 머릿속에 넣어두고 자주 써 보는 것이 좋을 것이라 생각된다.
1.1. DIP : 멤버 변수를 외부에서 주입 받을 때는 구체 클래스가 아닌 인터페이스를 이용한다. 최대한 클래스 내부에서 변수를 할당하지 말고(new를 사용하지 말고) 주입을 받도록 한다.
- SuperMarket/세연/재동 . . . . 5 matches
2. 중복된 곳이 많던 buy()함수와 cancel()함수를 집중적으로 수정
3. 클래스명과 함수명 그리고 변수명을 좀 더 평범하게 변형
4. getMyMoney() 함수를 public에서 private로 변경
- TheGrandDinner . . . . 5 matches
올해 ACM 국제 대회 결선에 참가한 모든 팀은 시상식 후에 있는 대만찬에 참석해야 한다. 서로 다른 팀에 속한 멤버들이 최대한 서로 어울릴 수 있게 하기 위해, 한 테이블에 같은 팀에 속한 멤버가 두 명이상 앉을 수 없도록 했다.
각 팀에 속한 멤버들의 수(경시대회 참가자, 감독, 후보 선수, 참관인 모두 포함)와 각 테이블에 앉을 수 있는 사람 수가 주어졌을 때 처음에 정한 규칙대로 모두 앉을 수 있는지를 결정해야 한다. 규칙대로 앉을 수 있다면, 좌석 배치 방법을 출력한다. 여러 방법으로 배치할 수 있는 경우에는 아무 방법이나 출력해도 된다.
한 개 이상의 테스트 케이스가 입력된다. 각 테스트 케이스의 첫째 줄에는 팀 수를 나타내는 1 이상 70 이하의 정수 M과 테이블 개수를 나타내는 1 이상 50 이하의 정수 N이 입력된다. 각 테스트 케이스의 둘 째줄에는 M개의 정수가 입력되는데, i번째 정수는 i번째 팀의 멤버 수를 나타낸다. 각 팀의 인원은 100명을 넘지 않는다. 셋째 줄에는 N개의 정수가 입력되며, j번째 정수인 n<sub>j</sub>는 2 이상 100 이하며 j번째 테이블에 앉을 수 있는 사람 수를 나타낸다.
각 테스트 케이스에 대해 좌석을 배치할 수 있으면 1을, 그렇지 않으면 0을 출력한다. 배치가 가능한 경우에는, 그 밑으로 M줄에 걸쳐 좌석 배치를 출력하는데, i번째 줄에는 i번째 팀 멤버들이 앉을 테이블 번호(1에서 N까지)를 출력한다.
- VendingMachine/세연/재동 . . . . 5 matches
2. 중복된 곳이 많던 buy()함수와 insertDrink()함수를 집중적으로 수정
3. 클래스명과 함수명 그리고 변수명을 좀 더 평범하게 변형
4. showDrinkMenu() 함수를 private로 만듬
- WinampPlugin을이용한프로그래밍 . . . . 5 matches
// 모듈 관련 포인터 얻어오는 부분
// 함수포인터들을 적절하게 매핑해준다.
// 여기서는 화면 출력 부분이 없으므로 비어있는 callback 함수를 만들어서 연결해준다.
// 추후에 Visualization 부분을 만들때는 실제 함수부분을 이용하게 될 것이다.
- django/RetrievingObject . . . . 5 matches
데이터베이스에서 레코드를 조회할 때는 Model클래스를 관리하는 Manager클래스를 이용한다. 가장 간단하게는 모든 레코드를 가져오는 방법이 있는데, 모델마다 기본적으로 제공되는 object라는 매니저를 이용한다. object 매니저로 레코드를 조회하면 QuerySet이 반환된다. 이는 관계형 데이터베이스 CLI인 JDBC의 ResultSet과 유사하다.
사용자는 values함수를 이용해서 원하는 속성을 지정할 수 있다. 이는 검색 조건을 만족하는 레코드의 필요한 속성만을 이용하므로 효율적이다. 또한 values함수는 QuerySet을 상속한 ValuesQuerySet을 리턴하므로 다시 위에서 사용한 검색 조건을 사용할 수 있다. 하지만 ValuesQuerySet은 사전형(dictionary) 자료구조를 가지고 있기 때문에, 많은 수의 레코드를 얻어오기에는 부적절하다. 다음은 사원 정보에서 이메일 속성만을 얻어온다.
Django에서 기본적으로 제공하는 조인 연산은 없다. SQL문을 직접 수행하여 원하는 결과를 얻을 수 있다. 이는 JDBC의 인터페이스와 비슷하며, 커서를 이용하여 질의를 수행한 결과를 하나씩 얻어오는 방식을 사용한다. 다음은 특정 부서 에서 시행한 위험 관리 대책을 얻어오는 함수이다.
- 고한종 . . . . 5 matches
* 원본 프로그램은 ActiveX로 만들어져있었다. 게다가 스레드 돌리기 싫어서 DoEvent 기법을 썼다(...) 이걸 나는 iOS로 포팅 하는데 성공했다. ActiveX도 결국 MFC이기 때문에 별로 안 어려워 보일 수 있으나... 모든 사용자 정의 함수는 void형에, 모든 멤버변수는 public이어서 어디서 초기화하는지 일일히 찾아서 작업해야 했다. 미치는줄 알았음. 심지어 한 함수안에서 딱한번 쓰는 변수도 클래스 멤버변수로 선언되어 있기도 했음.. 그냥 지역변수를 쓰지!? - [고한종], 13년 3월 16일
- 데블스캠프2005/RUR-PLE . . . . 5 matches
* Python 문법 기반이지만, 몰라도 상관없다. 주어진 함수들을 가지고 해결해 나가기 때문이다. 변수도 안쓴다. -_-
* 아래와 같이 def 를써서 함수를 정의할 수 있다.
* repeat 명령어를 써서 여러번 수행해야 하는 함수(명령어 포함)을 한번에 방복 횟수만 지정해서 사용할 수 있다.
* 벽 만들기 연습에서 한 코드들을 함수화 해서 중복 제거를 한다.
* 위의 if문과 함수 정의, repeat를 사용하여 아래 화면과 같은 상황을 처리한다.
- 데블스캠프2012/둘째날/후기 . . . . 5 matches
* [김태진] - JavaScript를 많이 쓰던 때는 1학년 방학때랑 동문네트워크 만들 때 뿐이었는데, 그때는 좀 객체에 관해서 따지진 않고 했습니다. 그에비해 이번엔 엄청난 추상화를 할 수 있다는걸 다시 한번 생각해보고, 음.. 재밌는 언어네요. 방학중에 여행갔다오거든 Canvas로 뭔가 해보고싶기도 하고, 그렇네요. 작년에 피보나치를 함수형으로 짜라고 할땐 멘붕했는데, 이번엔 한글 문제를 그냥 for문으로 쓴지라 쉬웠달까요..
* [서영주] - 자바스크립트는 그냥 단순하게 예제만 보면 그렇게 안어려워 보이는데 제대로 코드를 짠걸 보거나 오픈API관련을 보고 쓰려고 하면 그런건 예제처럼 코드가 예쁘지가 않더라고요. -_- 틀림없이 현실은 오늘 본 것의 이상이겠죠. 게다가 클래스에 나중에 변수를 추가한다거나 .prototype은 뭔지 등등... 그래도 웹 이외에도 많이 쓰이기도 하니까 피해갈 수 없는 언어 중의 하나겠죠. 언젠가 제대로 공부해보고 싶긴 하네요.
* [서영주] - 코드를 이상하게 만드는 방법은 정말 다양하다는걸 알았습니다. #define이나 흔히 사람들이 생각할 함수의 인자명을 이상하게 하는 것 등등. 근데 단순히 함수, 변수의 이름, 인자의 이름 등에 관한 네이밍만으로도 상당히 헷갈릴 수 있는걸 보고 단순하지만 네이밍의 중요함을 다시 한 번 느꼈습니다. 이상한 기능이야 안쓰면 그만이겠지만 네이밍같은 부분은 안할수가 없을테니까요.
* [서민관] - 전에도 ZP 홈페이지에 올라왔어서 읽어봤었는데, 저런 코드를 짜면 본인도 유지보수가 불가능하지 않은가 싶네요. 그리고 새삼 느낀 거지만 역시 변수명이나 함수명이 프로그래밍에서 참 중요하지 싶습니다.
- 문자반대출력 . . . . 5 matches
* 함수를 만든다.
* 맞게 푼건지는 모르겠지만 파이썬은 자체적으로 거꾸로 해주는 함수가 있어서 솔직히 이런 문제는 풀기가 굉장히 쉽다. 위에서 저거 걸린 시간은 파일 입출력과 그 해당 함수 찾는 시간.. - 상협
* C 에도 라이브러리로 문자열 반전 시켜주는 함수를 제공합니다. strrev()라는 함수를 사용하면 '\0'바로 전 글자부터 거꾸로 만들어주죠. 물론 ANSI 표준은 아니고 Semantec, Borland, Microsoft 에서 제공하는 컴파일러의 경우에 자체 라이브러리로 제공합니다. 이식성을 생각하지 않는 일반적인 코딩에서는 위에 나열한 컴파일러를 이용한다면 사용할 수 있습니다. - 도현
- 삼총사CppStudy/숙제2 . . . . 5 matches
3차원 CVector 클래스를 만들어봅시다.
1. 멤버 변수는 3개 입니다. x좌표, y좌표, z좌표
2. 멤버 함수는 다음과 같습니다.
추가로 생성자라던지 초기화 할 수 있는 함수를 추가로 넣어줘야 합니다.
- 새싹C스터디2005/pointer . . . . 5 matches
보다 명확한 포인터 설명을 위한 예제와 자료들
포인터를 쓰지 않을 경우와 비교하면 이해가 쉽다.
별표가 나타내는 값은 포인터가 가리키는 값(주소)의 값이다.
음... swap 함수에서 값이 정수(배열, 포인터 주소를 제외한 모든 값.)일 경우 xor 치환으로 간단하게 변경 가능합니다.
- 새싹교실/2011/쉬운것같지만쉬운반/2011.3.23 . . . . 5 matches
3. 나는 프로그램이 실행되고 CPU가 맨 먼저 호출하는 함수가 뭔지 안다! (O/X)
* 후후 하스켈은 순수 함수형 C는 절차형으로 종류가 다른 언어에요~ - [서지혜]
assert함수에 의해 c가 30인지 비교한다.
c는 30이므로 비교 결과가 참이 되기 때문에 assert함수의 호출이 종료된다.
상기 코드가 정상적으로 진행되었기 때문에 main함수는 0을 리턴하고 프로그램이 종료된다.
- 새싹교실/2012/AClass/5회차 . . . . 5 matches
2.Swap함수 작성
2.Swap함수 작성
2.Swap함수 작성
2.Swap함수 작성
#include <string.h> // strlen() 함수 사용하기 위해
- 새싹교실/2012/새싹교실강사교육/2주차 . . . . 5 matches
-과제 확인, 프로젝트 생성, GCC사용법, 컴파일, main함수, 변수, Data Type, 연산자, 입출력 기본 함수, 제어문 -
select = getch(); //getch()는 char형 한글자를 받아주는 함수.
2.2 #include<stdio.h>, printf(), scanf(); 입출력 함수.
srand(time(NULL)), rand(). 함수와 라이브러리.
- 서울대컴공대학원구술시험/05전기 . . . . 5 matches
하나는 바이너리 트리 관련 함수 하나 보여주고 머하자는 알고리즘인지 설명해라
a)뭐하는 함수인가 b)몇번 함수 콜 되는가
int max(int, int)는 두 인자중 큰 수를 반환하는 함수입니다. a) 트리의 높이를 구하는 함수 b) 2n + 1
- 이영호/64bit컴퓨터와그에따른공부방향 . . . . 5 matches
└저도 C (배우게 된다면 Assembly도.ㅎ)를 좋아 합니다.ㅎ 무엇보다 빠른 연산속도와 하드웨어 제어(해본적은 없지만), 포인터를 통한 메모리 접근등 좋은 점이 많아요.^^* 그렇지만 예를 들어 1만 팩토리얼을 출력하는 프로그램을 작성하시오. 라고 문제가 주어졌을때, C로 짜면 한나절이지만 파이썬으로 작성하게 되면 5분도 안걸리게 됩니다. 물런 연산속도가 느리기는 하지만 말입니다.^^ 이런 점에서 봤을때, 속도가 중요하다거나 특화된 프로그램을 작성해야할 경우에는 C와 같은 언어가 좋지만 보편적으로 사용하는 워드프로세서라든지 기타 응용프로그램이나, 제작해야할 프로그램의 제작시간이 짧을 경우에는 상위레벨의 언어가 좋을거라고 봅니다.^^ 뭐 이렇게 말은해도.. 사실 서로의 장점을 그때그때 맞춰서 섞어쓰는게 가장 좋지 않을까요?ㅎ (게임을 만들때 하위레벨의 언어로 하드웨어를 직접 사용한다 하더라도, 다이렉트를 이용하지 각각의 그래픽 카드에 맞춰서 프로그램을 만들지 않는것과 비슷한것 같아요.^^) 이상 지나가는 행인1의 잡다한 생각이었습니다.^^* - [조현태]
(우선 제 지문의 맥락을 담은 질문부터. 과연 Java와 Python 개발자들이 Assembly+C개발자와 같이 좋은 효율의 다른언어 컴파일러를 만들 수 있을까요. 현재 함수보다 좋은 함수를 생각해 냈는데 그것을 구현하려면 low level의 지식이 필요한데, 자신은 Java와 Python 들만 알고 Assembly를 모른다면 어떻게 해야할까요?)
선배님께서 82년부터 기계어로 해오신 것들이 다른 언어를 접하고 그 기초를 익힐때 도움이 안되었을까요? C언어의 포인터만 생각해도 C언어를 처음 접하는 사람과 어셈블리를 접하고 C언어를 접하는 사람에게는 큰 차이가 있을 것 같네요.(저 역시 포인터의 어설픈 이해를 어셈블리를 조금 공부해보고 제대로 잡았으니까요) C언어만 접한 사람들이 왜 상수를 고치지 못하는지 제대로 이해할까요? (C언어 책의 대부분은 상수는 고치지 못한다라고만 말하지 메모리의 실행 코드 부분이어서 고치지 못한다고는 말을 하지 않죠 :) )
- 이영호/My라이브러리 . . . . 5 matches
// set*, get* 함수를 더 만들자.
// send 함수 시 인자 4개가 필요하기 때문에 2개로 줄인 함수다. 단, ascii문자만 전달 된다. recv 함수는 만들 필요가 없다.
// udp를 함수에 넣어도 되지만 그렇게 되면 다른 종류의 socket 들도 넣어 차후 확장성이 떨어질것 같아 분리함.
- 코드레이스/2007/RUR_PLE . . . . 5 matches
* Python 문법 기반이지만, 몰라도 상관없다. 주어진 함수들을 가지고 해결해 나가기 때문이다. 변수도 안쓴다. -_-
* 아래와 같이 def 를써서 함수를 정의할 수 있다.
* repeat 명령어를 써서 여러번 수행해야 하는 함수(명령어 포함)을 한번에 방복 횟수만 지정해서 사용할 수 있다.
* 벽 만들기 연습에서 한 코드들을 함수화 해서 중복 제거를 한다.
* 위의 if문과 함수 정의, repeat를 사용하여 아래 화면과 같은 상황을 처리한다.
- 타도코코아CppStudy/0724 . . . . 5 matches
* 객체지향, 클래스, 상속 발표
* 가상함수 : [수진]
* 객체지향, 클래스, 상속 발표
|| 파스칼의 삼각형 || [수진] || Upload:pascal_sujin.cpp || 헉.. 줄까지 맞추다니 멋져요.^^ 함수 분리도 꽤 잘한거 같고.. 무엇보다 다른 개념(조합)을 사용했네요. 여태까지 한 사람들은 거의 다 위에꺼 더해서 했거든요. 하지만 로직과 보여주는게 분리가 안되어 있네요. 이따 저와 함께 고쳐 봅시다. ||
* 가상함수 : [수진]
- 2학기파이선스터디/클라이언트 . . . . 4 matches
* ChatMain? : 채팅의 주 인터페이스를 관리하는 클래스이다. 이 클래스에서 대부분의 GUI를 관리하고, 채팅메세지보여준다. 또한 채팅에 접속한 사람들의 ID를 보여준다.
* ReceiveMessage? : 서버로부터 전달되는 메시지를 받아서 ChatMain? 클래스의 메시지 출력 화면에 보여주는 역할을 한다.
* UserList? : ChatMain? 클래스의 사용자 List에 접속한 사용자 ID를 보여주는 기능을 한다.
- 5인용C++스터디/멀티쓰레드 . . . . 4 matches
프로그램 작성하다 보면 프로그램 수행도중 현재 프로그램은 다른 작업을 수행하면서 또하나의 작업을 수행하고자 할 때가 있을 것입니다. 이때 사용하는 것이 바로 스레드 입니다. 작업을 함수로 프로그래밍을 하고 난후에 이것을 스레드로 형태로 실행하면 됩니다
MFC에서는 다음의 6가지 클래스를 멀티쓰레딩을 위해서 제공합니다.
동기 클래스인 CSyncObject, CSemaphore, CMutex, CCriticalSection, CEvent와 동기화된 접근을 허용하는 CMultiLock과 CSingleLock이 그것이니다.
이중 CSyncObject는 CSemaphore, CMutex, CCriticalSection, CEvent의 상위 클래스로서 직접 사용하지는 않습니다.
- ACM_ICPC/2011년스터디 . . . . 4 matches
* 하면 할수록 입출력에 대한 감각이 어느 정도 살아나는 것 같습니다. 처음 접했을 때보단 생소하게 느껴지진 않네요. 처음에는 무슨 삽질을 했길래 그랬을까... 숏코딩을 처음으로 한번 해봤는데 역시 컴파일러에 대한 깊은 이해와 고도의 수학적 사고력이 요구되는듯 싶습니다. 졸리점퍼 71B는 도데체 어떤 코드일지... 처음에는 관심없었는데 해보니까 승부욕이 생깁니다.. 그것보다 해시함수나 B트리 등 심층적으로 다뤄보지 못한 알고리즘에 대한 의욕도 있지만.. 음!! 하고 싶은게 너무나 많네요. -[정진경]
* 재귀함수와 백트래킹, Dynamic Programming에 난항을 겪어 최적해구하는 문제에서 고전했습니다.
* [김태진] - 파닭문제를 드디어 풀었습니다. 풀기까지 재귀함수 문제들도 풀어보고, Hanoi문제도 풀어보고, Mario문제도 이렇게 풀었다 저렇게 풀었다를 몇시간째, 진경이가 for문으로 Mario를 풀어보라기에 꾸역꾸역풀고나니, !!! 파닭푸는 방법을 알았다! 며 10분만에 해결했습니다.-- 파닭문제 프로젝트를 만든지 1달째인데 푼건 10분도 안걸린.... 네, 아무튼 약속대로 소현이누나가 파닭을 쏘네요+_+!
* [김태진] - 보물찾기를 풀고 있습니다. 우선 테스트케이스 5번까지는 통과를 했지만 6번은 Time Limit Exceeded.. 포인터를 통해서 해보라는 진경이의 힌트를 받고 Search대신 다른 방식으로 할 걸 생각해보고 있습니다.
- AseParserByJhs . . . . 4 matches
static vec3_t PickedPoint[2]; // 위의 함수에서 계산한 결과가 저장된다.
pNodeList [i2]->SetChildPointer (pDest); // 새 메모리를 자식 포인터로 지정
rewind (s); //파일포인터를 맨 앞으로..
pTex = new char*[n]; //pTex 는 이중 포인터
- BasicJava2005/3주차 . . . . 4 matches
* 1.4이전 : BufferedReader클래스를 사용할 수 있다.
* 5.0 이후 : Scanner 클래스를 이용하여 입력받을 수 있다.
* 동적 배열 클래스
* add/remove/get 함수등을 사용하여 배열에 마음대로 추가/삭제가 가능하다.
- Boost/SmartPointer . . . . 4 matches
스마트 포인터 쓰기
* 표준 라이브러리에도 auto_ptr 이라고 같은 개념의 클래스가 있지만, 버그가 있다. -_-;; auto_ptr를 컨테이너에 집어넣으면 버그땜시 스스로 삭제가 안되 메모리가 새는 아주 심각한 문제이다.
* 모든 객체에 스마트포인터를 쓰도록 프로그램 짜면 자바같은 느낌으로 짤수도 ...
shared_ptr_example2.hpp (헉 이너클래스가 되네.. 처음봤다 --;;)
- BoostLibrary/SmartPointer . . . . 4 matches
스마트 포인터 쓰기
* 표준 라이브러리에도 auto_ptr 이라고 같은 개념의 클래스가 있지만, 버그가 있다. -_-;; auto_ptr를 컨테이너에 집어넣으면 버그땜시 스스로 삭제가 안되 메모리가 새는 아주 심각한 문제이다.
* 모든 객체에 스마트포인터를 쓰도록 프로그램 짜면 자바같은 느낌으로 짤수도 ...
shared_ptr_example2.hpp (헉 이너클래스가 되네.. 처음봤다 --;;)
- C++스터디_2005여름/학점계산프로그램/허아영 . . . . 4 matches
오옷.. 근래 본 메인함수중에 가장 심플한 함수였어~ 왠지 Hellow world!! 도 이보단 못할듯.ㅎ
칼큘레이트(귀차니즘으로 영어 생략)함수와 스튜던트 함수 양쪽에서 둘다 파일 입출력 하는게 있는것 같은데..
- CNight2011 . . . . 4 matches
* C언어의 포인터, 구조체에 대해서 다시 잘 정리했던 기회였습니다. 밤을 새면서 정신은 제 곁을 떠났지만 C언어 문법에 대해서 잘 알게되었습니다. 11학번이 얻어가는 것이 있는지 궁금하네요. - [윤종하]
* 이번 스터디를 통해서 포인터랑 배열의 관계를 완전히 암기하게 되었습니다. 그리고 동적할당을 쓸 수 있게 되었습니다! 이게 가장 큰 소득이라고 생각합니다. 메모리 그려가면서 남에게 설명해주라고 하면 할 수 있을 것 같은 느낌이 듭니다. 아, 구조체는 아직 어떻게 쓰는지 잘 모르겠어욤.... 링크드 리스트도 쓰는 건 잘 모르겠습니다. 뭐 하는 건진 잘 알겠습니다. 이런 활동 언제든지 환영입니다. 밤샘은 정신을 맑게 해주니까요 (?) - [고한종]
* 12시 30분쯤, 도중에 참여했습니다. 피곤피곤.. 뭔가 C언어와 관련된 활동을 했었어야했는데. 백트래킹, DP를 설명만 하고 구현을 안했네요-_-; 다음에 기회가 된다면 재귀함수를 실제로 응용하는 방법에 대해 알아볼 시간이 있으면 좋겠네용 - [정진경]
* 많다면 많은 정보들이 한꺼번에 머릿속에 들어왔었는데요, 이것 저것 배우면서 저게 유용하긴 한데.. 분명 포인터랑 연관되어있다긴 하는데 뭐가 어떻게 연관된거야?! 라고 하다가 Linked List를 배우면서 왜 구조체가 필요한지(very powerful!) 왜 많은 수의 자료들을 무조건 배열로만 쓸 수는 없는지등 많은 것을 알게되었어요. 나중에는 카트가 3D면서 렉없는 상당히 잘만든 게임이라는 말도 들었는데, 자료가 유동성 있으면서 접근하기 쉬운 그런걸 만든다는게 쉬운 것만은 아니겠구나 라고 생각했지요. 자구를 공부하면 이런 부분을 공부하는거겠죠. 재밌겠네요+_+(까봐야 알지만) -[김태진]
- Code/RPGMaker . . . . 4 matches
= Table 클래스의 구현 =
= Color 클래스의 구현 =
알만툴에서 사용하는 Color 클래스이다.
내부적으로 자바의 java.awt.Color 클래스를 가지고 있으며 이를 이용하여 모든 값을 주고받는다.
- ConstructorMethod . . . . 4 matches
하지만 이 방법은 쓸만한 인스턴스를 만들기 위해 클래스의 레퍼런스를 찾아봐야 하는 등의 골치 아픈 문제가 있다. 특히 클래스가 복잡할때는 문제가 좀 커진다.
개인적으로는 JUnit Test 작성할때, Test 대상이 되는 클래스에 대한 리팩토링 시도하는중 중간단계 역할로 많이 써먹었음.
음.. 오버로딩이 없나요? 보면 new랑 new:이렇게 두개 있는 클래스도 있던데... 저건 아예 다른 메세지인가요? --[인수]
- EightQueenProblemSecondTryDiscussion . . . . 4 matches
제가 보기에 현재의 디자인은 class 키워드만 빼면 절차적 프로그래밍(procedural programming)이 되는 것 같습니다. 오브젝트 속성은 전역 변수가 되고 말이죠. 이런 구성을 일러 God Class Problem이라고도 합니다. AOP(Action-Oriented Programming -- 소위 Procedural Programming이라고 하는 것) 쪽에서 온 프로그래머들이 자주 만드는 실수이기도 합니다. 객체지향 분해라기보다는 한 거대 클래스 내에서의 기능적 분해(functional decomposition)가 되는 것이죠. Wirfs-Brock은 지능(Intelligence)의 고른 분포를 OOD의 중요요소로 뽑습니다. NQueen 오브젝트는 그 이름을 "Manager"나 "Main''''''Controller"로 바꿔도 될 정도로 모든 책임(responsibility)을 도맡아 하고 있습니다 -- Meyer는 하나의 클래스는 한가지 책임만을 제대로 해야한다(A class has a single responsibility: it does it all, does it well, and does it only )고 말하는데, 이것은 클래스 이름이 잘 지어졌는지, 얼마나 구체성을 주는지 등에서 알 수 있습니다. (Coad는 "In OO, a class's statement of responsibility (a 25-word or less statement) is the key to the class. It shouldn't have many 'and's and almost no 'or's."라고 합니다. 만약 이게 자연스럽게 되지않는다면 클래스를 하나 이상 만들어야 한다는 얘기가 되겠죠.) 한가지 가능한 지능 분산으로, 여러개의 Queen 오브젝트와 Board 오브젝트 하나를 만드는 경우를 생각해 볼 수 있겠습니다. Queen 오브젝트 갑이 Queen 오브젝트 을에게 물어봅니다. "내가 너를 귀찮게 하고 있니?" --김창준
- HaskellLanguage . . . . 4 matches
* 오늘 굉장한 사실 하나를 알아버렸다. Haskell에서 값인줄로 알았던 3도.. 함수였던 것이다... 덜덜덜;; - 임인택
* (Num t)는 t의 자료형이 Num이라고 알려주는 것이에요. 함수는 화살표가 -> 로 나오네요.^^
함수를 정의할 때 한 곳에 모아두어야 한다. 따라서 다음은 오류이다.
연산자 처럼 보이는 녀석들도 함수이다.
- JavaStudy2002/영동-2주차 . . . . 4 matches
* 상욱이의 지적에 따라 하나의 클래스에서 모든 걸 처리하지 않고 클래스를 여러개로 분리했습니다.
Class main--메인함수 클래스
- KIV봉사활동/자료 . . . . 4 matches
== 멤버십 자료 ==
[[include(KIV봉사활동/자료/멤버십)]]
=== 멤버십 자료 중 요청 ===
* ''홍길동의 후예'' - 자막 싱크때문에 멤버쉽꺼도 받아봤으면 함.
- LoveCalculator/조현태 . . . . 4 matches
tolower(해당문자를 소문자로 바꿔줌, 소문자면 그대로)함수 또는 toupper(대문자로)를 쓰고 알파벳에서 숫자가 아닌 문자(alpha = alpha - 'a' +1)로 처리 하였다면 대소문자 따로 처리할 필요 없었고, 가독성 또한 좋아지지 않았을까? - [이영호]
그런데 현태야;;; C++ 클래스 설계 할 때 고생 하겠다... 설계상의 약간의 문제점이 있네. 메인 함수는 최대한 간단히 하고 입력만 받고 문자열을 함수로 넘겨 처리하였으면 더 간단해지지 않았을까?;;; - [이영호]
- MFC/DeviceContext . . . . 4 matches
윈도우 운영체제에 의해서 정의된 데이터 구조. 윈도우 운영체제가 장치에 비종속적인 GDI 함수로, 출력 요청을 처리하는 출력장치에 대한 작업으로 해석가능하다. DC에 대한 포인터는 윈도우의 API함수를 호출함으로써 얻을 수 있다.
SetViewportOrg() API 함수나, CDC::SetViewportOrg()를 이용해서 원점의 위치를 변경할 수 있다.''
- MFCStudy_2002_2 . . . . 4 matches
* 기본적인 MFC사용법(?), 간단한 클래스와 함수에 대한 공부
* 클래스 위저드 사용법에 대한 공부.
책이 없어서 그런지 좀 정리가 안된 느낌이다. 책을 빨리 사야겠다..함수를 몇개 배운거 같긴 한데 기억이 잘 나질 않으니..기억나는 사람이 이 페이지에 내용을 올려놨음 좋겠다.그리고 앞으로 스터디 할 때 책을 중심으로 차근차근 진도를 나가면 좀 정리가 될것 같기두 한데..-은지 [[BR]]
- MySQL . . . . 4 matches
=== MySQL Password 함수 ===
MySQL 에서 다른 데이터베이스로 데이터를 옮길 경우 기존 데이터중 문제가 되는 것이 바로 내장함수인 PASSWORD 를 이용해서 암호화를 한 부분이다. 다른 데이터베이스에서 이 데이터를 쓸 방법이 없기 때문이다. 이 경우, 로직 단에서 MySQL의 Password 함수를 대신 구현해줌으로서 해결을 할 순 있다.
단, 3.23 버전대에서만 동작함. MySQL 이 4.1 이 되면서 PASSWORD 함수의 구현이 바뀌었다.
- NUnit . . . . 4 matches
* 어떠한 클래스라도 즉시 Test를 붙일수 있다. (반면 JUnit 은 TestCase 를 상속받아야 하기 때문에, 기존 product소스가 이미 상속 상태라면 Test Fixture가 될수 없다. )
* 스크린 샷에서 처럼, 함수 이름이 Test 세팅에 종속적이지 않다. (반면 JUnit 은 reflection으로 Test 메소드들을 찾아내므로, Test의 이름들이 testXXX 와 같은 형태여야 한다.)
* Java 1.5 에 메타 테그가 추가되면 NUnit 방식의 TestCase 버전이 나올것 같다. 일단 이름의 자유로움과, 어떠한 클래스라도 Test가 될수 있다는 점이 좋왔다. 하지만, TestFixture 를 붙여주지 않고도, 목표한 클래스의 Test 들을 실행할 수 있는 방식이면 어떨까 생각해 본다. --NeoCoin
- NamedPipe . . . . 4 matches
VOID InstanceThread(LPVOID); // 쓰레드 함수
// 쓰래드 함수를 생성한다.
|| {{{~cpp CallNamedPipe}}} || 메세지 형식의 Named Pipe를 Connect할 때 쓰이는 함수 ||
|| {{{~cpp ConnectNamedPipe}}} || Named Pipe 에 Connect할 때 쓰이는 함수||
- ObjectOrientedDatabaseManagementSystem . . . . 4 matches
OODBMS[오오디비엠에스]는 객체로서의 모델링과 데이터 생성을 지원하는 DBMS이다. 여기에는 객체들의 클래스를 위한 지원의 일부 종류와, 클래스 특질의 상속, 그리고 서브클래스와 그 객체들에 의한 메쏘드 등을 포함한다. OODBMS의 구성요소가 무엇인지에 관해 광범위하게 합의를 이룬 표준안은 아직 없으며, OODBMS 제품들은 아직 초기에 머물러 있다고 여겨진다. 그 사이에 관계형 데이터베이스에 객체지향형 데이터베이스 개념이 부가된 ORDBMS 제품이 더욱 일반적으로 시장에 출시되었다. 객체지향형 데이터베이스 인터페이스 표준은 산업계의 그룹인 ODMG (Object Data Management Group)에 의해 개발되고 있다. OMG는 네트웍 내에서 시스템들간 객체지향형 데이터 중개 인터페이스를 표준화하였다.
객체지향형 데이터베이스 시스템은 두 개의 조건을 만족시켜야만 한다 : 그것은 DBMS이어야 하며, 또한 객체지향형 시스템이어야 한다. 즉, 가능한 범위까지 OODBMS는 객체지향형 프로그래밍 언어의 현재 작업과 함께 일관되어야만 한다. 첫 번째 기준은 영속성, 2차 저장관리, 동시성, 회복, 그리고 특별한 편의 등 다섯 개의 특질로 해석된다. 두 번째 것은 복잡한 객체들, 객체 동일성, 캡슐화, 형 또는 클래스, 상속, 지연 바인딩과 결합된 오버라이딩, 확장성과 계산 결과의 완성도 등 여덟 개의 특질로 해석된다.
- OurMajorLangIsCAndCPlusPlus/ctype.h . . . . 4 matches
== 함수 (FUNCTIONS) ==
|| 함수명(Ascii) || 내용 ||
|| 함수명 (Uncode) || 내용 ||
|| 함수명 || 내용 ||
- Plugin/Chrome/네이버사전 . . . . 4 matches
* window.open함수를 이용하여 body를 '''더블''' 클릭하면 새로운 팝업창을 띄운다.
* 위의 na-open_window는 임의로 만든 함수긴한데 status_bar나 기타 스크롤이 가능하지 않은 popup을 만들고 있다. 0은 false니까.
* javascript의 다른 예제를 확인하니 document.body.ondblclick = 함수명 을 작성하면 똑같이 작동되는것을 확인했다.
* inline script를 cross script attack을 방지하기 위해 html과 contents를 분리 시킨다고 써있다. 이 규정에 따르면 inline으로 작성되어서 돌아가는 javascript는 모두 .js파일로 빼서 만들어야한다. {{{ <div OnClick="func()"> }}}와 같은 html 태그안의 inline 이벤트 attach도 안되기 때문에 document의 쿼리를 날리던가 element를 찾아서 document.addEventListener 함수를 통해 event를 받아 function이 연결되게 해야한다. 아 이거 힘드네. 라는 생각이 들었다.
- PowerOfCryptography/허아영 . . . . 4 matches
난 이 문제 보는 순간 sqrt함수 바로 쓰려고 했는데 -_-; 어쨌든 아영아 C++의 오버로딩으로 두개를 합쳐보는건 어떨까? - [이영호]
sqrt함수.처음들어보는 ㅜㅡ 하핫,, C++언어 아직 몰라요 ^^;;;; 가르쳐 주세요! --아영
제곱근 구하는 함수였군요 ! 연산자가 없어서 당황했었는데,,있었구나.ㅡ
대단해 공부열심히 하는구나 난그런함수 모르는대_
- ProgrammingLanguageClass/2006/Report3 . . . . 4 matches
thunks 는 두가지 의미로 해석됩니다. 첫번째, 함수형 언어에서 말하는 지연형 계산 두번째, 호환성의 이유로 서로다른 데이터형 간의 매핑을 행하는 행위
이번 숙제에서 구현하려는 것은 첫번째의 의미로 지연형 계산(delayed computation)을 의미합니다. call-by-name, call-by-need를 통해 함수에게 넘어오는 일련의 매개변수를 thunk라는 이름으로 부릅니다. 간단히 말해 thunk라는 것은 실행시에 계산되어 변수의 값이 얻어진다는 의미입니다. (이는 기존의 함수에서 파라메터 패싱에서 Call 시에 변수에 바인딩되는 것과는 다릅니다.) 이런 기능이 최초로 구현된 Algol60입니다.
음 잠깐 하면서 생각한건데.... 이 숙제 정말로 구리다. -_- 내가 이렇게 재미없는 숙제를 하게된건 파일구조때 binary 가지고 장난친 이후 처음인듯하다. 문자열 장난할꺼면 펄로하게 해주던지... C 문자열 함수 가지고 놀려니... 정말로 구리다라는 생각뿐~ - [eternalbleu]
- ProgrammingLanguageClass/Report2002_1 . . . . 4 matches
* 각 파싱(parsing) 함수는 리턴하기 직전에 해당 non-terminal이 검색되었음을 알리는 메시지를 출력하여야 한다.
* 어휘분석기(lexical analyzer)의 소스코드는 정수 변수 next_token, 문자열 변수 token_string, 함수 lexical()을 포함하여야 한다. 함수 lexical()은 입력 스트림을 분석하여 하나의 lexeme을 찾아낸 뒤, 그것의 token type을 next_token에 대입하고, lexeme 문자열을 token_string에 저장하는 함수이다.
- ProjectAR/회의/20030525 . . . . 4 matches
* 함수 이름은 MFC를 따른다.
* 멤버 변수 앞에는 m_ , 포인터는 m_pComponent 이런식으로 간다. 그 외에 타입 정보는 넣지 않는다.
* 인벤토리는 이스 스타일로 간다. 그냥 주인공이 CARItem*형 포인터의 배열 또는 리스트를 가지고 있으면 된다.
- PyIde/Exploration . . . . 4 matches
Design 을 할때 오버하는 성향이 있는 것 같다. IListener 가 있으면 DIP를 지키는 것이기도 하고, 기존 TestResult 등의 클래스들을 수정하지 않으면서 Listener 들만 추가하는 방식으로 재사용가능하니까 OCP 상으로도 좋겠지만. 과연 당장 필요한 것일까? 그냥 TestResult 를 모델로 들고 있고 View 클래스 하나 더 있는 것으로 문제가 있을까?
unittest 모듈을 프린트하여 Code 분석을 했다. 이전에 cgi 로 test runner 돌아가게끔 만들때 구경을 해서 그런지 별로 어렵지 않았다. (조금 리팩토링이 필요해보기는 코드같긴 하지만.. JUnit 의 경우 Assert 가 따로 클래스로 빠져있는데 PyUnit 의 경우 TestCase 에 전부 implementation 되어서 덩치가 약간 더 크다. 뭐, 별 문제될 부분은 아니긴 하다.
약간만 Refactoring 해서 쓰면 될듯. Runner abstract class 추출하고, TestResult 상속받은 클래스 만들고,. Test Loading 은 TestLoader 그대로 쓰면 될것 같다.
- PythonForStatement . . . . 4 matches
비슷한 것을 찾자면 C++의 배열보다는 C++의 string 클래스, Java의 String 클래스와 비슷하다는 점을 알 수 있어. -- [Leonardong]
음수가 아닌수로 제한되어 있으며 순서가 매겨진 집합. 내장함수인 len()는 시퀀스의 아이템 갯수를 반환한다. 시퀀스의 길이라 n이면, 인덱스는 0..n-1 까지의 범위를 가진다. 시퀀스의 아이템 i는 a[i]로 선택된다.
왜 C++에 안되느냐면, C++의 제어문이 C문법에 종속되어 있고, C에서는 배열과 같이 주소를 통한 인덱스로 접근하는 형들이 종료 인덱스에 대한 정보가 없어서 구현이 불가능합니다. 추상화 시켜 C++에서는 [STL]에 for_each(..) 라는 함수로 비슷한 것이 구현되어 있기는 합니다.
- RUR-PLE/Newspaper . . . . 4 matches
= RUR-PLE/Newspaper(함수화 전) =
= RUR-PLE/Newspaper(함수화 후) =
= RUR-PLE/Newspaper(함수화 후, 함수 반복제거) =
- RandomFunction . . . . 4 matches
랜덤함수의 사용법입니다.
#include <iostream> // 랜덤함수는 iostream에 포함되어 있습니다.
int x = rand(); // rand()함수는 랜덤한 숫자를 리턴하는 함수입니다.
- RandomWalk2 . . . . 4 matches
만약 자신이 작성한 코드를 위키에 올리고 싶다면 {{{RandomWalk2/아무개}}} 패턴의 페이지 이름을 만들고 거기에 코드를 넣으면 된다. 이 때, 변경사항을 하나씩 완료함에 따라, 코드의 어디를 어떻게 바꿨는지(예컨대, 새로 클래스를 하나 만들어 붙이고, 기존 클래스에서 어떤 메쏘드를 끌어온 뒤에 다른 클래스가 새 클래스를 상속하게 했다든지 등) 그 변천 과정과 자신의 사고 과정을 요약해서 함께 적어주면 자신은 물론 남에게도 많은 도움이 될 것이다. 또한, 변경사항을 하나 완료하는 데 걸린 시간을 함께 리포팅하면 한가지 척도가 될 수 있겠다.
- STL . . . . 4 matches
* [http://oopsla.snu.ac.kr/~sjjung/stl/ptr_0001.htm 컨테이너에 포인터 저장하기(문제점과 해결책)]
"[STL] 컨테이너는 포인터를 염두에 둬두고 설계된 것이 아니라, 객체를 담을 목적으로 설계된 자료 구조이다." 이 말을 너무 늦게 봤네요ㅠ_ㅠ 기본 데이터 타입 이외에 사용자 정의 데이터 타입(분류_[class])의 포인터를 사용하기 위해서는 상당한 노력이 필요 할것 같습니다. 혹시 쉬운 방법은 없나요? - [이승한]
"사용자 정의 데이터 타입의 포인터를 사용하기 위해서는 상당한 노력이 필요할 것 같습니다" - 어떤 뜻인지? 힘들었던 예를 코드로 써주면 더 명확할 듯.~ --[1002]
- Spring/탐험스터디/wiki만들기 . . . . 4 matches
* ''CGLIB는 코드 생성 라이브러리로서(Code Generator Library) 런타임에 동적으로 자바 클래스의 프록시를 생성해주는 기능을 제공(펌)'' 이라고 한다.
* TODO : write/delete 등 함수 단위로 security 설정 필요함
* 컨트롤러 함수에 인자를 다르게 해서 OverLoading하려 했으나 ResuestMapping이 같아서 Spring이 Ambiguous Mapping Exception을 발생시켰다.
* 예를들어 ''@RequestMapping(value = "/helloworld", method = RequestMethod.GET)''와 ''@RequestMapping(value = "/helloworld", method = RequestMethod.GET, params="param=param")''은 다르다. 각각 다른 함수에 mapping될 수 있다.
- Trace . . . . 4 matches
MFC 에서 제공하는 {{{~cpp TRACE }}} 매크로의 기능을 VC 의 다른 프로젝트에서도 사용할 수 있다. 단, 여기서는 매크로가 아니라 함수인것을 유념하자.
( {{{~cpp TRACE}}} 매크로가 내부적으로 함수 호출을 하는것 같기는 한데 생각해보면 {{{~cpp TRACE}}} 매크로보다 우리가 정의한 함수를 호출하는게 조금더 오버헤드가 있을것 같다 )
= 함수 body =
- WeightsAndMeasures/신재동 . . . . 4 matches
sort()에 비교 함수('''turtlesCompare''') 넣는데 은근히 힘들었음. 처음에는 C++의 STL에서 vector에 비교 함수 넣는 것과 같으리라고 생각하고 비교 함수를 만들었는데 안되서 확인해보니 파이썬의 리스트에서는 결과를 '''{-1, 0, 1}'''로 해야지 제대로 돌아간다는 것을 알았음. --재동
클래스를 사용한다면 스스로 어떻게 정렬될지 아는 놈으로 만드는 것도 좋겠다.
- django/AggregateFunction . . . . 4 matches
Django에서 기본적으로 count 함수를 통해 레코드 개수를 셀 수 있다.
Django에서 기본적으로 제공하는 함수는 없다. 대신 order_by를 이용해서 최상위 레코드만 뽑는 방법을 사용할 수 있다.
Django에서 기본적으로 제공하는 함수는 없다. 원하는 레코드 집합을 얻어온 다음, python을 이용해서 구하는 방법을 사용할 수 있다.
다음은 위험 결과 손실액 합계를 얻어오는 함수이다.
- randomwalk/홍선 . . . . 4 matches
void Input(); // 바퀴벌레의 시작위치 입력함수
void show(); // 결과값 출력 함수
void Roach :: Input() // 바퀴벌레의 시작위치 입력함수
Roach Hong; // Hong 이라는 Roach 클래스를 생성
- 가독성 . . . . 4 matches
이 글을 쓰고 저 문제에 대한 이의 제기가 들어올줄 예상은 하고 있었습니다. 그에 따른 제 변명은 이렇습니다. 여러 언어의 특성상 언어마다의 코딩 스타일은 엄연히 존재합니다. C언어의 특성에 따라 하나의 함수는 한 화면에 모두 출력되게 하는 것이 중요합니다. (물론 요즘과 같은 큰 터미널에서는 문제가 되지 않겠습니다만,..) 때문에 코드의 가독성을 높히며 많은 코드들을 짜는 것은 불가분의 관계라고도 할 수 있겠죠.(함수를 붙여쓰면 코드들은 많이 들어가나 가독성이 매우 떨어지죠.) 하지만 C언어에서 저것과 같은 방식의 코드는 코드의 라인만 늘리는 결과를 초래하게 됩니다. 예를 들어 24라인만 쓸 수 있는데 for문과 while문의 갯수가 4개라고 하면 4줄을 낭비하는 꼴이 됩니다. 즉, for문과 while문의 가독성을 위해 전체적인 함수 가독성을 떨어뜨리게 되는 것이죠. (또한 for문과 while문의 {를 아래로 내리는 것과 위로 올리는 것의 차이점은 얼마되지 않습니다.) 제가 강조한 것은 이 전체적인 모듈의 가독성을 뜻한 것입니다. (딴지를 걸자면 80x24 화면에 저러한 코딩 방식을 사용하는 것은 죽음을 자초하는 길일것입니다. 토발즈 또한 강조한 것이기도 하구요. :) ) - 이영호
그래서 추측을 했었는데, 자신이 쓰는 도구에 따라 같은 코드도 가독성에 영향을 받을 수 있겠다는 생각을 해봅니다. VI 등의 editor 들로 코드를 보는 분들이라면 아마 일반 문서처럼 주욱 있는 코드들이 navigation 하기 편합니다. (아마 jkl; 로 돌아다니거나 ctrl+n 으로 page 단위로 이동하시는 등) 이러한 경우 OO 코드를 분석하려면 이화일 저화일 에디터에 띄워야 하는 화일들이 많아지고, 이동하기 불편하게 됩니다. (물론 ctags 를 쓰는 사람들은 또 코드 분석법이 다르겠죠) 하지만 Eclipse 를 쓰는 사람이라면 코드 분석시 outliner 와 caller & callee 를 써서 코드를 분석하고 navigation 할 겁니다. 이런 분들의 경우 클래스들과 메소드들이 잘게 나누어져 있어도 차라리 메소드의 의미들이 잘 분리되어있는게 분석하기 좋죠.
- 데블스캠프2006/월요일 . . . . 4 matches
문법,함수,MSDN,SVN,SSH,파일입출력
|| 문법 || 함수 || MSDN || SVN,SSH || 표준입출력 || 계정 및 따로 공부 ㅋㅋ ||
||pm 10:00~12:00 || 함수 || 김정현 (01) ||
[데블스캠프2006/월요일/함수]
- 데블스캠프2009/수요일후기 . . . . 4 matches
* '''서민관''' - 수요일 수업에서 제일 마음에 들었던 부분입니다. 이클립스를 써 본 것도 좋았고, 무엇보다 JUnit test는 정말 마음에 드네요. 앞으로 갈수록 프로그램의 크기가 커질텐데 이클립스를 통한 svn 사용이나 JUnit test나 둘 다 팀 프로젝트용으로는 정말 좋은 기능이라고 생각합니다. 정말 뭐라고 더 칭찬을 해야 할 지 말이 안 나올 정도로 마음에 들었어요. 한 방에 제대로 프로그램을 못 짜는 저한테는 메인 함수 없이도 버그 수정이 가능하다는 건 정말 고마운 기능이죠.
* [송지원] - 사실 너무 아쉬웠다. JUnitTest를 위해 예로 제시한 계산기 클래스도 함수 하나 정도밖에 테스트 해볼 수 없는 이상한 설계의 클래스였다(너무 OOP 다음수업이라 캡슐화에만 신경을 썼던듯). 한 마디로 Java도, JUnit도 맛보기만 해준 꼴이 된것 같다. 하지만 '''JUnit은 확실히 강한 라이브러리다'''. 내가 몸소 느끼고 자발적으로 세미나한 이유도 그렇다. 내 세미나는 즈질이였지만 많은 1,2학년 학우들이 Java로 개발을 진행할 때 도움이 되었으면 한다.
- 레밍즈프로젝트/프로토타입/MFC더블버퍼링 . . . . 4 matches
== 더블버퍼링 클래스 ==
OnDraw의 경우 도큐먼트 클래스와 연관 될 수 있다.
클래스 내부에는 윈도우 핸들이 없기 때문에 GetClientRect를 사용하지 못한다. 따라서 전달인자로 CRect가 전달된다.
getMemDC()를 통해서 생성자를 통해 확보한 메모리DC 포인터를 전달받아 그림을 그린다.
- 문자반대출력/문보창 . . . . 4 matches
음 만약에 한글과 같은 확장문자가 담겼다면 process_wchar() 함수에서 약간의 꼼수를 부린다. 가상의 예(실제로 이렇게 되지는 않지만, 원리는 같음)를 들어보자. "가나" 라는 문자열을 ver1과 같은 통상의 프로그램으로 뒤집으면 "나가"와 같이 프로그래머가 원했던 결과가 나오는 것이 아니고 "ㅏㄴㅏㄱ"가 나온다. 그렇다면 확장문자를 판단해서 문자열을 뒤집기 전에 "가나"라는 문자열을 "ㅏㄱㅏㄴ" 이렇게 만들어 놓는다면 기존 ver1의 프로세스를 전혀 바꾸지 않고도, process_wchar()만을 추가하는 것으로 원했던 기능을 모두 수행하게 된다.
reverse(str.begin(), str.end()); // 문자열을 거꾸로 해주는 STL 함수
reverse(str.begin(), str.end()); // 문자열을 거꾸로 해주는 STL 함수
// 확장문자를 위한 전처리 함수
- 상협/인공지능/오목 . . . . 4 matches
|| 번호 || 및 방어(공격 방어가 같은 함수) || 구현 유무 || 간략한 설명 ||
|| 1 || 4->5 개 만드는거(공격, 방어) || 0 || 그냥 level2라는 함수로 만듦 ||
* 재활용 : 원래 두지 않은 곳이지만 가상으로 돌을 두었다고 가정하면서 이것 저것 검사하기(새로운 함수 만들 필요 없이 이전에 만들었던 함수를 재활할수 있음)
- 새싹C스터디2005/선생님페이지 . . . . 4 matches
* 함수
* 포인터
여러분들보다 조금은 세미나 경험이 많은 사람이기에 한가지 이야기만 드리겠습니다. 세미나를 통해 무언가를 설명할 때 정의(definition)에 대해서 명확하게 알려주도록 노력해 보세요. 여러분이 세미나를 한 후에 신입생들에게 "변수의 정의가 무엇이냐?", "함수의 정의가 무엇이냐?" 와 같은 질문을 한다면 신입생들이 대답을 할 수 있을까요? 혹은 여러분들은 이러한 질문에 명쾌하게 대답을 할 수 있습니까? 어떤 새로운 것을 배울 때 가장 중요한 것은 그것이 어디에 쓰이는 것인지, 그것이 어떻게 쓰는 것인지와 같은 것들이 아니라 그것이 무엇인지를 아는 것입니다. 무엇인지 확실하게 알아야 그 다음을 이해하는데에도 보다 쉽지 않을까요?
이제 포인터에 대해서 다룰 예정인데. 저는 선생님들도 이해가 좀 부족하다고 생각합니다.(저만 그런가요ㅋ?) 다들 공부해 명확히 이해해서 잘 지도해주시고 스스로 발전도 하시길 바랍니다. -[강희경]
- 새싹교실/2011/AmazingC . . . . 4 matches
==== part2. Hello World 출력하기(printf함수의 사용과 코드 분석하기) ====
* printf함수를 사용하여 문자열을 출력하는 방법에 대해 알아보았고 컴파일러가 main 함수를 분석하는 모습을 따라서 전체 코드를 분석했다.
* 따라서 scanf("%d",&number);에서 &는 number가 메모리에서 차지하고 있는 공간의 주소를 반환한다.(후에 포인터 배울때 중요한 개념)
- 새싹교실/2011/무전취식/레벨9 . . . . 4 matches
* Rand함수의 쓰임, seed값을 초기화시켜줘야 제대로된 rand가 나옵니다. 복습합시다.
* 후기가 날아가서 갑자기 의욕이 팍... 앞으로는 저장하고 적어야겠습니다. 이런일이. 역대 Ice Breaking중 가장 길었는데!!! 이미 수업 진도는 다 나아가서.. 이제 좌우를 돌아볼차례입니다. 알고리즘도 배우고 함수 쓰임도 배우고 코딩도 손에 익히고. 이번 시간에는 진영이에게 코딩을 맞겼는데 생각보다(?) 정말 잘했습니다. 가르치고 싶은건 이제 생각한 내용을 코드로 바꾸는것입니다. 다음시간에는 그것에 대해 한번 생각해서 진도에 적용시켜봐야겠습니다. 그리고 자료구조를 한번 알려줘야겠어요. 숙제는 잘들 해가죠? - [김준석]
* 흐음.. 이번주는 정말 기분이 좋아^^ 후기를 이렇게 빨리써주다니. 이번 시간에는 나조차 생각못한 재밌는 시간이었나? 여튼.. 다음시간에도 파일 입출력 복습합니다. while문이 4번돌아가는건 fget함수 특성상 입력에서 \n을 만나면 거기서 끊어주기 때문이지=ㅂ=! 함수 특성에 대해서는 좀더 알려드리겠습니다. 가르쳐야될게 많아졌네. 그리고 역시 젤 좋은건 먹을것에 대한 유혹인가봐. ㅋㅋㅋ 아이셔 잔뜩 먹이면.. 잠 안올려나. 음.. 실험을 해봐야겠어! 여튼 진영이도 이렇게 후기 올리느라 새벽에 수고가 많아. 하번 훑어봐주고 과제 화이팅!! - [김준석]
- 새싹교실/2012/절반/중간고사후 . . . . 4 matches
함수 사용법
포인터
재귀함수 문법 정확히 쓰기
* 포인터와 배열의 관계
- 새싹교실/2012/햇반 . . . . 4 matches
3. 진도 - 함수
ㄱ.함수의 구조
ㄴ.함수의 사용방법
ㄷ.예제 - Add, Power함수
- 서로간의 참조 . . . . 4 matches
== 프레임 윈도우 클래스에서 도큐먼트/ 뷰 참조 ==
CFrameWnd::GetActiveDocument 함수
== 뷰 클래스에서 프레임 / 도큐먼트 참조 ==
== 도큐먼트 클래스에서 뷰 / 프레임 참조 ==
- 손동일/TelephoneBook . . . . 4 matches
void check(); // 검색 항목을 선택하는 함수
int mnreturn(); // menu_num 리턴해주는 함수
void TelephoneBook::check() // 검색 항목을 선택하는 함수
포인터를 이용할 수 있는 방법일 듯..
- 수/구구단출력 . . . . 4 matches
변수명은 가능하면 a,b 나 i,j 같이 이름만 보고 무슨 의미인지 알기 힘들게 짓기 보다는 조금 더 길어지더라도 이름만 보고 이게 무슨 역할을 하는 변수명이구나 하고 알수 있게 짓는 버릇을 들이는게 좋다. 주석이 필요 없을 정도로 변수명 함수명만 보고 이게 무슨 일을 하는 변수, 함수 이다라고 알수 있게 하면 더 더욱 좋다. - [상협]
상협이형의 말을 정리하자면 함수나 변수명을 잘 지으라는거지 그 변수가 무엇을 나타내는지, 함수가 어떤 기능을 하는지 잘 나타내라는거야. 음가(beveragePrice)처럼ㅋ-[강희경]
- 실시간멀티플레이어게임프로젝트/첫주차소스3 . . . . 4 matches
Upload:test_4.zip -- 정훈, 전에 휘동이랑 얘기했었던 스캔함수 만들었어요.. :) game.py에 추가하지는 않고요 그냥 scan.py만들었어요..
Upload:test_4b.zip --휘동 (로그인 화면 깔끔하게, 플레이어 정보를 클래스로, 플레이어 정보 넘겨주기)
doIt(cmd) - 명령어 실행 분기 함수
showState() - 플레이어 상태 출력 함수
- 이영호/지뢰찾기 . . . . 4 matches
--------------------------------지뢰 생성 함수 시작--------------------------------
// 지뢰 생성 함수
// srand(GetTickCount()); 를 이 함수 밖에서 수행한다.
--------------------------------지뢰 생성 함수 끝--------------------------------
- 이차함수그리기/조현태 . . . . 4 matches
//반올림하는 함수
//이번에 그림 함수
cout << "2차함수 출력 프로그램.";
[LittleAOI] [이차함수그리기]
- 정규표현식/스터디/메타문자사용하기 . . . . 4 matches
자주쓰는 문자 집합들은 특수한 메타 문자로 대신하여 찾기도 한다. 이런 메타 문자들을 문자 클래스(classes of characters)라고 부른다. {{{[0-9]}}} = {{{[0123456789]}}} 와 같은걸 알것이다. 이것을 {{{[0-9]}}} 보다 더 편한게 찾으려면 '\d'로 찾을수 있고 제외하고 찾기는 '\D'로 {{{[^0-9]}}}를 대신할수 있다.
* 자바스크립트는 포직스 문자 클래스를 지원하지 않는다.
* 문자와 문자 집합으로 찾는 기본 내용은 2장과 3장에서 모두 배웠고, 이 장에서는 특정 문자나 전체 집합 혹은 문자 클래스와 일치하는 메타 문자를 소개했다. 이렇게 메타 문자와 포직스 클래스는 정규 표현식 패턴을 단순하게 만든다.
- 졸업논문/본론 . . . . 4 matches
기본적으로 지원 되는 레코드 삽입, 삭제, 변경은 자동으로 사용자 화면까지 만들어주는 장점을 가진다. 대부분 웹 애플리케이션이 레코드를 한 건씩 입력하는 인터페이스를 가지기 때문에, 개발 전반부에 걸친 데이터 삽입, 삭제, 변경을 자동화할수 있기 때문이다. 특히 삽입, 변경은 저장이란 단일 개념으로 보고 save메소드로 추상화하였다. 또한 삭제는 관련된 레코드를 함께 지워주는 기능까지 제공한다. 이러한 기능은 Model클래스에 정의된 데이터 타입에 따라 자동으로 이루어진다. 따라서 삽입, 삭제, 변경 SQL문을 실행하는 인터페이스에 많은 노력을 기울이지 않고 기민하게 전체 시스템을 설계함에 집중할 수 있다.
레코드를 검색할 때는 기본적으로 간단한 질의를 처리할 수 있는 함수들을 제공한다. 앞서 살펴본 바와 같이 직접 관계를 가지는 테이블 사이에 조인 연산은 Model클래스의 메소드를 이용해서 추상화되어 있다. 하지만 그 밖인 경우에는 직접 SQL문을 작성하여 데이터를 얻어와야 하기 때문에 django를 사용하더라도 큰 이점이 없다. 또한 추상화된 Model클래스의 메소드는 기본적으로 모든 레코드 속성을 읽어오기 때문에 시간, 공간 측면에서 비효율적일 수 있다. 마지막으로 SQL의 aggregate function등을 대부분 추상화하지 않았기 때문에, 이 역시 SQL문을 작성해야 하는 번거로움이 있다.
- 프로그램내에서의주석 . . . . 4 matches
약간 변명이라면, 개인적 경험에서는 주석이 달린 코드는 주석에 시선이 먼저가고, 주석이 없는 코드에는 함수 프로토타입에 시선이 먼저간다라는 것. 하지만, 의도가 전해지지 않았다면 역시 뭐 무의미한것이겠지. --석천
자네의 경우는 주석이 자네의 생각과정이고, 그 다음은 코드를 읽는 사람의 관점인 건데, 프로그램을 이해하기 위해서 그 사람은 어떤 과정을 거칠까? 경험이 있는 사람이야 무엇을 해야 할 지 아니까 abstract 한 클래스 이름이나 메소드들 이름만 봐도 잘 이해를 하지만, 나는 다른 사람들이 실제 코드 구현부분도 읽기를 바랬거든. (소켓에서 Read 부분 관련 블럭킹 방지를 위한 스레드의 이용방법을 모르고, Swing tree 이용법 모르는 사람에겐 더더욱. 해당 부분에 대해선 Pair 중 설명을 하긴 했으니)
내가 Comment 와 JavaDoc 둘을 비슷한 대상으로 두고 쓴게 잘못인듯 하다. 두개는 좀 구분할 필요가 있을 것 같다는 생각이 들어서다. 내부 코드 알고리즘 진행을 설명하기 위해서는 다는 주석을 comment로, 해당 구성 클래스들의 interface를 서술하는것을 JavaDoc으로 구분하려나. 이 경우라면 JavaDoc 과 Class Diagram 이 거의 비슷한 역할을 하겠지. (Class Diagram 이 그냥 Conceptual Model 정도라면 또 이야기가 달라지겠지만)
그리고, JDK 와 Application 의 소스는 그 성격이 다르다고 생각해서. JDK 의 소스 분석이란 JDK의 클래스들을 읽고 그 interface를 적극적으로 이용하기 위해 하는 것이기에 JavaDoc 의 위력은 절대적이다. 하지만, Application 의 소스 분석이라 한다면 실질적인 implementation 을 볼것이라 생각하거든. 어떤 것이 'Information' 이냐에 대해서 바라보는 관점의 차이가 있겠지. 해당 메소드가 library처럼 느껴질때는 해당 코드가 일종의 아키텍쳐적인 부분이 될 때가 아닐까. 즉, Server/Client 에서의 Socket Connection 부분이라던지, DB 에서의 DB Connection 을 얻어오는 부분은 다른 코드들이 쌓아 올라가는게 기반이 되는 부분이니까. Application 영역이 되는 부분과 library 영역이 되는 부분이 구분되려면 또 쉽진 않겠지만.
- 함수포인터 . . . . 4 matches
[http://blog.naver.com/isubiramie/20024368885 1. 함수포인터]
[http://www.codeproject.com/atl/atl_underthehood_.asp 2. 함수포인터]
- 허아영/Cpp연습 . . . . 4 matches
아직 클래스도 안배워서 클래스를 써도 좀 C의 성격이 강하다는..
지금 만드는 지뢰파인더가 지금까지 만든 클래스중에서는 그나마 클래스를 닮았는데 아직 제대로 되려면 한참 멀었으..
- 05학번만의C++Study/숙제제출1/윤정훈 . . . . 3 matches
* 섭씨 온도를 전달인자로 전달받아 화씨 온도로 환산하여 리턴하는 사용자 정의 함수를 main() 함수가 호출하는 프로그램을 작성하시오. --[최경현]
* 요는 함수가 없다는 말..ㅎ 나랑 똑같은 일을 했구나~;;ㅁ;; - [조현태]
- 2dInDirect3d/Chapter1 . . . . 3 matches
그럼 실제로 만들어보자. 만들때에는 다음 함수가 필요하다.
IDirect3D8* pd3d = NULL; // 포인터를 한개 만들어서
4. [OUT] 세번째 인자를 출력값이다. 그곳의 멤버 변수는 다음과 같다.
- 3N+1Problem/황재선 . . . . 3 matches
http://bioinfo.sarang.net/wiki/AlgorithmQuiz_2f3Plus1 에서 yong27님의 소스코드를 보았다. 소스가 정말 깔끔했다. 실행속도가 빨라서 그 원인을 분석해가며 지난번 작성했던 코드를 수정했다. 나의 목적은 0.001초라도 빠르게 결과를 출력하는 것이었다. 실행시간을 최소화하기위해 클래스마저 없앴다. 특히 두 부분을 수정하니 실행시간이 현저히 줄었다. 하나는 클래스 멤버변수를 제거하고 지역변수화한 경우인데 왜 그런지 모르겠다. 둘째는 사전형 타입인 cycleDic 에서 key를 문자열에서 숫자로 바꾼 부분이었다. 지난번 구현시 무엇때문에 수치형을 문자열로 변환하여 key로 만들었는지 모르겠다. -- 재선
- 5인용C++스터디 . . . . 3 matches
* [5인용C++스터디/클래스]
* [5인용C++스터디/클래스상속보충]
* [5인용C++스터디/클래스상속] - 조재화
- AOI/2004 . . . . 3 matches
잠깐 다른 사람 소스들을 봤는데 이런식이 많더라. 나쁘다는 건 아니다. 실제로 재동과 상규가 프로그래밍대회에서는 저런식으로 했었다. 이유는 대회에선 무조건 속도전이라 함수 이름이나 함수의 길이는 신경쓰지 못하기 때문이였다. 하지만 적어도 대회가 아닌 연습에서는 좀 더 흐름을 알아보기 쉽게 하는게 좋을 거 같다. --재동
uva robot의 경우 보통 300 번 이상의 test case 를 쓰는 것 같습니다. 동적 메모리가 아닌 정적으로 할당할 경우 이 점을 유의(?)하지 않으면 RE error(포인터 에러)가 납니다. 보창은 이것때문에 하루종일 프로그램을 뜯어고쳤으나, 결국 우연한 기회에 알게 되었습니다. LCD-Display의 경우 robot은 1000줄 이상을 test하는 걸로 보여집니다. -- 보창
- AcceleratedC++/Chapter0 . . . . 3 matches
main 함수의 리턴형과 리턴값
main 함수의 리턴형은 ISO/ANSI C++ 표준에서 int로 정하고 있다. 리턴값은 프로그램이 아무런 에러 없이 종료되는 경우에는 0을 리턴하도록 되어 있고, 에러가 발생해서 종료한 경우에는 0 이외의 값을 리턴하도록 되어있다. 이 값은 OS로 돌려지는 값이기는 하지만 OS에서 이것에 따라 특별히 처리하는 것은 없기 때문에 일반적인 경우에는 이 값은 아무런 의미가 없다. 이 값을 이용할수 있는 방법으로는 exec... 함수를 이용하여 프로그램을 실행해주고 받아오는 방법 등이 있다.
- C++스터디_2005여름/도서관리프로그램/문보창 . . . . 3 matches
Book 클래스와 ManageBook 클래스로 나눠서 각자 맡은바 임무를 잘 해 주도록 일을 분담했다. 스터디 시간에 Null 포인터에 자꾸 노드를 삽입했기 때문에 노드가 추가 되지 않았다. 그 전에도 그런 실수를 했는데 똑같은 실수를 반복하다니...
- C/Assembly . . . . 3 matches
이 페이지는 C언어의 함수들을 Assembly 어로 번역해 두는 곳이자,
-fomit-frame-pointer 함수를 call 할때 fp를 유지하는 코드(pushl %ebp, leave)를 생성하지 않도록 한다.
[C/Assembly/포인터와배열]
- CC2호 . . . . 3 matches
포인터를 이해하는 것을 목표로 차근차근 진행할 거에요. 물론 숙제 나갑니다!
* 함수
* 포인터
- CNight2011/송지원 . . . . 3 matches
* 11학번 풋풋한 새내기 두 명과 함께 malloc과 배열, 포인터에 대해 간단하게 브리핑
== Round 1 - 배열과 포인터, 그리고 구조체 by [윤종하] ==
* 포인터와의 연관성
- Chapter II - Real-Time Systems Concepts . . . . 3 matches
말 그대로 재진입이 가능한 함수를 말하는 것입니다. 태스크가 하나의 함수로 이루어져있으므로 재진입을
위해서는 함수에서 쓰일 변수에 대해서 전역으로 설정해 놓으면 안되겠져 만약 전역으로 설정하고 다시 진입하
- ClassifyByAnagram/Passion . . . . 3 matches
* 입력을 파싱해서 결과를 분석하는 함수
* 입력된 Item 의 갯수를 얻는 함수
* 입력된 Item의 목록을 얻는 함수
- CollectionParameter . . . . 3 matches
ComposedMethod의 단점중 하나는, 작은 메소드들 사이의 연관때문이다. 큰 메소드 하나에서 공유되었던 임시 변수들이, 이제는 작은 메소드들 사이에 공유된다. 가장 해결하기 쉬운 방법은 ComposedMethod를 없애고 다시 하나의 큰 메소드에 다 때려넣는 것이지만, 안좋다. 또 다른 해결책으로는 이 작은 메소드들 사이에서 공유되는 임시 변수를 멤버변수에 넣는 것이다. 이것은 객체의 생명기간 동안 유효한게 아니라, 저 메소드들이 실행될때에만 유효하다. 역시 안좋다.
즉, 두 메소드의 결과를 모으는 경우인데, 그리 흔한 경우는 아니였던걸로 기억. 약간은 다르긴 하지만 나의 경우 CollectionParameter 의 성격으로 필요한 경우가 read/write 등 I/O 가 내부적으로 필요할때 또는 Serialization 등의 일이 필요할때. 그 경우 I/O 부분은 Stream 클래스로 만들고(C++ 의 Stream 을 쓰던지 또는 직접 Stream 클래스 만들어 쓰던지) parameter 로 넘겨주고 그 파라메터의 메소드를 사용하는 형태였음. --[1002]
- CommonState . . . . 3 matches
초기 컴퓨터는 용량이 너무 적어서, 프로그램 짧게 만들기 이런걸 많이 해야만 했다. 당연하지만 그걸 알아볼 수 있으리라는 기대는 하지 않았다. 그러다가 용량이 커지니까 이제는 많고 많은 state들을 사용하는 많고 많은 함수들을 많이 사용하게 되었다. 하나 고칠라면 전체를 뜯어 고쳐야 했다. state로서의 프로그램은 안좋다. 그러니 state도 안좋다(??) 이런 상황에서 state가 없고, 프로그램만 있는 함수형 언어가 나오게 되었다. 개념적인 우아함과 수학적인 우아함을 갖추고 있음에도 불구하고, 상업적인 소프트웨어를 만드는데에는 전혀 쓰이지 않았다. 이유는 사람들은 state를 기반으로 생각하고 모델링하기 때문이었다. state는 실세계에 대해 생각하는 좋은 방법이다. 객체는 두 가지의 중간이다.(?이렇게 해석해야하나..--;) state는 잘 다뤄질때만 좋다. 작은 조각으로 나누면 다루기 쉬워진다. 이렇게 하면 변화를 어느 한 곳만 국한시킬 수 있게 된다.
인스턴스 변수를 클래스 안에 선언하자.
- CppUnit . . . . 3 matches
* app 클래스에 다음과 같은 runner 실행을 위한 코드를 추가한다. 다음 코드를 추가함으로써 프로그램 실행시에 GUI Test Runner 가 실행된다.
void ExampleTestCase::testExample () // 테스트 하려는 함수.
* 웹서핑을 통해 이곳에 왔습니다. 위에서 ExampleTestCase 클래스와 SimpleTest와의 관계는 어떻게 됩니까?
- D3D . . . . 3 matches
보지 않아도 될것 같다. 무슨 소리들을 하는지. 전부 초기화.. --+ 함수 설명 뿐이네. 흐미.. 그냥..[[BR]]
==== point3의 연산자와 기본적 함수 ====
'''전위 함수'''
- DPSCChapter4 . . . . 3 matches
'''Adapter(105)''' 는 다른 인터페이스의 Clients들이 예상할수 있는 형태오 클래스의 인터페이스를 변형시킨다. 즉, Adapter는 양립할수 없는 다른 상황의 두가지의 일을 수행하는 클래스를 상호간연결시키는 역할을 한다.
'''Decorator(161)'''은 object에게 동적으로 임무와 할일을 부여한다. Decorator는 기능의 확장을 위한 함수에 대하여 유연한 선택을 제공한다.
- GUIProgramming . . . . 3 matches
GUI를 다루기 위해서 .NET에서 사용하는 클래스이다.
자바로 작성된 프로그램에서 기본적으로 이용하는 API이다. 플랫폼에 독립적으로 제작된 툴킷이지만 내부 구현 상 플랫폼에서 제공하는 함수를 아주 낮은 수준의 추상화된 형태로만 제공하기 때문에 자바의 Platform-independable의 특성을 충분히 만족할 만한 수준은 못된다.
최근 버전의 자바에서 이용하기 시작한 선사의 툴킷이다. 특징으로는 AWT보다 더욱 보기 좋은 그래픽을 제공한다. 또한 AWT와 달리 플랫폼에 비종속적이기 때문에 모든 플랫폼에서 동일한 모양을 보여준다. 그리고 클래스 라이브러리에 약간의 수정을 가함으로써 Windows 에서 기타 플랫폼 (예를 들자면 Mac)의 {{{~cpp Look&Feel}}}사용하는 것이 가능하다. 물론 -_-; 원칙적으로 특정 운영체제의 룩&필은 변경해서 응용프로그램을 개발하는 것은 정책상 불법의 범주에 속한다..
- HanoiProblem/영동 . . . . 3 matches
call Move ;Move함수 호출
;(by와 to의 위치를 바꿔서 함수 호출)
Space proc ;띄어쓰기 함수
- HowManyPiecesOfLand?/문보창 . . . . 3 matches
이론상으론 O(1) 시간만에 되겠지만 문제는 입력범위가 2 <sup>31</sup> - 1 까지 들어올 수 있기 때문에 고정도 연산을 수행해야 한다. GNU C++ 이나 Java는 고정도 연산을 수행할 수 있는 클래스를 포함하고 있으나, 윈도우 C++에는 없다(혹, 내가 못찾는 것일수도 있다). 따라서 고정도 연산을 수행할 수 있는 클래스를 짰다. 성능이 너무 떨어진다. O(1) 을 O(n<sup>5</sup>) 정도로 바꿔 놓은 듯한 느낌이다. 이 Class를 개선한뒤 다시 테스트 해봐야 겠다.
// 함수 호출이 모두 복사로 이루어지므로 성능이 크게 떨어진다.
- IsBiggerSmarter?/문보창 . . . . 3 matches
단순히 Greedy 알고리즘으로 접근. 실패. Dynamic Programming 이 필요함을 테스트 케이스로써 확인했다. Dynamic Programming 을 실제로 해본 경험이 없기 때문에 감이 잡히지 않았다. Introduction To Algorithm에서 Dynamic Programing 부분을 읽어 공부한 후 문제분석을 다시 시도했다. 이 문제를 쉽게 풀기 위해 Weight를 정렬한 배열과 IQ를 정렬한 배열을 하나의 문자열로 보았다. 그렇다면 문제에서 원하는 "가장 긴 시퀀스" 는 Longest Common Subsequence가 되고, LCS는 Dynamic Algorithm으로 쉽게 풀리는 문제중 하나였다. 무게가 같거나, IQ가 같을수도 있기 때문에 LCS에서 오류가 나는 것을 피하기 위해 소트함수를 처리해 주는 과정에서 약간의 어려움을 겪었다.
lcs_length함수에서 cost table을 만들어주는 과정의 running time은 O(n*n), memory cost는 O(n*n)이다. 그리고 print_lcs 함수에서 longest path를 거슬러 올라가는 running time은 O(n + n) = O(n)이다.
- JollyJumpers/황재선 . . . . 3 matches
2. main이 지저분하다. 함수로 추출하기도 뭐하다.
3. test코드를 다듬었다. 테스트할때마다 콘솔로 입력받는 게 귀찮아서 test클래스에서 메인 클래스의 field를 정의하고 진행했다. 또 다른 테스트를 하기위해서 고쳐야할 부분이 흩어져 있다. 테스트코드의 설계에 관심을 가져야겠다.
- LIB_2 . . . . 3 matches
씨에서는 interrupt란 예약어로 함수를 인터럽트 콜이 가능한 함수를 만들 수 있다.[[BR]]
인터럽트 서비스 루틴을 초기화 해주는 함수로 [[BR]]
- LIB_3 . . . . 3 matches
이 함수는 스케쥴링을 위한 준비 과정 TCB들을 다 초기화 해 준다.. 겁이 많아서 그냥 다 초기화 해줬다.[[BR]]
여기서는 MAIN에서 본 듯 태스크를 만들어 주는 함수
// Init the TCB by argument <----- 함수에서 얻은 변수들로... 초기화...ok???
- LinuxProgramming/SignalHandling . . . . 3 matches
쉽게 MFC 와 비유하여 설명하는 시그널은 메시지와 비슷하다고 보면 된다. 실제로 signal 함수를 이용해서 우리는 MFC에서 이벤트와 이벤트 핸들러를 연결하듯 프로그래밍을 한다는 사실을 알 수 있다. (이렇게 보면 정말로 유닉스가 C로 짜여있다는 것을 확실하게 알 수 있다.)
당연히 이해를 위해서는 함수 포인터를 알아야하며, 그 이외에는 굉장히 단순하다는 것을 알 수 있다.
- MFCStudy2006/1주차 . . . . 3 matches
* MFC 프로그래밍을 하는데 있어 기본적으로 생성되는 5개의 클래스와 그 함수의 쓰임을 알아오시오.
* 화면 위치 및 크기 조정 : CMainFrame 클래스 -> PreCreateWindow() 에서 수정
- MFCStudy_2001 . . . . 3 matches
[상협] 버그 이유 방금 찾았어여... 요인은 띈 33 공격 함수 부분이었어여.. 띈 33 공격과 방어를 같은 함수로 처리하면서 문제가 생긴거 같아요. 이제 에러 뜨는 일은 없을거 같네여...아예 띈 33 공격 함수를 작동 안하게 만들었거든요..ㅡㅡ;; 나중에 시간 나면 고쳐서 넣아야징...
- MineSweeper/이승한 . . . . 3 matches
이땐 객체가 무언지 잘 몰라서 함수와 전역 변수들만 가지고 만들어 본...-_-ㅋ;; C랑 다른건 Array 객체를 사용한 정도??;;
blank symbol : 플레시가 실행되면 변수를 초기화하고 함수를 부르는.
// 0으로 셋팅된 배열의 모든 원소를 아웃펏에 보여주는 함수
- Omok . . . . 3 matches
* 제가 작년에 썼던 방법입니다. 터보씨의 그래픽 함수중에서는 clrscr() 함수만 사용합니다.
* 터보씨에서 지원하는 C 의 그래픽 함수들을 이용해서 colorful 한..-_-;; 그런 오목을 만드는 겁니다.
- PowerOfCryptography/이영호 . . . . 3 matches
// 반올림은 ceil, floor 함수로 효율성 있게 구성한다.
// 여기서 문자를 숫자로 변경하고 log10 함수를 사용한다.
// 수학 함수는 func(). n, p를 받아들이고 정수 k를 반환함.
- PowerOfCryptography/조현태 . . . . 3 matches
필요할때마다 malloc으로 할당하고 포인터로 넘겨서 연산하는 방법이 있습니다만....(귀찮다...귀찮다..귀찮다..윽.. 이게 아니잖아!!) -[조현태]
한번 공부하고 만들어봐... C언어에서 인라인 어셈 써서 함수 만들어두 좋구. 아래 참고. - [이영호]
;;ㅁ;; 음.. 영호선배는 넘흐 마니 알고이쩡..>ㅃ<;; C언어 소스 봐도 모르게떠용..ㅎㅎ 64비트형의 인트형의 변수를 두개 지정하고 a에다가 최대값을..(아마 부호가 있기 때문에 -1저장됬을듯한..)넣고 b에는 a-1을.. 그럼 -2가 저장..;; 음.. 이게 아니라 혹시 b가 포인터라서 메모리 한칸 앞쪽을 잡아주는 건가요? 음.. 그러면 할당되지않은 메모리를 건드는 사태가..;;ㅁ;; 이것도 아닌가.. 연구를..;;ㅁ;; - [조현태]
- ProjectGaia/계획설계 . . . . 3 matches
또한 슬롯을 추가할 경우에 추가할 위치를 포인터로써 바로 접근 할 수 있을것임.
1. 어떤 레코드를 삽입/삭제/검색을 하고자 포인터를 찾고자 할 경우에..
* 삭제/검색시에 해당 포인터로 이동하여 세부수행
- ProjectZephyrus/Afterwords . . . . 3 matches
* Server Architecture 디자인이 잘 되었다. - 자신이 맡은 클래스에만 충실하면 되었다.
- SPEC 에 대한 구체적 문서화 부족. 초기 문서화 대신에 팀의 모임시 대화로 대체하였는데, 후에 추가 멤버가 제시한 의견, 문서화도 부족했지만, 후속 멤버의 피드백 역시 부족하였다.
- ProjectZephyrus/ServerJourney . . . . 3 matches
* Logout 클래스 작성, Rename작업, 04일에 의논한 내용 UML에 반영
1. {{{~cpp JavaDoc}}}을 이용한 도움말 작성 package설명 추가, 각 클래스별 설명 추가, 각 메소드별 설명 추가
* mm.mysql 클래스 패스 잡기가 너무 귀찮다. 아예 그냥 프로그램 내부에 넣어 버려야 겠다.
- Randomwalk/조동영 . . . . 3 matches
// 2중동적배열을 만드는 함수
// 바퀴벌레가 범위를 벗어나지 않도록 해주는 함수
// 바퀴벌레를 이동시키고 카운트를 하는 함수
- TestFirstProgramming . . . . 3 matches
후자의 경우는 해당 코드의 구조를 테스트해나가는 방법으로, 해당 코드의 진행이 의도한 상황에 맞게 진행되어가는지를 체크해나가는 방법이다. 이는 MockObjects 를 이용하여 접근할 수 있다. 즉, 해당 테스트하려는 모듈을 MockObject로 구현하고, 호출되기 원하는 함수들이 제대로 호출되었는지를 (MockObjects 의 mockobject.py 에 있는 ExpectationCounter 등의 이용) 확인하거나 해당 데이터의 추가 & 삭제관련 함수들이 제대로 호출되었는지를 확인하는 방법 (ExpectationList, Set, Map 등의 이용) 등으로서 접근해 나갈 수 있다.
'지금 저쪽에는 에코서버가 있어. 지금 만들건 클라이언트고, 지금 만들 클래스로 write 를 하면 저기 띄어놓은 에코서버에 내가 입력한 메세지가 그대로 표시될거야' 즉, 완성되었을 때의 결과를 미리 그려보는 것이다.
- VonNeumannAirport/1002 . . . . 3 matches
여기서 Test - Code 의 시간이 꽤 길었다. (9분) 함수 refinement 부분에서 STL 에 있는 find 함수를 함 써먹어 보려고 했다가;; 결국은 평소 하던데로 했다. ^^;
근데, Refactoring 에 대해서만 1시간을 쓴 것 같다. 그것도 메인 코드인 Configuration 클래스 보단, Test 코드에 대한 Refactoring 이 주가 된 것 같다. 실질적인 실용성을 볼때, 메인 코드에 대한 Refactoring 위주로 나가는 것이 좋을 것 같다. (깨진 Test 는 주로 삭제하는 스타일로 가고..)
- WebGL . . . . 3 matches
[Javascript]임에도 불구하고 마치 C프로그래밍 스타일의 함수들이 존재한다. [WinAPI]가 C스타일의 [OOP]이듯 WebGL 또한 C스타일의 OOP이다. 모든 함수는 WebGLcontext라는 객체에 있는데 보면 그냥 접두어를 붙이는 느낌이다.
위의 코드를 보면 [쉐이더] 프로그램에 fragmentShader와 vertexShader를 Link 시키는 구문인데 주체인 shaderProgram은 첫번쨰 인자이고 gl은 그냥 접두어 처럼 보인다. 저 구문만 그런것이 아니라 다른 모든 함수들이 저 gl 객체에 붙어있다. 하지만 정작 gl이 주체가 아닌 것들이 많다. 따라서 래핑한 객체를 만들어 쓰는 것이 속편한데 어설프게 했다가는 무척 꼬이게 된다.
- Yggdrasil/가속된씨플플/2장 . . . . 3 matches
== 클래스 string ==
* 1장에서 배운 string 클래스에 추가할 내용. SeeAlso ["Yggdrasil/가속된씨플플/1장"]
std::string::size_type//unsigned형의 멤버변수로, 담을 수 있는 최대 문자 갯수를 저장한다. 글자수에 알맞는 type으로 알아서 정의하는 듯.
- ZPBoard/PHPStudy/기본문법 . . . . 3 matches
== 함수 ==
function 함수명(전달인자){
* 그냥 함수로 설정만 하면 뭐든 할 수 있음
- [Lovely]boy^_^/Diary/2-2-10 . . . . 3 matches
* 오늘의 XB는 삽질이었다.--; Date클래스의 날짜, 월 등등이 0부터 시작한다는 사실을 모르고 왜 계속 테스트가 failed하는지 알수가 없었던 것이었다. 덕택에 평소엔 거들떠도 안보던 Calendar, 그레고리Date, SimpleData등등 날짜에 관련된 클래스들을 다 뒤져볼수 있었다. 하지만..--; 결국 Date클래스에서 끝났다. 이제 UI부분만 하면 될듯하다.
- django/Model . . . . 3 matches
혹은 모델이 되는 클래스의 이름을 문자열로 지정할 수도 있다. 이는 클래스를 정의하는 순서에 상관없이 한 모델이 다른 모델을 참조할 수 있도록 한다.
Django는 정의한 모델에 Admin클래스를 재정의해서 이를 삽입, 삭제, 갱신할 수 있는 기본적인 관리자 인터페이스를 자동으로 생성해준다. 사용자 인터페이스는 입력 항목을 원하는대로 배치할 수 있으며, 원하는 디자인도 적용할 수 있다. 이것으로 기본적인 입력 시스템은 만들어졌다.
- django/ModifyingObject . . . . 3 matches
SQL문에서는 insert into values 구문을 이용해 레코드를 삽입하고, update set where 구문을 이용해 레코드를 수정한다. 하지만 django는 이 둘을 하나로 보고 데이터베이스에 레코드를 삽입하고 갱신하는 작업을, 모델로 만든 객체를 저장(save)하는 것으로 추상화했다. 기본적으로 모델클래스는 save메소드를 가진다. 따라서 개발자가 작성한 모델도 save메소드를 가지며, 이는 오버라이딩 할 수 있다. 아래 예에서 보듯이 save 메소드는 새로만든 레코드 필드의 속성에 따라서 적당히 삽입과 갱신 작업을 수행한다.
Employee 모델에 해당하는 새로운 객체를 만들고 save메소드를 이용하면, 데이터베이스에 새로운 레코드를 삽입하거나, 기존의 레코드를 갱신한다. 기존에 삽입하지 않았기 때문에 처음 save를 호출하면 레코드를 삽입하고, 다음 번 save를 호출하면 레코드를 갱신한다. 레코드는 객체로, 레코드의 속성을 객체의 멤버 변수로 취급한다.
데이터베이스에서 레코드를 삭제하는 작업은 Model클래스의 delete메소드로 추상화했다. 하지만 내부에서 실제로 레코드를 삭제하는 메소드는 delete_objects이다.[8] delete_objects메소드는 지우려는 레코드를 참조하는 다른 테이블의 레코드까지 함께 삭제하거나, 외래키를 NULL값으로 설정한다. 예를 들어 다음은 Risk테이블에서 한 레코드를 삭제하는 경우 이를 참조하는 Consequence, Control 테이블의 레코드까지 함께 삭제하는지를 묻는 사용자 화면이다.
- 논문번역/2012년스터디/이민석 . . . . 3 matches
강도 분포의 평균값의 변화 뿐 아니라 하단 contour와 상단 contour의 방향을 고려하기 위해 추가적으로 세 가지 방향성 특징을 계산한다. 말인 즉 우리는 네 lower countour 점, upper contour 점, sliding window 내 평균값을 통해 줄들을 재고 선 방향들을 (8), (9), (10) 특성으로 각각 사용한다. (뭔 소리) 더 넓은 temporal context를 고려하여 우리는 특징 벡터의 각 성분마다 근사적인 수평 미분을 추가로 계산하고 결과로 20 차원 특징 벡터를 얻는다. (윈도우당 특징 10개, 도함수 10개)
특징 벡터들을 decorrelate하고 종류 분별력을 향상하기 위해 우리는 훈련 단계와 인식 단계에서 LDA를 통합한다. (cf. [6]) 원래 특징 표현을 일차 변환하고 특징 공간의 차원을 점차 줄이며 최적화한다. 일차 변환 A를 구하기 위해 훈련 자료의 클래스내 분산(within class scatter) 행렬 Sw와 클래스간 분산(between class scatter) 행렬 Sb를 이용하여 고유 벡터 문제를 해결한다. 이 분산(scatter) 행렬들을 계산하여 각 특징 벡터의 HMM 상태와 함께 이름표를 붙여야 한다. 우리는 먼저 일반적인 훈련을 수행하고 훈련 자료들을 상태를 기준으로 정렬한다. 분산 행렬을 구했으면 LDA 변환은 다음 고유 벡터 문제를 풀어 계산한다.
- 니젤프림/BuilderPattern . . . . 3 matches
빌더 패턴은 소프트웨어 디자인 패턴의 하나이다. 빌더 패턴은 복잡한 객체를 생성하는 방법과, 표현하는 방법을 정의하는 클래스를 별도로 분리한다. 이 분리로서 얻어지는 효과는, 동일한 생성 과정이 다른 표현을 얻어낼 수 있게 되는 것이다.
쉽게 말해서, 아주 복잡한 오브젝트를 생성해야하는데, 그 일을 오브젝트를 원하는 클래스가 하는게 아니라, Builder 에게 시키는 것이다. 그런데 자꾸 나오는 생성/표현 의 의미는, 바로 director 의 존재를 설명해 준다고 할 수 있다. director 는 Building step(construction process) 을 정의하고 concrete builder 는 product 의 구체적인 표현(representation) 을 정의하기에.. 그리고, builder 가 추상적인 인터페이스를 제공하므로 director 는 그것을 이용하는 것이다.
Director 클래스는 Product 를 생성하는 방법과 순서 등을 주관한다. Builder 인스턴스를 가지고 있기 때문에 Concrete Builder 를 건네 받아서 Builder 에 연결해 준다.
- 데블스캠프2005/FLASH키워드정리 . . . . 3 matches
플레시의 함수는 특별한 데이터 타입이 없으므로 리턴타입을 미리 선언하지 않는다.
버튼 이벤트를 처리하는 on(release), on(press) 등의 함수
무비클립 이벤트를 처리하는 onClipEvent(load), onClipEvent(enterFrame)...등의 함수
- 데블스캠프2005/RUR-PLE/정수민 . . . . 3 matches
추신: 궁금한 점이 있소.muggi함수의 제일 아래 ()는 무엇을 뜻하는 것이오? 없어도 실행이 잘 되오.
먹기함수 제일밑에 ()는 수정중에 실수로 남아있던거 =0=;; 근데 저게있어두 실행이 돼긴돼는군;;;
그리고 여기서 재귀함수는 선을 그어서 그밑에있는건 무조건 실행해 더 낮은 줄에있어도 if이있으면 실행이 돼는 =0=;;
- 데블스캠프2005/RUR_PLE/조현태 . . . . 3 matches
파일을 copy/paste하는 과정에서 중간중간에 빈 줄이 생겼는데, 일부 삭제하였으나 남은 것이 있을 경우 지우고 사용해야 합니다.(단 함수와 함수사이는 아닙니다.)
소트 함수명은 sort()입니다.
- 데블스캠프2006/월요일/함수 . . . . 3 matches
== 함수 ==
[데블스캠프2006/월요일/함수/문제풀이]
[DeleteMe] ) 파일자료 가 아닌, 데블스캠프2006/월요일/함수/파일자료 이런식으로 올려주시기 바랍니다.
- 데블스캠프2006/준비 . . . . 3 matches
- 월 : 표준입출력, 문법, 함수, MSDN, 비트연산, 아스키 / 수생, 유선, 용안, 정현, 규완
- 화 : 구조체, 파일 입출력, 포인터(메모리), 디버깅 / 아영, 상규, 선호, 도현
- 목 : 클래스, 객체지향, API / 선호, 준수, 용재, 창섭 , 재혁
- 데블스캠프2006/준비/월요일 . . . . 3 matches
문법,함수,MSDN,SVN,SSH,파일입출력
|| 문법 || 함수 || MSDN || SVN,SSH || 파일입출력 || 계정 및 따로 공부 ㅋㅋ ||
||pm 10:00~12:00 || 함수 || 김정현 (01) ||
- 데블스캠프2011/다섯째날/후기 . . . . 3 matches
* 마지막날이다 보니 다들 후기 갯수가 좀 적군요. Rurple에 이어서 Python을 공부해볼 수 있어서 좋았습니다. 파이썬이 러플로 했을땐 코드 길이가 짧았는데, 다른걸 짤땐 어떤 면에서 짧아지는지는 아직 잘 모르겠네요. 네트워크는 CAU_MAC인데다 MAC을 쓰다보니 충돌의 연속.. 결국 다른 사람들이 하는걸 같이 보는게 좀 많았네요.ㅋㅋ 11학번 친구들이 오늘은 2명이나 와서 참여해서 재밌게 했던거 같습니다.. 만 화수랑 호동이는 약간 어려워 하더군요. (저는 이미 그런 상황에 적응해버린건지 객체니 클래스니 해도 그냥 뭐... 했달까요 ㅎㅎㅎ;)
* 옛날에 c로 TCP/IP 프로그래밍 책을 본 적이 있었는데 그쪽에서 소켓을 이용하는 부분을 생각해보면 c에 비해서 파이썬쪽에서는 참 쉽게 되는구나 싶었습니다. 그리고 개인적으로 좀 신기했던게 리턴 값이 하나 이상 있을 수 있는 함수도 있다고 한 부분이었습니다. 이건 파이썬쪽의 특성인지 아니면 다른 인터프리터쪽 언어도 이렇게 될 수 있는지 궁금하네요. 네트워크쪽에 대한 기본적인 설명도 좋았습니다. 와이어샤크쪽에 대해서는 제대로 알려면 공부가 더 필요할 듯. -_-
* 수경이의 String 코드 레이스에서 저의 프로그래밍 달리기를 너무 빡세게 했던게 부끄러워서 이번엔 1학년 학우(저 같은 경우 성화수 학우)에게 설명해주고 그 학우가 하고 싶은 스펙으로 함께 프로그래밍 하고자 많이 노력했습니다. 파트너 교체 후 순의랑 파란 바를 만들어버리는 실수를 저지르긴 했습니다만 제가 부족한 탓이었구요-_-;; 개인적으로 화수의 '0층부터 지하까지' 아이디어는 신선했어요. 형진이가 처음에 의도했던 엘레베이터 문제(밖에서 누르고 층을 누르는 케이스)는 다른 클래스도 필요하고 일단 화수를 이해시키는데에 초점을 둬서 그걸 못 푼 점은 좀 아쉬웠어요.
- 데블스캠프2012/다섯째날/후기 . . . . 3 matches
* [이재형] - 오버로딩이나, 탬플릿 까지는 어렵지 않게 이해했는데 그 뒤부터 클래스, 구조체, 생성자와 소멸자, 상속, 가상함수 등등 부족한게 많아서 정말 멘붕에 멘붕을 거듭했습니다. 그래도 정말정말 How에대한 관점으로 공부해야겠다는 필요성과 더불어 이번 방학 공부에 동기부여가 잘 될 것 같아서 좌절감만 드는 것이 아니였습니다. 좋은 어려움이였던 것 같습니다.
* [서민관] - 개인적으로 C로 C++처럼 만들어 볼 수는 없을까 하는 생각을 조금 한 일이 있어서 보다 와 닿았던 것 같은 느낌이 강했습니다. 그리고 구조체의 맨 앞에 포인터를 배치해서 캐스팅하는 방법은 꽤나 그럴싸하군요. 항상 C++에서 궁금했던 것이 왜 맨날 첫 4바이트가 vtable의 정보를 가지고 있는 것인가였는데 아무래도 이번 실습 때 그걸 몸으로 체험한 것 같습니다. 난이도도 그렇게 높지 않으면서 진행도 단계적으로 되어 있어서 따라가기도 편했습니다. 다만 1학년한테는... 음...
- 레밍즈프로젝트/프로토타입/에니메이션 . . . . 3 matches
추상화 기초 클래스.
에니메이션이 필요한 객체들은 이 클래스를 상속 받음으로서 에니메이션 처리를 할 수 있다.
이 클래스는 더블버퍼링과 bmp그리기를 자동화 시켜둔 [레밍즈프로젝트/그리기DC](CmyDouBuffDC)를 사용하여 드로잉을 수행한다. (CDC를 사용하는 도 있지만... 편의를 위해서...)
- 문자반대출력/변형진 . . . . 3 matches
PHP에서는 strrev()라는 문자열 처리 기본 함수를 제공하지만, 현재 버전에서의 PHP는 기본 함수로는 Multibyte String을 지원하지 못한다.
preg_split()는 문자열 처리 능력이 탁월한 언어인 Perl에서 사용하는 Perl 호환 정규 표현식(Regular Expressions)을 차용하여 문자열을 분리하여 배열에 담는 함수.
- 새싹교실/2011 . . . . 3 matches
내가 짠 코드를 직접 출력을 통해 확인하는 것은 분명 매력적인 일입니다. 그러나 처음 익힌 코딩 습관은 버리기 매우 어렵습니다. 많은 학생들이 처음 프로그래밍을 배우며 printf 함수를 사용하여 코드를 검증하는 습관을 들입니다. 그 때문에 상당수의 졸업할때까지 테스트보다는 직접 눈으로 확인하는 것을 선호합니다. 그런데 작성한 코드가 잘 돌아가는지 알기 위해 직접 눈으로 확인해야만 하는 것은 매우 많은 문제가 있습니다.(이것에 대해서 더 적자면 정말 길어질테니 일단 이 페이지엔 적지 않겠습니다.)
* 학교 수업에서 사용하기 때문에 printf 함수를 소개할 필요는 있습니다. 그러나 새싹교실에서 실습한 코드들을 검증하기 위해 매번 printf를 사용하는 것은 권장하지 않습니다.
* 테스트는 [http://winapi.co.kr/clec/reference/assert.gif assert]함수를 통해 간단히 만들 수 있습니다.
- 새싹교실/2011/學高/1회차 . . . . 3 matches
3 . 약간의 함수...
* #include <stdio.h> : stdio라는 헤더파일의 함수를 사용하기 위해 include 하겠다
* printf("출력할 내용"); : 기본적으로 출력하는 함수
- 새싹교실/2012/개차반 . . . . 3 matches
* 포인터 개념이나 scanf에서 &가 쓰이는 이유 등 여러가지 keyword에 대해 설명하기 위함
* 함수 (Function) 들의 집합
* 이미 존재하는 함수를 가져다 쓰려 할 때 헤더파일을 불러와서 사용한다
- 새싹교실/2012/아우토반/뒷반/5.11 . . . . 3 matches
1. 함수
* 함수의 개념
* 함수의 종류
- 새싹교실/2013/록구록구/11회차 . . . . 3 matches
* 포인터 기초 (재)
* 포인터란?
* 기본적인 포인터 연산자들에 대한 설명
- 새싹교실/2013/록구록구/6회차 . . . . 3 matches
* 함수란 무엇인가 [Re]
다시 한번 함수에 대해서 공부해보는 시간을 가졌당
이번주에는 함수에 대해서 더 자세하게 알아보는 시간이 되었다.
- 숫자를한글로바꾸기/김태훈zyint . . . . 3 matches
글구 num2str 요함수.. 걍 수민이한것처럼 배열로 하면 되는데; 괜히 switch로 했다 ㅠㅠ 엉엉
스위치문 압박이얌..;;ㅁ;; 이게 모햐~~>ㅃ<;;; ㅎㅎ 그거 빼고는 다 이쁘넹!~헤...ㅎ 그런데 말야.^^ 수민이꺼나 네꺼 0넣으면 답이 안나오쟈넝..;;ㅁ;; 0이 불쌍해..ㅠ.ㅜ ㅎㅎㅎ 그거빼고는 다 잘해떵..ㅎㅎ 나도 쓰잘때기없는 그 클래스 뺄껄.ㅎ 괜히 넣었어..편하게 짤려다가 더 복잡해 보이는걸~ㅎ ㅎㅎㅎ 그럼 좋은하루~~>ㅁ<;; - 현태
나두 언넝 클래스 배워서 소스 좀 깔쌈하게 짜고 싶은데 아직 안배워서 ㅠㅠ - zyint
- 숫자를한글로바꾸기/조현태 . . . . 3 matches
소스가 길어 보이지만 저기의 stack이라는 클래스.. 사실 저번에 [LittleAOI]에서 만들어서 2번이나 사용했던 클래스다.
음;; 그런게 존재하는건 아니구... C언어면 C언어답게 하는 것이 좋구 C++이면 C++답게 코딩하는게 좋은데.. malloc은 C언어에서 쓰이잖아. 물론 C++에서도 쓰이겠지만 C와의 호환성 때문이지 정말로 쓰이는것은 new니까 new를 쓰는게 좋다는거지. 클래스를 malloc으로는 할당 못하거든.
- 시간맞추기 . . . . 3 matches
* time() 라이브러리 함수 사용.
* kbhit()함수 사용. - 사용자가 아무키나 눌렀는지 안눌렀는지 알리는 함수.
- 아젠더패턴 . . . . 3 matches
아젠더(Agenda)가 없는 스터디 그룹이나 소그룹(SubGroupPattern)은 없다. 이 아젠더는 그룹 목표의 틀을 잡아주며, 멤버들이 일찌감치 준비하도록 해주며 사람들이 참여할 모임을 선택할 수 있는 기회를 준다.
'''아젠더가 없으면, 그룹은 허전함을 느낄 것이다. 멤버는 스케줄을 정할 수 없으며, 사람들은 모임을 적절히 준비할 시간이 충분치 못할 것이다.'''
최고의 아젠더는 그룹이 작품을 순차적으로 학습([순차적학습패턴])하도록 짜여진 것이다. 그룹이 작품을 학습하기를 마치면, 그 작품을 원래 학습할 때 없었던 그룹의 새로운 멤버들이 그 작품을 학습할 기회를 갖기를 원할 수도 있다. 이는 학습 주기(StudyCyclePattern)와 소그룹(SubGroupPattern)을 만들어서 수행할 수 있다.
- 이영호/nProtect Reverse Engineering . . . . 3 matches
(누군가가 nProtect가 함수를 hooking을 하고, 게임 자체 소스에 포함 되는 것이 아니라 바이너리 형식으로 덧 붙여진다고 하였는데,
이것을 인라인 패치하였지만, OpenProcess로 디버그 Process를 Hooking하는 함수는 gc_proch.dll에 있다는 것을 확인하였다.
몇몇개의 함수만을 수정하고 guardcat.exe만 실행하였으나 gc_proch.dll의 hooking 루틴때문에 막혀버렸다.
- 정모/2011.3.14 . . . . 3 matches
* Ice Breaking 때 스펙타클한 거짓말을 썼는데 "달을 다녀왔다" 라고 썼습니다. 물론 고쳤지만요.ㅋㅋ 그리고 이번 Ice Breaking은 시간이 좀 길어진게 흠이지만 참 재밌었습니다. 이번 정모 때 가장 인상적인건 현이의 옵젝C 였습니다. 중간에 "함수 오버로딩은 지원 안하나요?" 라고 물어봤었는데, "언어의 특징 상 지원할 필요가 없다" 라고 현이가 답해줬습니다. 대답을 들으면서 '''"아, 난 그동안 언어의 특징을 너무 무비판적으로 수용한 것이 아닌가?"''' 라는 생각을 하게 되었습니다. '''"객체지향 언어는 당연히 함수 오버로딩을 구현해야 한다"'''는 선입견이 있었거든요. 저에게 심심한 충격이 됐습니다. 다른 OOP Language 중 오버로딩을 구현한 비율이 얼마나 되는지 한번 찾아봐야 겠습니다 ㅋㅋㅋ - [박성현]
* 솔직히 Ice Breaking할때 저번 주에 한 재미난 일이 생각이 안나서 어떻게 대충 쓰다보니 너무 자명한 거짓말을 써 버렸습니다ㅋㅋ OMS할때 Objective-C에 대해 하나도 몰라서 초반의 Obj-C의 클래스 선언 방법이나 문법에 대해서는 이해를 했지만 뒤에 가서는 이해가 안가는 부분이 대다수였던 것 같네요. ZP책장에 Obj-C 책을 넣어 뒀다고 하니 언젠간 한 번 꺼내서 읽어봐야겠습니다. - [신기호]
- 졸업논문/요약본 . . . . 3 matches
웹 환경은 이제 하나의 플랫폼으로 자리 잡고 있다. 빠르게 변하는 웹 환경에는 python같은 객체지향 언어가 적당하다. Django는 python으로 만들어진 웹 애플리케이션 프레임워크로, 데이터베이스를 추상화하여 개발자가 기민하게 웹 애플리케이션을 작성하도록 돕는다. Django에서는 기존에 ODBC등을 이용하는 CLI 보다 한 단계 더 높은 수준에서 데이터베이스를 사용할 수 있다. 예를 들어 주언어 python에 클래스를 정의하면 데이터베이스 테이블을 자동으로 생성해주며, 클래스가 변경되면 데이터베이스 테이블도 자동으로 수정해준다. 그 밖에 삽입, 삭제, 수정, 조회 기능을 클래스가 가진 메소드로 추상화하여 주언어 수준에서 데이터베이스를 사용할 수 있도록 한다. 이러한 지원을 바탕으로 웹 애플리캐이션 개발자는 기민하게 프로그램을 작성할 수 있다.
- 큰수찾아저장하기/김태훈zyint . . . . 3 matches
문제는 쉬운데 이걸 함수로 나누기가 무지 애매하다 -_-;
문제는 금방풀고; 이 프로그래밍 함수 어떻게 나눌지 생각한게 한시간 걸렸을듯...
오오;; 함수나누는 부분이 예술이다 +_+ 나도 써먹어볼까 ㅎㅎ
- 타도코코아CppStudy . . . . 3 matches
* [코코아] : for랑 if를 자유롭게 쓰고 싶어요^^. 함수도 자유롭게 쓰고 싶어요. 지뢰찾기, 인수형따라잡기...선희 방 청소 시키기
* [CherryBoy] : 클래스의 조금더 큰 이해... MFC 랑... 많은 알고리즘 습득...
* 인수형~ 숙제를 하는데.. 제껀 왜 1학년때 숙제같은지..─_─; 클래스를 넘 안썼나봐요... 으앙~ 구제해주세요~ -- 대근([CherryBoy])
- 타도코코아CppStudy/0731 . . . . 3 matches
* 윈도우에 그림을 그려주기 위해서는 DC라는게 필요하다. MFC에서는 DC를 랩핑하고 있는 가장 기본적인 클래스로 CDC를 지원한다. CDC는 그림 그리는 사람의 손이라고 생각하면 된다. 그림을 그려주기 위해 어떤 색깔의 펜이나 붓을 고를수 있을 것이다. 또한 사각형, 원도 그릴수 있다. 이러한 행위들을 CDC의 멤버함수로 정의해놨다. 우리는 그걸 갖다 쓰기만 하면 된다. 세부적인 것은 나중에 알아도 된다.
- 타도코코아CppStudy/0811 . . . . 3 matches
최소 한개. 무조건 클래스를 이용하세요. 일단 문법을 익혀야 하니... 또한 될수 있으면 객체지향적으로.
|| ZeroWiki:RandomWalk || 정우||Upload:class_random.cpp . || 왜 Worker가 Workspace를 상속받지? 사람이 일터의 한 종류야?--; 또 에러뜨네 cannot access private member. 이건 다른 클래스의 변수를 접근하려고 해서 생기는 에러임. 자꾸 다른 클래스의 변수를 쓰려 한다는건 그 변수가 이상한 위치에 있다는 말도 됨 ||
- 토비의스프링3/밑줄긋기 . . . . 3 matches
* Context는 전달받은 그 Strategy 구현 클래스의 오브젝트를 사용한다.
* 어떤 클래스든 스프링의 빈으로 등록할 때 먼저 검토해야 할 것은 싱글톤으로 만들어져 여러 스레드에서 동시에 사용해도 괜찮은가 하는 점이다. 상태를 갖고 있고, 멀티스레드 환경에서 안전하지 않은 클래스를 빈으로 무작정 등록하면 심각한 문제가 발생하기 때문이다.
- 하드웨어에따른프로그램의속도차이해결 . . . . 3 matches
* Game 의 Tick 에 해당되는 함수를 idle에 넣지 말고 타이머마다 화면 그려주는 함수를 실행한다.
* 스레드 & 1초 쉬고 (이건 HiPerformanceTimer 관련 함수를 이용하는 방법)
- 황현/Objective-P . . . . 3 matches
Objective-J의 경우처럼, 클래스의 선언과 정의를 동시에 한다. (사실 PHP의 구조상, 이럴 수 밖에 없다.)
// 클래스 선언 및 정의
// 클래스 사용
- .vimrc . . . . 2 matches
map <C-F10> gd " 어떤 함수 안에서 지역변수를 추적
map <F11> ^] " 전역변수/구조체/정의상수/함수정의를 추적
- 05학번만의C++Study/숙제제출/1 . . . . 2 matches
섭씨 온도를 전달인자로 전달받아 화씨 온도로 환산하여 리턴하는 사용자 정의 함수를 main() 함수가 호출하는 프로그램을 작성하시오. 프로그램은 섭씨 온도로 입력할 것을 요구해야 하고, 다음과 같은 실행 결과를 출력해야 한다. 참고로, 섭씨 온도를 화씨 온도로 변환하는 공식은 Fahrenheit = 1.8 X Celsius + 32.0 이다.
- 05학번만의C++Study/숙제제출4/조현태 . . . . 2 matches
cout << "클래스가 생성되었습니다.\n";
cout << m_haveInt << "을 가진 클래스가 파괴되었습니다.\n";
- 2011년독서모임 . . . . 2 matches
*[강소현] - 경제에 별 관심이 없어서 그런가 재밌는 책인데도 불구하고 힘들게 읽은 듯 합니다. 이제 슬슬 신경 쓸 나이가 되기는 했는데 걱정이네요 ;ㅁ; 친구들이 치르는 피트 시험이 얼마 안남아서 그런가 의사, 변호사 등등이 되기까지의 과정을 매우 오래 걸리게 하여(가상 그린벨트!) 높은 수익을 유지한다는 점이 눈에 띄었습니다. IBM의 어떤 저가 레이저 프린터 모델과 고급 모델이 똑같은 부품으로 만들어졌다는 점도! 속도를 늦춰주는 칩을 하나 넣음으로써 돈이 있는 사람들이 싼 제품을 안 사도록 막고, 디자인 새로할 필요가 없는 효과를 내다니... 비행기도 이코노미 클래스에 일부러 차별을 주어 똑같이 한 곳에서 다른 곳으로 이동해주는 거임에도, 비지니스 클래스를 선택하도록 만든다는 걸 보고 충격;ㅅ; 쨋든 이동만 하면 된다는 저같은 소시민1은 그냥 싼 거를 이용하면 되겠지요 ~ㅁ~ㅋㅋ 근데 또 커피는 카페모카를 마시는 거 보면 이상한 쪽에서 돈이 새는 거 같기도...?
- 3rdPCinCAUCSE/FastHand전략 . . . . 2 matches
그동안 [경태]는 A 번 구현 완료. 테스트 데이터를 위해 editplus 로 입력데이터를 test.txt로 작성. DOS 창에서 redirection 으로 프로그램 실행 & 결과 확인. 중간에 5목이 일어난 부분의 첫 위치를 파악하는 부분에서는, 해당 오목 판정결과 함수에서 판정 방향값을 리턴해주는 형태로 함수를 수정, 이를 근거로 첫 위치를 구했습니다.
- APlusProject . . . . 2 matches
오빠가 말한 문서 열어봤는데 클래스 이름이나 함수이름이 안적혀 있어서 적을수가 없었어요;;
- AcceleratedC++/Chapter1 . . . . 2 matches
초기화, end-of-file, buffer, flush, overload, const, associativity(결합방식), 멤버함수, 기본 내장 타입, 기본타입(built-in type)
- ActiveTemplateLibrary . . . . 2 matches
ATL은 템플릿으로 이루어진 C++ 클래스 집합니다. 이 클래스들은 COM 객체를 프로그래밍하는 과정을 단순화시킨다. VisualC++에서 COM의 지원은 개발자들이 쉽게 다양한 COM객체, Automation 서버, ActiveX 컨트롤들을 생성하도록 해준다.
- AnEasyProblem/강소현 . . . . 2 matches
* 클래스 이름은 항상 "Main"으로 해주어야 합니다. 깜찍한 poj 같으니:)
* printJ 함수 내에서 while(num<bin.length-1)문의 1을 빼주지 않아 bin[num+1]가 index bound of exception이 났었습니다.
- AppletVSApplication/영동 . . . . 2 matches
* main() 함수를 반드시 포함한다.
* 애플리케이션과는 달리 main()함수가 필요없다.
- AppletVSApplication/진영 . . . . 2 matches
* "'''Application'''"은 main()함수를 포함하고 있어서 자기 스스로 실행이 되는 반면에
* "'''Applet'''"은 main()함수 없이 자기 스스로 실행되지 않고 html에 의해 돌아가는 것 같습니다.
- C++ . . . . 2 matches
벨 연구소의 [http://www.research.att.com/~bs/homepage.html Bjarne Stroustrup]은 1980년대에 당시의 [C]를 개선해 C++을 개발하였다. (본디 C with Classes라고 명명했다고 한다.) 개선된 부분은 클래스의 지원으로 시작된다. (수많은 특징들 중에서 [가상함수], [:연산자오버로딩 연산자 오버로딩], [:다중상속 다중 상속], [템플릿], [예외처리]의 개념을 지원하는) C++ 표준은 1998년에 ISO/IEC 14882:1998로 재정되었다. 그 표준안의 최신판은 현재 ISO/IEC 14882:2003로서 2003년도 버전이다. 새 버전의 표준안(비공식 명칭 [C++0x])이 현재 개발중이다. [C]와 C++에서 ++이라는 표현은 특정 변수에 1의 값을 증가시키는 것이다. (incrementing이라 함). C++이라는 명칭을 이와 동일한 의미를 갖는데, [C]라는 언어에 증가적인 발전이 있음을 암시하는 것이다.
- C/Assembly/포인터와배열 . . . . 2 matches
포인터는 LC1을 가리키므로 메모리에 올려진 변하면 안되는 프로그램영역(CODE 영역)을 가리킨다.
즉, 배열은 CODE 영역의 포인터와 달리 스택영역에 존재하게 되므로 수정이 가능하게 되는 것이다.
- C99표준에추가된C언어의엄청좋은기능 . . . . 2 matches
함수내에서 함수 선언 가능.
- CNight2011/권순의 . . . . 2 matches
== Round 1 - 배열, 포인터, 구조체 ==
* 배열 = 포인터?
- CProgramming . . . . 2 matches
함수
포인터
- C_Tip . . . . 2 matches
1. [함수포인터]
- ComputerGraphicsClass . . . . 2 matches
C++ 코딩에 자신이 없는 사람의 경우 이 책의 맨 앞에 있는 Vector 클래스와 Matrix 클래스 코드를 이용해보기를 권함. 책 설명은 쉬우나 중간중간 설명중 좀 아쉬운 부분이 보이긴 함. (ex : 그래픽스 파이프라인 부분인데 박스 설명은 CPU 파이프라인 설명시의 예 라거나, A* 부분은 설명이 너무 부족)
- ComputerNetworkClass/Report2006/BuildingProxyServer . . . . 2 matches
문자열 파싱에서 아주 편리한 함수
늦은 것 같지만... -_-;; 휘동이에게 말해줬다가 실패한 함수에 대한 내용올림... scanf가 아니라 sscanf 였음
- ComputerNetworkClass/Report2006/PacketAnalyzer . . . . 2 matches
WSA prefix 를 가진 함수의 경우 대부분 Winsock 2에서 제공 되기 시작한 것이며, 이 WSAIoctl 역시도 윈속 2에서 지원된다.
(1) 콘솔로 캡쳐기, 필터, 컨테이너 클래스를 구성한다.
- Cpp에서의가변인자 . . . . 2 matches
C의 io 라이브러리인 printf에 쓰이는 그것이다. 또는 MFC - CString의 CString::Format이나 CString::AppendFormat에 쓰이는 그것이기도 하다. 함수 쓸때 ...이라고 나오는 인자를 가변인자라고 한다. 이렇게 하면 인자를 여러개를 받을 수 있다.
와우 난 저런 메시지 박스 함수가 있는지 몰랐는데~ - 임인택
- DataStructure/Stack . . . . 2 matches
* top 포인터는 맨 나중에 집어 넣은 노드를 가르킴.
* 따라서 데이터가 추가되거나 삭제될때마다 top포인터가 변하겠죠?^^;;
- DebuggingSeminar_2005/UndName . . . . 2 matches
DLL 파일에 의해서 분석된 내용을 보면 DLL 에 함수의 이름이 이상하게(?) 변형되어 있는것을 확인하실 수 있는데(DUMPBIN.EXE 를 통해서 가능합니다.) 이 이름의 원형을 알고 싶을때가 있습니다. 그럴때 undname.exe 라는 파일을 사용하시면 아주 쉽게 확인해 보실 수 있습니다.
''디버깅 세미나에서는 이러한 함수의 이름이 컴파일 옵션으로 설정되는 map 파일안에 존재하는 것으로 이용하였다.'' - [eternalbleu]
- Devils . . . . 2 matches
이 두 단체는 [제로페이지]의 규모가 작아지고, 과거의 시작 멤버 이후로 모임의 강도가 약해지면서 [제로페이지]와 통합하였는데, [데블스캠프]는 [데블스]의 정신을 이어 받은 신입생을 위한 밤새기 세미나로 남아 있다.
[Devils]의 발음에 대한 토론은 굉장히 많았으며, 창립멤버들이 '''[데블스]'''로 읽기로 결정해서 의견을 존중한다.
- DiceRoller . . . . 2 matches
'''프로세스와 주소를 알때 그 주소의 값을 얻어오는 함수'''
buffer부분에 char형태로 저장이 된다. atoi 함수로 정수로 컨버전하자.
- DirectVariableAccess . . . . 2 matches
와드 아저씨의 말로는, '클래스에 아주 적은 양의 메소드만 존재한다면, getter/setter를 추가하는 것만으로도 메소드의 수가 두배가 되어버린다. 이는 전혀 사용되지 않을 유연성을 위해 쓸데없이 갯수를 늘린 것이다.' 라고 한다.
하지만 이 클래스가 상속이 될 가능성이 있다면, setter/getter를 오버라이딩 해서 사용할수 있으므로, IndirectVariableAccess를 쓰는 것이 괜찮다.
- DirectX2DEngine . . . . 2 matches
* 앞으로의 계획 : Timer 및 Animation 클래스의 구현.
* 계속 구현 : Timer 클래스, 상속을 위한 처리 및 DeviceLost 처리
- EightQueenProblem/밥벌레 . . . . 2 matches
procedure SetQueens(n: Integer); // 퀸 배치하기. 이 소스의 핵심함수. n은 현재 사용안한다. 처음엔 RandomSeed로 쓰려했음..-_-;
function CheckQueens: Boolean; // 제대로 배치되었는지 검사하는 함수.
- EightQueenProblem/최태호소스 . . . . 2 matches
EQ() 함수에서 return 1 하는 대신 계속 풀도록 하고..
그리고 메인함수에서 결과 출력하는 루틴은 제거 하였다.
- HardcoreCppStudy . . . . 2 matches
* 멤버를 보면 모두 한가닥(?)하는 나름대로 하드코어.특히 김모양.
* 우선 첫주는 객체지향을 들어가기 전에 7, 8장이나 함수 사용을 익숙히 하기 위해서 예제를 내겠습니다.
- HardcoreCppStudy/두번째숙제/CharacteristicOfOOP/김아영 . . . . 2 matches
객체지향 프로그래밍에서 다형성이란 근본적으로 상속에 뿌리를 두고 있다. 조상 클래스로부터 상속을 받아 새로운 객체들이 파생되어 생성된다. 이때 만약 새객체들이 모두 조상 클래스와 모두 동일한 값만 가지고 있다면 새로운 객체로서 의미가 없다. 왜냐면 그것을 만드는 이유는 무언가 다른 역할을 하기 위해 생성하는 것이기 때문이다. 그래서 다형성이란 조상이되는 객체로부터 상속을 받아 다른 결과물을 산출해 낼때 다형성이라는 의미를 부여할 수 있게 된다.
- HardcoreCppStudy/첫숙제 . . . . 2 matches
== 함수의 중복정의 ==
* 함수의 중복정의(Overloading)에 대해 기술할 것. 예제도 스스로 만들어 보기 // 책에는 재정의라고 나와있음.
- HardcoreCppStudy/첫숙제/Overloading/임민수 . . . . 2 matches
함수의 중복정의라 함은
함수의 이름은 같게 하되 전달인자들의 개수나 형식에 따라 다르게 사용될 수 있도록 정의하는것을 말함..
- Java2MicroEdition . . . . 2 matches
그림을 보면 맨 아래에 MID, 즉 휴대전화의 하드웨어 부분이 있고 그 위에는 Native System Software가 존재하며 그 상위에 CLDC가, 그리고 MIDP에 대한 부분이 나오는데 이 부분을 살펴보면, MIDP Application과 OEM-Specific Classes로 나뉘어 있는 것을 알 수 있다. 여기서의 OEM-Specific Classes라는 것은 말 그대로 OEM(Original Equipment Manufacturing) 주문자의 상표로 상품을 제공하는 것이다. 즉, 다른 휴대전화에서는 사용할 수 없고, 자신의(같은 통신 회사의) 휴대전화에서만 독립적으로 수행될 수 있도록 제작된 Java또는 Native로 작성된 API이다. 이는 자신의(같은 통신 회사의) 휴대전화의 특성을 잘 나타내거나 또는 MIDP에서 제공하지 않는 특성화된 클래스 들로 이루어져 있다. 지금까지 나와있는 많은 MIDP API들에도 이런 예는 많이 보이고 있으며, 우리나라의 SK Telecom에서 제공하는 SK-VM에도 이런 SPEC을 가지고 휴대전화의 특성에 맞는 기능, 예를 들어 진동 기능이나, SMS를 컨트롤하는 기능 들을 구현하고 있다. 그림에서 보듯이 CLDC는 MIDP와 OEM-Specific Classes의 기본이 되고 있다.
컨피규레이션이란 자바 가상머신과 코어 API들에 대한 명세를 의미하고, 프로파일은 그 상위의 클래스 라이브러리, 즉 표준 API 집합에 대한 명세를 의미한다. 이러한 개념적인 분할이 필요한 이유는 메모리와 CPU등의 크기와 성능이라는 측면에서의 요구사항이 동일한 디바이스들의 집합을 하나로 묶어서 컨피규레이션을 정의하고, 이러한 컨피규레이션을 바탕으로 각 디바이스들의 기능, 혹은 버티컬 시장의 요구사항에 맞추어 프로파일을 정의함으로써, 플랫폼의 통일성과 다양성을 동시에 만족시킬 수 있기 때문이다.
- JavaScript/2011년스터디/JSON-js분석 . . . . 2 matches
* str함수 내에서 object, object array등을 처리할때 재귀적으로 들여쓰기를 처리해준다. 디테일이 살아있어
* parse함수를 못 봤다. 다음 시간에..
- JavaStudy2003/세번째수업 . . . . 2 matches
* 오버로딩 - C++에서 cin을 cin.get(), cin.get(ch), cin.get(ch,50) 이렇게 쓰는 것처럼 같은 이름의 함수로 비슷한 기능의 역할을 하는 함수들을 만들었다.
- JavaStudy2004 . . . . 2 matches
* [JavaStudy2004/클래스]
* [JavaStudy2004/클래스상속]
- JollyJumpers/임인택3 . . . . 2 matches
위의 코드에 다음과 같이 메시지를 받는 함수를 작성하면, 이 함수를 생성하고 메시지로 리스트를 전달하면 똑같이 이용할 수 있다.
- JustDoIt . . . . 2 matches
== 멤버 ==
* 하욱주 - 우리 최고 핵심 정예 멤버. 한마디로 '주춧돌'
- LinkedList/세연 . . . . 2 matches
//스택의 처음을 가르킨는 포인터
//처음을 가르키는 포인터를 초기화
- NUnit/C#예제 . . . . 2 matches
1. C# 관련 프로젝트를 만든다. (예제에는 클래스라이브러리)
1. 테스트 하고자 원하는 Method 에는 Test를, 속한 클래스에는 TestFixture Attribute를 붙인다.
- NumberBaseballGame/jeppy . . . . 2 matches
void make_number(char *p); /* 임의 세자리 숫자를 생성하는 함수 */
void check_num(char *dest, char *src); /* 입력된 숫자와 비밀숫자를 맞춰보는 함수 */
- OOD세미나 . . . . 2 matches
* 원래 정말 철저하게 절차지향적으로 프로그래밍 하던 사람이라... 오늘 내용이 좀 어려웠습니다;; 특히 그냥 들을때는 이해하면서 넘어가도, 실제 프로그래밍을 하려니까 막막하더라구요. 마지막 실습때 질문도 했었는데, 형은 if문 안에서 Comparer 객체를 선언해서, equals 함수를 사용하라고 하셨는데, 전 if문 안에서 객체를 생성할 생각조차 하지 못했었거든요. 그저 주어진 정보만 가지고, 반복문을 돌릴 생각뿐이었죠; 그런데 집으로 돌아오면서 생각해봤는데, 제가 짠대로 하면 '''“단일 변화로 인한 수정 사항을 예측 가능한 범위 내에 집중시켜라.”''' 라는 말과는 거리가 한 참 멀어지더라구요;; 예측은 가능한데 예측범위가 프로그램 소스 코드 전~부 라는거죠. 덕분에 "아, 정말 이런거 때문에 OOP를 하라는 거구나" 라는걸 알게 되었습니다 ㅋㅋ
get과 set을 사용하면 메인에서 그 자료형이 뭔지 알고 있는 거니까 변경시에 같이 변경해야 하므로 사용을 자제하는 건가요? 다른 클래스에서 private로 선언한 거를 메인에서 접근하기 위해 get과 set을 사용하는 거 같은데, 그럴거면 private로 왜 선언하는 건지 의문을 작년에 가졌...는데 여전히 모르는..;ㅅ; 우문(뭔가 질문하면서도 이상해서..;)현답을 기대합니다 ㅎ; - [강소현]
- OurMajorLangIsCAndCPlusPlus/locale.h . . . . 2 matches
== 함수 ==
|| 함수 || 설명 ||
- OurMajorLangIsCAndCPlusPlus/math.h . . . . 2 matches
== 함수 (FUNCTIONS) ==
|| 함수명(Ascii) || 내용 ||
- OurMajorLangIsCAndCPlusPlus/signal.h . . . . 2 matches
=== 함수 목록 ===
|| int __cdecl raise(int) || 이 함수를 호출한 프로시져에 첫번째 인자에 시그널번호에 해당하는 시그널을 보낸다. 실패하면 0이 아닌값을 리턴하는데, 오직 유효하지 않은 시그널 번호에서만 실패하게 된다. ||
- ProgrammingPartyAfterwords . . . . 2 matches
요구분석을 마치고 디자인을 하기로 한 시간이 되었기에 팀원들은 한 테이블에 모였다. 그리곤 CRC 카드를 이용해서 디자인에 들어가기 시작했다. 암묵적으로 ["구근"]님이 ZP#2의 무게중심이 되어서 디자인 회의가 시작되었다. 어떤 클래스들이 필요한가, 어떤 이벤트를 누가 발생시키고 그 이벤트를 누가 알아야하는가에 대한 이야기가 오가는 가운데 ["데기"]는 문제파악 조차 제대로 안되어서 무척 혼란스러웠다. 서로 요구분석 이해에 차이가 있었음에도 불구하고 디자인은 계속 진행되었고, 시간은 계속 흐르고 흘러서 구현을 시작하기로 한 시간을 훌쩍 넘어버렸다.
멘터인 1002는 '저렇게 하면 나중에 main 함수 어떻게 만들까.. OO Style 이라면 main 루틴 부분이 좀 짧긴 하겠지만, C 라면 좀 힘들지 않을까' 라고 생각, 5시가 가까워지는 4시 20분쯤에 각 모듈 부분을 통합할것을 제안 했다. 통합 중간중 의견 조율을 하는 중간에 ZP#2 멘터인 김창준씨는 두 팀으로 나누어졌을 때 서로 엇갈려서도 Pair 를 바꿔보도록 제안, Moa 의 두 팀은 한명씩 서로 바꾸어보기도 하며 일을 진행해 나갔다.
- ProgrammingPearls/Column3 . . . . 2 matches
* 잘 지어진 변수 이름 -> 함수와 데이터의 분리 -> OOP
* 복잡한 구조는 캡슐화를 하자 -> 클래스
- ProgrammingPearls/Column4 . . . . 2 matches
* Functions : precondition - 함수 시작 전에 보장되어야 할 조건 -과 postcondition - 함수 끝날때에 보장되어야 할 조건 -을 명시해준다.(...) 이러한 방법을 "Programming by contract"라 한다.
- ProgrammingPearls/Column5 . . . . 2 matches
* 또한 Binary Search의 가장 중요한 전제 조건인 sort되었는가? 체크해주는 함수를 앞에다 써준다. 이 경우에는 search를 한번만 해주면 n + lg n 이렇게 될것이다. 하지만 sort되었는가 체크하는 함수는 한번만 해주면 되므로, search를 한 몇천,몇만번 돌리면 결국 lg n 에 수렴할 것이다.
- ProjectZephyrus/ClientJourney . . . . 2 matches
* 소프트웨어 개발이 공장스타일이 될 수 없는 이유를 하나 든다고 한다면 개발중 개발자가 계속 학습을 해나간다는 점에 있지 않을까 한다. 처음부터 끝까지 모든 것을 다 예상하고 개발할 수 는 없을것이니. (필요한 라이브러리가 무엇인지, 실제 그 라이브러리의 장단점이 무엇인지, 어떻게 사용하면 바로 알수 없는 버그가 되어버리는지 등등. 뭐 큰 소프트웨어일 경우 이것을 다 예측해야 한다라고 하면 할말없지만. 이것도 비용을 고려해서 처신해야하겠지. Cost Estimate 자체가 Cost 가 드는것일거니.) 암튼 아쉬운건 중간에 디자인이 바뀌었을때 (실제로 처음 디자인의 클래스들을 몇개 뺀것도 있고, 인터페이스만 맞춰본 것들도 있고 그러함) 바쁜 사람들이 참석을 하지 못해서 처음부터 설명해야 하는 경우이다.
* TDD 가 아니였다는 점은 추후 모듈간 Interface 를 결정할때 골치가 아파진다. 중간코드에 적용하기 뭐해서 궁여지책으로 Main 함수를 hard coding 한뒤 ["Refactoring"] 을 하는 스타일로 하긴 하지만, TDD 만큼 Interface가 깔끔하게 나오질 않는다고 생각. 차라리 조금씩이라도 UnitTest 코드를 붙이는게 나을것 같긴 하다. 하지만, 마감이 2일인 관계로. -_- 스펙 완료뒤 고려하던지, 아니면 처음부터 TDD를 염두해두고 하던지. 중요한건 모듈자체보다 모듈을 이용하는 Client 의 관점이다.
- ProjectZephyrus/Thread . . . . 2 matches
* ''Database Connection Pool 을 사용하던 하지 않던, DB 자원을 얻어오는 부분을 하나의 end point에서 처리하세요. 처음부터 이를 고려하지 않을 경우, '''*.java''' 에서 Database Connection을 생성하고, 사용하는 코드를 머지않아 보게 될겁니다. 이는 정말 최악입니다. pool을 쓰다가 쓰지 않게 될 경우는?다시 pool을 써야 할 경우는? 더 좋은 방법은 interface를 잘 정의해서 사용하고, 실제 DB 작업을 하는 클래스는 Factory 를 통해 생성하는게 좋습니다. 어떤 방식으로 DB를 다루던 간에 위에서 보기엔 항상 같아야 하죠. --이선우 [[BR]]
Database 관련 부분 아니라 팀 프로젝트시 고려해야 할 사항은 꽤 됩니다. SuccessfulProject 를 위해서 고려해야 할 사항은 어떤게 있을까요? 자세한 내용은 차후 정리해서 쓰기로 하고, 하나 이야기 하고 싶은건 최대한 '''중복'''을 피하도록 하세요. 특히나, 한참 대화를 하지 않고 있다보면 같은 일을 하는 utility성 클래스들을 모두가 하나씩 지니고 있을겁니다.
- PyIde/SketchBook . . . . 2 matches
하지만, 손가락 동선의 경우 - ctrl + O 를 누르고 바로 메소드 이동을 한다. 일반 이동도 메소드 중간 이동은 CTRL +커서키. (이는 VIM 에서의 W, B) 위/아래는 커서키. 클래스로의 이동은 CTRL+SHIFT+T. Source Folding 도 주로 Outliner 에 의한 네비게이팅을 이용한다면 별로 쓸 일이 없다. 보통 의미를 두고 하는 행동들은 클래스나 메소드들 단위의 이동이므로, 그 밑의 구현 코드들에 대해 깊게 보지 않는다. (구현코드들에 대해 깊게 보는 경우가 생긴다면 십중팔구 Long Method 상황일것이다.)
- RandomWalk2/상규 . . . . 2 matches
// 메인 함수
// Walk 하는 함수
- RealTimeOperatingSystemExam2006_2 . . . . 2 matches
c) OSMemCreate 관련 한문제. 함수 바디를 쓰라는건지, 함수호출부분을 작성하라는것인지는 정확히 기억안남.
- STLErrorDecryptor . . . . 2 matches
VC++를 가지고 STL 프로그래밍을 하시는 분들이 가장 많이 느끼는 불편함(어느 플랫폼이나 마찬가지이지만)중 하나가 바로 "'''에러 메시지에 나타나는 STL 컴포넌트가 무엇인지 도통 모르겠다'''"라는 점일 겁니다. 이는 컴파일러가 STL 템플릿을 인스턴스화할 때 타입 매개 변수가 모두 포함된 상태로 전체 이름을 써 버리기 때문에 STL 책에 나오지도 않는 클래스 이름과 템플릿 이름 등이 마구 튀어나옴은 물론이거니와, 인스턴스화한 클래스 이름 자체가 엄청나게 길어져서, 코드 한 줄에 대한 에러 메시지가 수십 여 줄까지 만들어지는 현상이 일어나지요.
- Slurpys/곽세환 . . . . 2 matches
* 예전같으면 일일이 만들었을 함수들을 그냥 string 함수로 해결
- StarCraft . . . . 2 matches
내가 1학년때 C++을 배우면서 클래스를 이해하는데 상당한 어려움을 느꼈다.
그때 한 선배(오기정)가 클래스에 대해 설명하면서 스타크래프트를 예로 들어주셨고 나를 비롯한 많은 사람들이
- TAOCP/BasicConcepts . . . . 2 matches
f는 Q에서 Q 자기자신으로 가는 함수이다
두 순열을 곱한다. (합성함수와 비슷하다.)
- TddWithWebPresentation . . . . 2 matches
즉, 일종의 Template Method 의 형태로서 Testable 하기 편한 ViewPageAction 의 서브클래스를 만들었다. 어차피 중요한것은 해당 표현 부분이 잘 호출되느냐이므로, 이에 대해서는 서브클래스로서 텍스트를 비교했다.
- TeachYourselfProgrammingInTenYears . . . . 2 matches
적어도 반다스의 프로그램 언어를 배우는 것.그 중의 하나는 클래스 추상을 서포트하는 것(예를 들면 Java 나 C++), 하나는 함수 추상을 서포트하는 것(예를 들면 Lisp 나 ML), 하나는 구문 추상을 서포트하는 것(예를 들면 Lisp), 하나는 선언적 기술을 서포트하는 것(예를 들면 Prolog 나 C++ 템플릿), 하나는 coroutine 를 서포트하는 것(Icon 나 Scheme), 그리고 하나는 병렬처리를 서포트하는 것(예를 들면 Sisal)인 것.
- TellVsAsk . . . . 2 matches
만일 당신이 각 클래스들의 책임에 기반한 디자인으로 시작했다면 이러한 함정에 탈출하는 일은 쉽다.
만약 그들의 책임(의미)에 기반해서 클래스 설계를 시작한다면 이런한 덫에서 벗어나기에 더 쉽다.
- TkinterProgramming/HelloWorld . . . . 2 matches
# 함수 기반
# 클래스 기반
- ToyProblems . . . . 2 matches
- 창준 - Higher Order Programming과 로우레벨에서의 설명(예컨대 단순한 함수 포인터로 설명하는 것)의 차이는 미묘하고, 또 크다. 동사(달리다)를 명사(달림)의 품 안에 넣는 것이다. 이 사고에서 엄청난 차이가 생길 수 있다.
- VMWare/OSImplementationTest . . . . 2 matches
읽어서 특정 메모리 번지에 로드한 후 그 시작 함수 (엔트리 포인트 함수)로 점프하게
- XpQuestion . . . . 2 matches
- ["1002"] 가 ProjectPrometheus 를 할때엔 거의 전체 작업을 Pair로 진행했다. Integration 비용이 전혀 들지 않았다. (두명이 멤버였으니; 당근!) 그리고 초기 소스와 지금 소스중 초기 모습이 남아있는 부분을 보면 '젠장. 왜 이렇게 짠거야? 이런 허접한...' 이다. 중복된 부분도 많고, 매직넘버도 남아있고, 처음엔 쓸거라 생각했던 일종의 어뎁터 역할을 하는 클래스는 오히려 일만 복잡하게 만들고 등등.
- ZeroPageServer/Log . . . . 2 matches
* JSP에서 자바빈을 써야하는데 WEB-INF에 classes에 클래스를 넣을수가 없어서그러는데 어떻게 쓸수 있게 해주세요. --["광식"]
''간단한 resin log analyzer를 만들어두었습니다. admin 안쪽 RLA.jsp로 확인바랍니다. 참, resin이 root 계정으로 동작하던데, 권한을 바꾸길 바랍니다. (권한을 바꿔줄때, 그 부산물 - jsp가 컴파일된 자바 소스나 클래스등 - 도 함께 권한을 바꿔줘야 합니다.)''
- [Lovely]boy^_^/USACO/WhatTimeIsIt? . . . . 2 matches
* 좀 잡다한 함수가 마니 들어갔군..
* 자주 만들어서 쓰는 함수는 라이브러리화를 해야겠다
- code regulation . . . . 2 matches
== 함수 ==
== 클래스 ==
- django . . . . 2 matches
* [http://www.mercurytide.com/knowledge/white-papers/django-full-text-search] : Model 의 Object 에 대한 함수들 사용방법
* [http://www.b-list.org/weblog/2006/06/13/how-django-processes-request] : Template 에서의 변수 참조에 대한 설명. 필수!!, 리스트나, 맵, 함수등에 접근하는 방법
- html5/drag-and-drop . . . . 2 matches
* 드래그 중 마우스 포인터가 요소와 겹치는 순간 호출되는 이벤트이다.
* 드래그 중 마우스 포인터가 요소 위를 가로지를때 단속적으로 발생하는 이벤트이다.
- html5/web-workers . . . . 2 matches
* 지역변수, 지역함수이므로 외부에서 호출 불가!
// 전역함수 postMessage 사용
- whiteblue/MyTermProjectForClass . . . . 2 matches
== 클래스 입력 ==
=== 메인 함수 ===
- 겨울방학프로젝트/2005 . . . . 2 matches
|| [AI오목컨테스트2005] || 각자 작성한 AI 오목끼리 대결, 현재 현태, 상협이 만든 두개가 있고 [MFCStudy_2005_2_야매] 스터디 멤버들이 이어서 만들거라 기대함 || 상협 현태 태훈 민경 ||
|| Blog || PHP로 SQL로, 간단하게 기본기능 -> JSP || 예전 그 멤버 + ||
- 경시대회준비반/BigInteger . . . . 2 matches
C++ 용 BigInteger 클래스로 거의 모든 연산을 지원한다. UVA 사이트의 구식(?) 컴파일러에도 문제없이 통과할 뿐 아니라, 성능또한 훌륭하다. 고정도 정수 연산을 하는 문제의 경우, 고정도 연산을 하는 라이브러리를 본인이 직접 짜거나, 이 클래스를 이용하면 된다. 몇 일동안 삽질한 결과 후자가 낫다는 판단이 선다. 되게 잘 짜여진 코드다. 시간 내서 분석해봐야 겠다.
- 고한종/십자가돌리기 . . . . 2 matches
이 구조가 반복 되는데 이걸 함수로 선언 할 순 없을까?
* 함수선언 + for문으로 하는데 거의 성공했다. (숫자가 어려워서 *로 도전중이다.)
- 그래픽스세미나/3주차 . . . . 2 matches
* 벡터 클래스 만들기
최태호의 벡터 클래스 입니다. 참고 하세요.
- 김재현 . . . . 2 matches
------포인터 실습-----------
포인터에 대한 이해가 아직 부족해서 스스로 코드를 짜진 못하고,교수님이 올리신
- 김태진/Search . . . . 2 matches
봉봉교수님이 내주신 연습문제에는 하나밖에 찾을 수 없는 구조인데, 함수에 check라는 static variable을 추가해서 그 함수가 호출되었을때 처음 찾은 값 다음부터 탐색하도록 하였습니다. thanks to. 힌트를 준 진경군.
- 김희성/MTFREADER . . . . 2 matches
int LastErrorCode(); //최근에 일어난 클래스 내부의 에러를 반환한다.
point=*((unsigned short*)((unsigned char*)$MFT+20));//Offset으로 포인터 이동
- 데블스캠프2002/Afterwords . . . . 2 matches
* 피곤 했다. ㅠㅜ, 그리고 데블스캠프가 내가 보기에는 괜찮았던거 같다. 내가 1학년때 이런 캠프가 있었다면 지금 보다 더 나은 내가 있었을지도 모른다는 생각도 들었다. 그리고 기초가 부족했던 나도 데블스 캠프를 통해서 몰랐던거 많이 배웠다. ㅡㅡ;, 특히 지금에서야 말하지만 그때 이중 포인터는 나도 한번도 안써봤고 생각도 안해 봤던 것인데 그것을 신입 회원 들에게 설명을 해줬다. ㅠㅜ 아 찔린다. 그런데 역시 설명하는 입장이 되니깐 이해가 더 팍팍 되는거 같다. 긴장을 해서인지(아마 이중 포인터 설명 나올때부터 긴장해서 듣었는지도 모른다. 나중에 그것을 설명해줘야 할 입장이 될테니..) 써본적도 없었지만 마치 많이 써본것 처럼 설명을 해줬다. 그래도 틀리게는 설명 안해준거 같다. (이게 과외의 노하우 일지도.. 위급한 상황에서는 인간의 능력은 한없이 향상되는거 같다.) 음, 하여튼 데블스 캠프때문에 집에도 늦게 내려가고 기숙사도 빠져서 기숙사에서 잔소리좀 듣었지만, 나에게는 좋은 경험이었다. - 상협
- 데블스캠프2006/월요일/연습문제/웹서버작성/변형진 . . . . 2 matches
* 내가 PHP 도 약간 해보고, JSP 나 Java 도 약간 해봤서 대충 심정을 알듯.. 나도 JSP랑 Java 써서 이번에 DB 프로젝트 개발 해보기전에는 웹에서는 PHP로 짜는게 가장 편하게 느껴졌었거든. 그래서 DB 프로젝트도 웹은 PHP 응용은 Java 이렇게 해 나갈려고 했는데 PHP가 Oracle 지원은 버전 5.x 부터 되서 걍 Jsp로 하게 됐지. 둘다 해본 소감은 언어적인 면에서는 뭐 PHP로 하나 Jsp로 하나 별 상관이 없는거 같고, 다만 결정 적인것은 개발환경및 Jsp 에서는 java 클래스를 가져다가 사용할수 있다는 점이었스. Jsp에서 하면 Junit 을 사용하여 Unit 테스트를 하면서 작성하기 수월했고, 또한 디버깅 환경도 Visual Studio 에서 디버깅 하듯이 웹을 한다는게 정말 좋았지. 또 java 클래스를 가져다가 사용할 수 있어서 여러 오픈 소스를 활용하기에도 좋고.(예를 들면 Lucene 같은 자바로 만든 오픈소스 검색 엔진..). 특히 Eclipse 라는 강력한 개발 환경이 있어서 Visual Studio 보다 더 개발이 수월할 정도..
- 데블스캠프2006/월요일/함수/문제풀이/김준석 . . . . 2 matches
== 실미도 함수 만들기 (몸통은 자유) ==
[데블스캠프2006/월요일/함수/문제풀이]
- 데블스캠프2006/준비/화요일 . . . . 2 matches
구조체, 파일 입출력, 포인터(메모리), 디버깅
|| 19:30 ~ 21:00 || 포인터 + 예제 || 아영 선호 ||
- 데블스캠프2009/화요일후기 . . . . 2 matches
* '''서민관''' - 자바로 로봇을 움직이는 시간이었는데, 역시 코드를 짜서 그것이 무언가를 하는 것을 볼 수 있다는 것은 꽤나 괜찮은 경험이었습니다. 좀 아쉬웠던 점은 어떤 변수나 함수가 있는지를 확실하게 몰라서 괜찮은 물건은 만들지 못 했다는 점이네요. 그리고 제 탱크가 너무 약했다는 점하고...
* '''서민관''' - 개인적으로 이번 화요일 수업에서 가장 마음에 드는 수업이었습니다. 이런 식으로 시간의 흐름에 따라서 추상화 개념이 발전하는 모습을 보고 있으니 참 대단하다는 생각이 들었습니다. 그리고 반복을 줄이기 위한 방법들(ex - 반복문, 자료형, class) 각각이 무엇을 위해서 만들어졌는지를 알아보는 것으로 평소에 아무 생각 없이 썼던 것을 다시 한 번 생각해 보는 기회가 되었습니다. 그리고 수업을 듣고 나니 추상화를 통해서 긴 프로그램 코드를 각각의 함수로 쪼개는 방법이 왜 중요한지도 조금 더 잘 알겠네요.
- 데블스캠프2010/다섯째날/ObjectCraft . . . . 2 matches
2. 구조체에서 클래스로
5. 상속과 가상함수
- 데블스캠프2011/넷째날/Git/권순의 . . . . 2 matches
// 커맨드를 비교하여 적절한 커맨드 함수를 받는다.
// 커맨드 함수 호출
- 데블스캠프2011/셋째날/String만들기/서지혜 . . . . 2 matches
C++로 Java의 String 클래스 구현하기
* 메인함수
- 데블스캠프2012 . . . . 2 matches
|| 1 |||| [:데블스캠프2012/첫째날/배웠는데도모르는C 배웠는데도 모르는 C] |||| 웹 서비스구축 전반에 관한 이야기 |||| 점심? |||| |||| [http://zeropage.org/seminar/62072 재귀함수를 이용한 문제 해결] |||| [http://zeropage.org/seminar/62080 C로배우는 C++의원리] || 8 ||
|| 2 |||| 배웠는데도 모르는 C |||| 웹 서비스구축 전반에 관한 이야기 |||| [http://zeropage.org/seminar/62041 소켓, 웹, OpenAPI] |||| |||| 재귀함수를 이용한 문제 해결 |||| C로배우는 C++의원리 || 9 ||
- 데블스캠프2012/셋째날/후기 . . . . 2 matches
* [서민관] - 새삼 드는 생각이지만 황현은 전문적인 지식이나 프레젠테이션 솜씨나 어디 하나 빠질 데가 없는 것 같네요. 몇몇 1학년들이 몰라서 대답하기 곤란했던 개념적인 용어들도 정확하든 정확하지 않든(드립이든) 뚜렷하고 날카롭게 가르고 가는 느낌은 들으면서 상당히 감탄했습니다. Block이라... 개인적으로는 비표준이라는 단어가 정말 찝찝하긴 한데, 표준으로 정립되면 좋겠다는 생각이 듭니다. C에도 함수 객체가 들어오면 좋겠죠.
* [안혁준] - 땜방용티가 많이 났나요? 사실 canvas는 아무리 생각해도 설계를 잘못한것 같아요. 도무지 API들이 바로바로 떠오르지 않아요. 거기다가 왠지 함수 일것 같은데 문자열로 넣어줘야 하는 부분들도 있고요. 딱히 canvas는 아니지만 [https://developer.mozilla.org/ko/demos HTML5을 활용한 예제]를 보면 신선한 느낌일듯 하네요.
- 데블스캠프2012/첫째날/배웠는데도모르는C . . . . 2 matches
* 간단한 일정 관리 프로그램(?) 만들기로 배워보는 구조체, 함수 포인터....
- 레밍즈프로젝트 . . . . 2 matches
|| [레밍즈프로젝트/유주호] || 프레임 부분 프로토타이핑, 레밍 클래스 제작 ||
|| [레밍즈프로젝트/박진하] || 자료구조 프로토 타이핑, 맵 클래스 제작 ||
- 몸짱프로젝트/BinarySearchTree . . . . 2 matches
* 할일 : Delete 함수 리펙토링하기, parent 포인터 없애기
- 몸짱프로젝트/CrossReference . . . . 2 matches
// Cross Reference를 작성하기 위한 함수
string toString(int aNum) // 줄수를 string 객체로 바꾸는 함수
- 문자반대출력/Microsoft . . . . 2 matches
n byte 문자를 뒤집기 위해 또 다른 n byte 의 버퍼가 필요하지 않군요. 1 byte 의 ch 변수와 포인터 두개면 되겠군요. '포인터 연산'에 익숙해지면 좋을 것 같네요. --[이덕준]
- 문자반대출력/조현태 . . . . 2 matches
클래스도 써봤는데.. 본인이 보기에는 이쁘지만..^^ 남이 보기에는 영~~(아직 클래스를 못배웠다..ㅠ.ㅜ 2학기가 되어야 할텐데..ㅠ.ㅜ)
- 문자반대출력/허아영 . . . . 2 matches
그리고 char 함수를 처음 사용해서. 처음에 에러도 많이 났다.
비베에서는 한글이나 일본어처럼 2바이트를 사용하는 글자의 경우 알아서-_- 판단하고 한 글자 단위로 읽는 함수가 있긴 한데 씨에서는 알파벳과 같은 1바이트 문자인지 아니면 2바이트 문자인지를 어떻게 구분해야 할까요? -태훈 [zyint]
- 반복문자열/이강희 . . . . 2 matches
[반복문자열/허아영]을 읽어보세요. 함수를 이해하는데 도움이 되는 내용이 들어있습니다. 함수가 무엇일까요? -- [Leonardong]
- 비행기게임 . . . . 2 matches
* 행동 함수 만들기, 적기 미사일 나가게 하기
* 충돌 모듈 -> 이것이 좀 복잡할거라고 생각했는데 pygame에서 처리하는 함수 있음 ㅡㅡ;
- 비행기게임/진행상황 . . . . 2 matches
* 7.27 : 적기의 행동 패턴 함수 작성, 행동 패턴은 파일에서 읽어 들임.. 행동패턴 맘대로 추가 가능.
|| 8.2 || 인수, 상협, 재동 || 클래스 디자인 ||
- 빵페이지/숫자야구 . . . . 2 matches
game(); // 게임함수 시작
new_game(); // 정확히 맞췄을 경우 new_game함수로 이동
- 상협/Diary/7월 . . . . 2 matches
|| ["비행기게임"] || 행동 클래스 30% 정도 하기 || 0% || 불행히도 ||
|| ["비행기게임"] || 행동 클래스 || 100% || 오케. ||
- 새싹교실/2011/學高 . . . . 2 matches
* [김세영]: 함수 전까지는 좀 쉬웠는데 함수로 넘어오니까 난이도가 높아진 것 같다.
- 새싹교실/2011/學高/8회차 . . . . 2 matches
* 컴파일은 안 해봤지만 함수 원형 선언 시 매개변수의 타입은 왜 써주지 않았는지 궁금하네요. 받을 때는 num으로 받고 쓸 때는 n으로 쓴 것도; 그리고 전역 변수를 안 써도 리턴 값을 통해 카운트 충분히 할 수 있을 것 같은데... - [김수경]
* 음... 헤더는 제가 실수한거구요. 하노이의 탑을 짤 때 제대로 짰는지 확인해보라는 의미로 count를 넣었기 때문에 굳이 함수의 형태를 건들기보단 전역변수를 임시로 선언해서 쓰는것이 더 좋을 것 같아서 이렇게 작성했습니다. - [윤종하]
- 새싹교실/2011/무전취식/레벨10 . . . . 2 matches
* strlen()함수의 사용에 대해 알아봤죠
// 분리된 단어 출력 함수
- 새싹교실/2011/무전취식/레벨3 . . . . 2 matches
* printf()와 scanf()함수의 쓰임에 대해 말해주었습니다. %c %d %l %f %%등등.
- 함수에 대해 알아볼것입니다.
- 새싹교실/2011/앞반뒷반그리고App반 . . . . 2 matches
* 오늘은 포인터를 배웠어요. ********별-. 선언할 때 int *a;로 선언하게 되면 *a는 a의 주소에 있는 값을 나타내는거였지요. 음.. 하다가 현 형이 하던 프로젝트에 잠깐 지워놓고 예시를 들었다가 xcode를 끄는 바람에 소스가 날라가버렸지요.... 포인터가 있으면 지정된 크기보다 큰 용량의 자료도 불러오기 쉽다는 것도 배웠구요. 아무튼 유용하게 쓸 수 있을거 같아요 -[김태진]
- 새싹교실/2012/아무거나/3회차 . . . . 2 matches
* 함수(function)와 프로시저(procedure)
자릿수들을 나누는 것. 그것들을 더하는 것,함수를 만들어서 쓰는 것, 실행의 결과를 다른 파일로 출력하는 것도 배웠는데 몇 시간 지나니까 또 까먹었다. 헐ㅋ. 난 금붕어인가보다. 운지↓↓
- 새싹교실/2012/열반/120604 . . . . 2 matches
* 정수 n과 k를 입력 받아서 n의 k승을 반환하는 함수를 작성하세요.
* 어떤 정수를 저장하는 변수의 주소를 넘겨서, 그 값을 k승하는 함수를 작성하세요.
- 새싹교실/2012/절반/중간고사전 . . . . 2 matches
*함수 여러가지 썼을때 순서
* 함수들 문법 정리한것
- 새싹교실/2013/라이히스아우토반/7회차 . . . . 2 matches
* 포인터에 대해 설명을 들었죠.
반성하는 태도를 가져야 하겠지만, 안타깝게도 앞으로도 수업준비는 잘 못해 갈 것 같다. 애들이 남은 흥미를 다 잃어버리기 전에 적어도 구조체랑 함수 만드는 법, 파일 입출력은 가르쳐야 할텐데...
- 새싹교실/2013/록구록구/10회차 . . . . 2 matches
* 포인터 기초
* 포인터 기초
- 새싹교실/2013/양반/6회차 . . . . 2 matches
함수에 대한 이해가 증진되었음 n! nCr을 짤수 있음.
재귀함수를 잘 쓸 수 있을것 같다.
- 서지혜 . . . . 2 matches
* 계산기니까 역시 함수형 언어를 쓰면 좋겠네!
* [java/reflection] - java의 classLoader와 reflection을 이용해 외부 클래스 메소드 호출하는 법
- 수학의정석 . . . . 2 matches
(프로그램수행) // 함수들을 수행
제가 알기론 clock() 함수가 리턴하는 값은 프로그램이 시작된 이후로 경과한 CPU 클럭 수 이기 때문에 시스템마다 다르다고 알고 있습니다. 그래서 CLK_TCK로 나누어 초 단위로 바꾸어 비교를 하는것으로 알고있는데... 어떻게 생각하시는지...? --[상규]
- 숫자야구/조재화 . . . . 2 matches
랜덤함수 설명은 더욱 공부하면 더 좋을꺼 같네요.
#include <iostream> // 랜덤함수는 iostream에 포함되어 있습니다.
- 쓰레드에관한잡담 . . . . 2 matches
Linux에서 멀티 프로세스 개념인 fork()는 내부적으로 do_fork()란 Kernel 함수를 호출하며, do_fork()는 내부적으로 user thread인 POSIX기반의 Mutex를 사용한다.
함수가 실행되고 context switch가 일어나고 arg가 제대로 안바뀌는 것 같다.
- 열정적인리더패턴 . . . . 2 matches
'''열정을 갖고 솔선수범해서 스터디 그룹을 이끌어라. 사람들이 원하는 곳으로 만들고, 더 큰 커뮤니티에 참석하도록 초대하라. 자극이 되는 이벤트, 가상 공간 상에서의 대화로 멤버들에게 힘을 주고, 멤버들의 아이디어를 가까이서 수렴함으로써 지속적으로 그룹을 발전시킬 방법을 모색하라.'''
- 유정석 . . . . 2 matches
(배열과 포인터의 기초)-> 6월 10일(수) 수업시간 전까지 읽고 물어볼거 생각해오기
(동적 할당에 대해서) -> 포인터를 공부한 후에 공부해야 한다.
- 이승한/.vimrc . . . . 2 matches
"화면 하단에 함수 protoType을 보여줌
"전역변수/구조체/정의상수/함수정의를 추적해줍니다.
- 이승한/java . . . . 2 matches
클래스 관련 키워드 ; class, abstract, interface, extends, implements
사용 JOptionPane.함수들
- 이영호/기술문서 . . . . 2 matches
[http://bbs.kldp.org/viewtopic.php?t=24407] - Reference 에 의한 호출과 Pointer에 의한 호출 (결론: Reference는 포인터에 의해 구현되며 표현만 CallByValue 다.)
[http://bbs.kldp.org/viewtopic.php?t=48059] - struct POS의 memcmp와 if 의 성능비교 (결과 : 다루는 배열이나 구조체가 커질수록 memory계 함수가 빠르다.)
- 이영호/끄적끄적 . . . . 2 matches
// File에서 array로 바뀐 것을 읽어와 함수를 수행 하는 것을 count-1번 반복한다.
// 달라진곳은 save 포인터에 주소를 저장하고 다시 체크를 시작해 달라진곳이 나오면 자리를 교체한다.
- 이영호/문자열검색 . . . . 2 matches
출제자의 뜻이 strstr함수를 이용하는 것이 아니라
strstr, strcase, strspn등과 비슷한 함수를 제작하는 것이었다면 이 답은 틀렸다.
- 이영호/시스템프로그래밍과어셈블리어 . . . . 2 matches
몇몇 게임(카트라이더, 워록, 대항해시대 등등)의 프로그래머들이 Application 층만을 다룰줄 아는 무식한 프로그래머라는 것을 알았다. (특히, 워록의 프로그래머는 프로그래머라기 보다 코더에 가깝고 배운 것만 쓸 줄 아는 무식한 바보이다. 그 프로그래머는 개발자로서의 수명이 매우 짧을 것이다. 3년도 못가 짤리거나 혹은 워록이라는 게임이 사라질걸?) - (이 게임들은 코드를 숨기지 못하게 하는 방법도 모르는 모양이다. 이런식으로 게임들을 건들여 패치를 만들 수 있다. KartRider는 요즘에와서 debug를 불가능하게 해두고 실행 파일을 packing 한 모양이다. 뭐 그래도 많은 코드들을 따라가지 않고 ntdll.ZwTerminateProcess에 BreakPoint를 걸어 앞 함수를 건들이면 그만이지만.)
프로그래머라면 Code의 본질을 알아야한다. 그것을 이루는 것이 Assembly이다. 이것을 수행하지 않은 프로그래머는 프로그래머가 아니라 Coder이다. Assembly로 특정 함수를 따라다니며 실제로 익히는 방법은 MSDN에서 나와있는 것을 그대로 베끼는 것보다 현명할지 모른다. 프로그래밍은 배우는것이 아니라 직접 Code를 짜보는 것이다. MSDN을 보는 것과 debug로 따라 가보는 것은 그 차이가 크다.
- 인수/Smalltalk . . . . 2 matches
* 짜놓고 생각 : 이건 스몰토크프로그래밍이 아니다. C++/Java의 냄새가 너무 많이 나는것 같다. 부분부분을 좀더 간단하게 할 수 있을것 같기도 하다. 책을 더 봐야 할듯 싶다. 인스턴스 생성할때도 인자를 넘겨 받을 수 있을 텐데 잘 안된다.(지금 보니까 그렇게 하지 말라 한다. 대충 찾아보니 팩토리 메소드를 많이 쓰는것 같다. 또 클래스 메소드 만드는법 알아낼라고 줄기차게 삽질을 했다.--;) do라는 좋은게 있었군.
* 2차원 배열 클래스가 있었다. 레퍼런스를 잘 찾아보고 하자. 이제 조금 볼만하구나.
- 조영준/파스칼삼각형/이전버전 . . . . 2 matches
* PTriangle 클래스를 갈아 엎었습니다.
* PTriangle 클래스만 똑 떼서 파스칼 삼각형을 필요로 하는 다른 프로그램에서 쓸 수 있게 손을 봤습니다.
- 조현태/놀이/미스틱아츠 . . . . 2 matches
|| 2005.05.31 || 리펙토링, 함수를 세분화 하고 중복을 조금 줄였다. || [조현태] ||
|| 2005.06.17 || 화면 출력 알고리즘 변화, 포인터로 간단한 레이어 효과 가능 || [조현태] ||
- 중위수구하기/허아영 . . . . 2 matches
그리고 int search_middleNum(int *a, int *b, int *c) 이함수는 구지 포인터로 값을 넘겨받을 필요는 없지 않나..
- 진법바꾸기/허아영 . . . . 2 matches
그런데 말야.. 저기 두 번째 함수의 i 과 turn 은 정말로 전혀 다른게 없다고. 이름을 여러개로 해주고 싶었다면 포인터를 사용하거나 전처리문을 사용하는게 나을텐데.. 같은연산이 중복되서 일어나니까 오히려 햇갈린다고..ㅎㅎㅎ
- 책거꾸로읽기 . . . . 2 matches
방갈로르는 시 전역이 거대한 IT파크같다. 인터내셔널 테크놀로지 파크(ITP)에는 100여개가 넘는 첨단기업들이 둥지를 틀고 있다. 이곳에서 일하는 인원만도 1만2천여명에 이르고, 아메리카온라인멤버스, 제너럴모터스, IBM글로벌서비스등등 입주한 회사의 면면이 만만치 않다.
인도의 7학년(한국의 중학교 1학년) 수학교과서는 영국의 10학년 수준과 비슷하다. 12학년(한국의 고 3) 수학교과서를 서울시 교육청에 분석 의뢰하였더니 '''지금 한국의 보통 대학에서 가르치는 미분방정식이 나온다. 경제학 등에서 쓰이는 함수도 있다. 실용적인 내용이 많으면서 수준이 높다'''라는 평가가 나왔다. 십구단을 외우게 한다고 인도의 수학이 암기 위주인 것은 결코 아니다. 수를 셈하는 기초적인 계산능력을 암기를 통해 어렸을 때부터 키워놓고, 그걸 토대로 더 수준 높은 수학을 체득할 수 있게 하는 것이다.
- 최대공약수/남도연 . . . . 2 matches
저거~ 클래스가 화면에 출력해서 입력받고, 결과를 출력하는데..
화면 입출력은 메인에서 하고 클래스는 변수로 값을 넘겨받고 변수로 값을 넘겨주는게 좋지 않을까?
- 최소정수의합/송지훈 . . . . 2 matches
-> 파싱 에러, 즉 구문 에러가 나는 코드입니다. (<=) 함수가 어떤 전달인자를 받는지 알아보세요.
-> 그러고 보니 while 함수를 만들어서 써도 되겠다는 생각이..
- 코바용어정리 . . . . 2 matches
구현 객체가 ORB에 의해 제공되는 서비스를 이용하는 주된 방법은 객체 어댑터를 통하는 것이다. 객체 어댑터는 CORBA 라이브러리인데 ORB 코어 통신 서비스의 맨 위쪽에 위치하고 있으며 서버 객체를 대신하여 리퀘스트를 받아들인다. 객체 어댑터는 서버 객체를 인스턴스화하기 위한 실행 환경을 제공한다. 즉, 서버 객체에 리퀘스트를 전달하며 객체 ID를 부여하는 등의 작업을 하게 된다는 것이다. 또한, 객체 어댑터는 구현 저장소에 어댑터가 지원하는 클래스와 런타임 인스턴스를 등록한다. CORBA에서는 각 ORB가 기본 객체 어댑터(BOA)라 불리는 표준 어댑터를 지원하도록 규정한다. 하나의 서버가 여러 개의 객체 어댑터를 지원할 수 있다.
ORB 인터페이스는 애플리케이션에 중요한 지역 서비스에 대한 API들로 구성되어 있지 않다. 이것은 곧바로 ORB로 가는 인터페이스이고 모든 ORB들에 대해 동일하다.ORB 인터페이스는 객체 어댑터 또는 객체 인터페이스에 의존하지 않는다. 대부분의 ORB의 기능이 객체 어댑터, 스텁, 스켈레톤 또는 동적 호출 등을 통해서 제공되므로 몇몇 오퍼레이션만이 모든 객체들에 대해 공통이다. 공통 오퍼레이션에는 get_interface와 get_implementation 같은 함수가 포함되어 있는데, 이것들은 임의의 객체 레퍼런스에 작용하며 각각 인터페이스 저장소 객체와 구현 저장소 객체를 얻는 데 사용된다.
- 큰수찾아저장하기/허아영 . . . . 2 matches
추가: 시간이 많이 걸린 이유 - 역시나 배열을 함수화 하는 것에서, 새로운 방법이 없을까 궁리하다가,
각 기능별로 함수로 나누는건 좋은 생각인데 말야..^^ 그게 오히려 문제가 된것 같은 느낌이..ㅎㅎ
- 타도코코아CppStudy/0728 . . . . 2 matches
* 폴리모피즘, 가상함수, 템플릿 발표
== 가상함수와 다형성 예제 ==
- 토이/메일주소셀렉터/김정현 . . . . 2 matches
//메인클래스
// 파일처리 클래스
- 토이/숫자뒤집기/김정현 . . . . 2 matches
4.제일 뻘짓;; Arrays의 소트 함수를 이용. 배보다 배꼽이..
9. Collections 클래스를 이용
- 튜터링/2011/어셈블리언어 . . . . 2 matches
* 지난주에는 루프와 레지스터를 이용한 재귀함수까지 해 보았다.
* 이번에는 전역변수와 스택을 이용한 재귀함수를 구현해 본다.
- 튜터링/2013/Assembly . . . . 2 matches
* 재귀함수에 관해 써보고, n!을 재귀함수로 작성할 때 무엇을 고민해야하는지 써보자.
- 파스칼삼각형/강희경 . . . . 2 matches
void printArray(int *arr, int n); //각 행을 출력하는 함수
void copyArray(int *fArr, int *arr); //이전의 행을 임시저장하는 함수
- 프로그래밍십계명 . . . . 2 matches
6. 함수 안에서 매개 변수값은 결코 믿지 말지어다.
*컴파일러의 경고는 모두 켜 두어라. 경고는 곧 오류이니라. 오류를 알리는 함수의 결과를 확인하지 않는 우를 범하지 말지어다. 모든 파일 입출력과 모든 메모리 할당은 조만간 실패할 것이라.
- 프로그래밍잔치/ErrorMessage . . . . 2 matches
* 같은 시간, 창섭이와 상욱이는 "Hello World" 삑사리 내고 있었다. 컴파일 하면 클래스가 없댄다. 이래저래 암울한 우리 조의 분위기를 느낄 수 있었다.
* 끝나갈 무렵, 합칠떄가 왔다. 창섭군과 은지 누나가 한걸 가져와서 씌울라고 보니..(처음에는 쉬울줄 알았따. 내 메인 프레임에서 버튼을 누르면 창섭군과 은지 누나가 만든 전화번호부 프레임을 띄울 예정이었다.) 문제가 생겼다. 내껀 스윙이고, 창섭이네꺼는 AWT다.--; 스윙과 AWT 같이 쓰지 말라고 하는 말을 너무 많이 봐서.. 스윙으로 고치기 시작했다. ... shit. 함수가 다르자나.--; 이러면서 어떻게 어떻게 고치고 보니--; 메뉴가 가운데 달렸다. 석천이형의 도움을 받아서, 메뉴를 제 위치에 나오게 했다.
- 프로그래밍잔치/첫째날 . . . . 2 matches
* Java 은 메소드(함수, 프로시저)의 길이가 7줄을 넘으면 안된다. ; 기준
* Python 은 메소드(함수, 프로시저)의 길이가 7줄을 넘으면 안된다. line 기준
- 호너의법칙/박영창 . . . . 2 matches
horner_func 호너의 법칙을 재귀함수로 구현한다.
@return 호너함수의 재귀호출 값 + 호출 차수의 계수값
- 후기 . . . . 2 matches
함수형 언어 Haskell을 배우는 시간을 많이 가졌는데 참 재미있었다. 더욱 재미있는 것은 함수형 언어의 좋은 점이 다른 언어에도 녹아들 수 있다는 것이다. 수학에서 출발하는 개념이 실제로 쓰이도록 중간에서 다리 역할을 하고 있다. 수학이 프로그램 언어에 미치는 영향력을 볼 때 학부 때 컴퓨터 공학 대신에 수학을 전공해도 좋을 것 같다. 그게 안 된다면 대안언어축제라도 참가하면서 [성장]할 수 있어야 한다.
- 02_C++세미나/0523 . . . . 1 match
* 포인터와 동적할당을 이용한 Linked List
- 05학번만의C++Study/숙제제출1/조현태 . . . . 1 match
책은 아직 안샀고, 답은 함수를 추가했음 - [조현태]
- 1thPCinCAUCSE/ExtremePair전략 . . . . 1 match
* 저희 {{{~cpp Extreme Pair}}} 팀은 어떤 문제든 우선 소스를 기본적으로 밑에 형태로 시작했습니다. 그래서 입력과 출력이나 진행에는 전혀 신경 쓰지 않고 문제를 푸는 알고리즘(process() 함수 부분)에만 집중할 수 있었습니다.
- 2005/2학기프로젝트 . . . . 1 match
|| 프로젝트 || 멤버 ||
- 2010JavaScript/역전재판 . . . . 1 match
function changetext(){ // 글자가 나오는 text부분에 내용을 바꾸는 함수.
- 2학기자바스터디 . . . . 1 match
오히려 우리들이 더 게으르게 했죠 ㅡ.ㅡ;;; 많이 나가진 못했지만 그래도 개념적인 면(객체지향이나 클래스..)에서 자세히 설명해 주셨는데... 앞으로 도움이 많이 될것 같아요... 계속 공부하는 후배들이 남았다는것만 해도 큰 성과지요 ^^ -세환
- 2학기파이선스터디 . . . . 1 match
[2학기파이선스터디/함수]
- 2학기파이선스터디/문자열 . . . . 1 match
5. 멤버십 데스트(Membership Test) = in
- 3DAlca . . . . 1 match
|| 7.28 || 판이 움직일때 공이 맞으면 그 방향으로 속도 증가, 종단 속도 개념 추가, 벽돌을 쉽게 추가 하는 함수 생성, 벽돌과 공의 충돌 처리(60%정도, 약간의 버그가 있음) ||
- 3DGraphicsFoundation . . . . 1 match
* 수학함수 모듈 인터페이스 예제 - C style : ["3DGraphicsFoundation/MathLibraryTemplateExample"]
- 3D프로그래밍시작하기 . . . . 1 match
수학관련 라이브러리가 어느정도 모습을 갖추었으면, 이제 최초로 뭔가 돌아가는 것을 만들어 볼때입니다.. 일단은 최소한의 초기화와 실행 절차를 갖춘 프로그램을 만들어 놓도록 합니다. 화면에 무언가를 그리는 함수 같은 것은 쉽게 바꿔치기 할 수 있도록 해 놓는 것이 좋을 것입니다. 이런 뼈대 라이브러리의 형태에 대해 참조하실려면 OpenGL 관련 라이브러리중 하나인 glut 를 참조하심이 좋을 듯..
- 3N+1Problem/Leonardong . . . . 1 match
절대 쉽지 않은 문제였다. 아직 수행시간이 턱없이 길다. 사전형 멤버를 이용해 계산했던 부분은 저장해두어 다시 쓰도록 하였다. 답답하다. PsyCo라는 모듈을 새롭게 알알게되었다. --[Leonardong]
- 3N+1Problem/김회영 . . . . 1 match
int check(int n)//사이클의 길이를 리턴하는 함수
- 3rdPCinCAUCSE/J-sow전략 . . . . 1 match
* 아무리 급해도 필요한 기능은 함수로 묶어내야 한다고 느꼈습니다.
- 5인용C++스터디/다이얼로그박스 . . . . 1 match
대화상자(DialogBox)는 최상위 윈도우(top-level window)의 자식 윈도우로서 일반적으로 사용자로부터 정보를 얻기 위해 사용된다. Dialog는 사용자들이 파일을 선택하여 열기 등의 작업을 쉽게 하도록 합니다. 파일 작업을 쉽게하기 위해 제공하는 컴포넌트가 FileDialog클래스이다. Dialog는 Frame윈도우와 비슷한데 그 차이점을 살펴보면, 대화상자는 윈도우에 종속적이기 때문에 그 윈도우가 닫히면 대화상자도 따라서 같이 닫히게 된다는 것이다. 또한 윈도우를 최소화시켜도 대화상자는 사라지게 된다.
- 5인용C++스터디/비트맵 . . . . 1 match
"메모리 디바이스 콘텍스트"를 만들어서 BitBlt()나 StretchBlt()함수를 이용해서 메모리 디바이스에 있는 내용을 실제 디바이스 컨텍스트에 출력하는 방식을
- 5인용C++스터디/스택 . . . . 1 match
클래스를 이용하여 스택 구현하기.
- AM/알카노이드 . . . . 1 match
주석을 안 달아서 뭐가 뭔지 했갈릴까봐 간략히 설명합니다. 옛날 알카노이드 겜을 모델로 해서 거의 비슷해요. 일단 CVaus 클래스는 플레이어(움직이는 막대), CBrick은 벽돌, CPill은 알약, CBall은 공입니다. 아직 총알 나가는건 안되구요, 맵도 하나밖에 없어요. 다 깨도 그냥 똑같은 맵이 나와요. (참고로 알약중에 보라색이 다음판 넘기는거구, 빨간색은 총알쏠수 있는 상태임). 메뉴 기능되는것도 없고, 게임오버되면 다시 실행 해야되요 -세환
- APlusProject/PMPL . . . . 1 match
기본 설계서 순서를 바꿔야 할 듯. 보통 유즈 케이스 -> 시퀀스 -> 클래스 식으로 발전. --재동
- AcceleratedC++ . . . . 1 match
흠 처음 생각했던 것 보다 뒷 장의 내용이 좀 신선한 부분이 많다. 특히 14장에 Ptr 클래스는 정말로 신선하다. =.= C++로 프로그램을 짜면 이렇게 짤 수도 있구나 그런생각이;; - [eternalbleu]
- AdvancedJS . . . . 1 match
* 개인적으로 자바스크립트에 관심도 있고 해서 세미나를 들으러 왔다. 근데 가끔 웹페이지에서 자바스크립트 소스를 보면 C++이랑 비슷하게 쓰길래 그냥 비슷한 언어인가 싶었는데, 이번에 들어보면서 오히려 다른 점이 크게 부각된 느낌이다. C++이랑 비교해서 상속 방식도 다르고(프로토타입 상속) this의 개념도 좀 다르고 함수가 객체로 취급되고 등등. 물론 나중에 따로 책을 보면서 공부를 하긴 하겠지만 아마 이번에 배운 내용은 책에서 쉽게 찾아볼 수 없지 않을까 싶다. - [서민관]
- BasicJAVA2005 . . . . 1 match
- 그 파일에 public static void main(String[] args) 함수가 없어서 그런거 같은데... --선호
- Basic알고리즘/63빌딩 . . . . 1 match
코딩. 랜덤함수로 1 ~ 64 중의 수를 정한 다음, 자신의 방법을 통해서 찾아보자!
- Boost . . . . 1 match
* ["Boost/SmartPointer"] : Boost 에서 제공되는 스마트 포인터 사용 방법
- BoostLibrary . . . . 1 match
* [BoostLibrary/SmartPointer] : Boost 에서 제공되는 스마트 포인터 사용 방법
- BuildingParserWithJava . . . . 1 match
3학년 1학기 ProgrammingLanguageClass에서 숙제로 파서를 만들면서 한계를 많이 느꼈었다. 가장 큰 문제는 모든 흐름이 함수 호출을 따라 흘러간다다는 것이었다. 어느 곳이 잘못되었는지 알기가 어려웠기 때문에 찾는데 무척 애를 먹었다. 문법을 하나 추가하는 작업도 매번 오래 걸렸다. 그러다 보니 평가에 중요한 예외처리를 할 시간이 많지 않았다.
- BusSimulation/영창 . . . . 1 match
구현특이사항 : vector, map, algorithm 등 stl 클래스 사용
- BusSimulation/조현태 . . . . 1 match
C++이라서 그런지.. 내가그런건지는 몰라도 이상하게 클래스로만 자면 C로 작성하는 것 보다 시간이 더 걸리는듯..
- BusSimulation/태훈zyint . . . . 1 match
STL을 이용하고 함수별로 나누는 리팩토링이 필요하다 -ㅅ-
- C++3DGame . . . . 1 match
함수를 불러 쓰듯이. 케케.. ㅡㅡ; 어려워.. 해성이형한테 물어봐야지.. --; [[BR]]
- CPPStudy_2005_1/STL성적처리_1_class . . . . 1 match
* C++ 클래스를 너무 오래간만에 만들었더니 생성자에 리턴값이 없다는것 조차 까먹었다. 황당 -_-;
- CeeThreadProgramming . . . . 1 match
VS.NET에서도 함수이름을 인식하지 못하는 경우 프로젝트 세팅에서 MFC라이브러리를 사용하도록 해보세요.
- Class로 계산기 짜기 . . . . 1 match
상욱형이 짜주신 계산기 메인은 짧은데 클래스 길이가;;;
- ComposedMethod . . . . 1 match
메세지를 보내는 데에는 시간이 걸린다. 즉 함수 호출에는 오버헤드가 뒤따른다. 그러므로 최고의 속도를 내려면 하나의 메소드에 모든걸 때려넣을 수도 있다. 하지만? 댓가는 클것이다.(인력낭비, 비구조적 프로그램 양산)
- ComputerGraphicsClass/Exam2004_2 . . . . 1 match
스플라인 함수의 특징을 결정하는 세 가지 knot vector에 대해서 설명하시오
- ConnectingTheDots . . . . 1 match
소스코드를 보면 다음의 클래스들 관계가 MVP 이다.
- ConverterMethod . . . . 1 match
스몰토크의 String 클래스에 보면 asDate라는 메세지가 있다. 켄트벡이 경험한 정말 극단적인 경우에 하나의 객체마다 다른 형태로 변환시켜주는 Converter Method가 30개씩 있었다고 한다. 새로운 객체가 추가될때마다 저 30개의 메소드를 모두 추가해줘야만 했던 것이다.
- CppStudy_2002_1/과제1 . . . . 1 match
* 문제1번 : 여기서도 전역 변수를 많이 사용한거 같다. 이것은 피하는게 좋다. 여기서 함수가 호출한 갯수를 알아야 하는데 이때는 static 이라는 키워드를 사용하면 된다.
- CppStudy_2002_2/슈퍼마켓 . . . . 1 match
1. 클래스를 이용 (좀 더 체계적으로)
- CssMarket . . . . 1 match
|| /pub/upload/narsil.css || Upload:narsil.css || 마우스 포인터가 핵심(?) ||
- C언어정복/3월30일 . . . . 1 match
11. printf()와 scanf() 함수 이용 시연
- C언어정복/3월30일-숙제 . . . . 1 match
2. printf() 함수를 한 번만 사용하여 다음과 같이 4줄에 걸쳐서 표현되는 문자열을 출력하라.
- DataStructure/Tree . . . . 1 match
// 트리에 관한 함수들
- Delegation . . . . 1 match
스몰토크는 다중상속을 지원하지 않는다. A와 B의 속성을 모두 가지고 있는 객체를 표현하려면 어떻해야할까? 상속은 잠재적으로 오버헤드가 있다. 또한 복잡한 상속관계에서는 서브클래스의 단 하나의 메소드를 공부함에도 위에서 알아야 할게 너무 많다. 답은 '위임'이다. 일의 일부를 다른 객체에게로 위임하자.
- DesignPatternsAsAPathToConceptualIntegrity . . . . 1 match
오브젝트/클래스 디자인 위에 아키텍쳐의 존재
- DevPartner . . . . 1 match
d) 프로그램을 종료합니다. -> 세션 윈도우가 뜨면서 함수 호출 상황을 보고서로 만들어 줍니다.
- Direct3D . . . . 1 match
기본적인 클래스인 CD3DApplication 이 있고, 이것을 상속받은 CMyD3DApplication을 사용하여 하고싶은 일을 할 수 있다.
- Eclipse . . . . 1 match
||Ctrl+1||Quick Fix, 잘못 된 부분에 대하여 권장하는 수정 방법을 보여준다. 사고를 둔화 시킨다. --;; 예를들어 import가 안되었다 싶으면 시키라고 하고, 선언된 클래스가 없으면 만드는 것까지 나온다. 빨간줄 나오면 눌러보라. 가장 경악할 기능.||
- EcologicalBinPacking/강희경 . . . . 1 match
output() 함수도 이런식으로 리펙토링할 수 있다. --재동
- EffectiveSTL/VectorAndString . . . . 1 match
* reserve를 사용하면 재할당, 반복자, 포인터, 참조 등등의 갱신을 최소화 시킬수 있다.
- EightQueenProblem/서상현 . . . . 1 match
모든 해를 출력하려면 recur 함수를 이렇게 고친다.
- EightQueenProblem/임인택 . . . . 1 match
처음에 시작 call 을 좀 이상하게 한다. loop 을 돌면서 첫번째 라인의 원소에 대한 get_Queen()함수를 호출한다. 생각에는 get_Queen(0,0); 처럼 호출하는게 가장 이상적이라고 생각하는데..--;
- EightQueenProblemDiscussion . . . . 1 match
직접 다시 새로 시작하는 것에 대해서는 비교계산을 내리기 힘들것 같네요. (더 좋은 디자인을 얻어내는 것과 훈련라는 점에서는 물론 저도 추천) 제가 잘못했다고 생각되는 부분은, 퀸을 배열하는 방법 알고리즘 부분에 대해 TestDrivenDevelopment 를 지키지 못했다는 점이죠. (머릿속에 먼저 재귀함수 호출 등의 특정 알고리즘들이 먼저 떠오른지라. )
- ErdosNumbers/황재선 . . . . 1 match
* 자바 1.5의 새로운 기능을 조금 사용해보았다. 클래스 Scanner는 이전 방식으로 하는 것보다 훨씬 편한 기능을 제공해 주었다. for loop에서 신기하게 배열을 참조하는 방식이 Eclipse에서 에러로 인식된다.
- FactorialFactors . . . . 1 match
팩토리얼 함수는 많은 특성을 갖는다. 이 문제에서 주어진 정수 n을 다음과 같은 팩토리얼 식 n!로 표현했을때 인수항의 최대수를 구하고자 한다. 단 1은 제외한다. 예를 들어 보자.
- FifteenSecondsRule . . . . 1 match
어떤 시스템/프로그램이 있을 때, 모든 개념적 단위(예컨대 패키지, 모듈, 클래스, 메쏘드 등)를 개발자 자신이 15초 이내에 설명할 수 있어야 한다는 "15초 룰"의 확장판이 꽤 유용할 때가 많습니다. 이런 식으로 설명을 모두 마쳤을 때는 소스 코드 전부를 설명한 셈이어야 합니다.
- GDBUsage . . . . 1 match
해당 인자값을 구조 프로그램이 실행된다. 브레이크 포인터 설정을 통해서 진행을 중지하는 것이 가능하다.
- HelpOnConfiguration . . . . 1 match
/!\ wiki.php에 정의되어 있는 WikiDB 클래스를 보면, 우선 하드코딩된 기본 설정이 있고, config.php에서 읽은 설정 사항을 그 위에 덧씌우는 방식이다.
- InWonderland . . . . 1 match
철민아 작업은 {{{~cpp EC_AliceCardHome001.zip}}} 이걸로 하고 월요일 저녁 5시까지 해줘. 난 함수 내부 채우고 프리젠테이션 만들고 있으마. --재동
- JAVAStudy_2002/진행상황 . . . . 1 match
c같이 하믄 쉬울 텐데.. 무신 클래스들이 이렇게 많은지.. --;;[[BR]]
- Java Study2003/첫번째과제/방선희 . . . . 1 match
* C 언어의 포인터처럼 메모리를 직접 access할 수 없다.
- Java/ReflectionForInnerClass . . . . 1 match
innerclass 에서는 기본적으로 Inner Class 를 포함하고 있는 상위클래스의 레퍼런스가 생성자로 들어간다. 마치 C++ 에서 메소드들에 대해 this 가 기본 파라메터로 넘어가는 것과 같은 이치랄까.
- Java/스레드재사용 . . . . 1 match
만약 그러면.. 무한루프때메.. wait..어쩌구 함수에 도달 못해서.. '도달할수없는 문장' 이라는 에러가 나는것이 아닐까..??? (._.);
- JavaStudy2002/영동-3주차 . . . . 1 match
3번째의 코드는 comment solving을 보인거니 감안하십시오. 3번을 그대로 한다면, 입력 데이터와, Bug 사이의 인터페이스를 맞추는 함수가 필요할것입니다.
- JavaStudy2002/입출력관련문제 . . . . 1 match
* 여러분이 어려워하시는것 같아, 입력 부분을 만들었습니다. 해당 static method의 기능은 한줄을 읽고, 공백이나, 탭을 기준으로 배열을 반환합니다. 사용 방법은 해당 함수의 main 을 참고하시고, 다른 소스에서 import해서 그냥 사용하세요. --["neocoin"]
- JavaStudy2003/두번째수업 . . . . 1 match
* 클래스정의 및 인스턴스(객체) 생성
- JavaStudy2003/세번째과제/곽세환 . . . . 1 match
= 클래스정의 및 인스턴스(객체) 생성 (예제1 + 예제2) =
- JavaStudy2003/세번째과제/노수민 . . . . 1 match
== 클래스 정의 및 인스턴스(객체) 생성 ==
- JavaStudy2004/이용재 . . . . 1 match
함수명이나 변수명을 지을 때 mynameis같이 쓰면 나중에 보거나 딴 사람이 보았을 때 이해하기가 힘들 수 있으니 myNameIs나 my_name_is처럼 각 단어끼리 구분 짓는 습관을 갖는 것이 좋다고 생각합니다. --[강희경]
- JavaStudy2004/조동영 . . . . 1 match
자식 클래스의 생성자는 전달인자가 없는 기본 생성자 모양으로 해놓고( ex) zealot() )
- JollyJumpers/김태진 . . . . 1 match
//두개의 값사이의 차를 B함수에 넣음.
- LazyInitialization . . . . 1 match
LazyInitialization의 하나의 변수당 두개의 메소드로 나눠서 초기화를 한다. 하나는 변수가 LazyInitialization되는 것을 감추어 주는 getter이고, 다른 하나는 변수에다 디폴트값으로 할당을 해줄 DefaultValueMethod이다. 이 방법은 유연성이 증대된다. 당신이 서브클래스를 만든다면, DefaultValueMethod를 오버라이딩함으로써, 기능을 바꿀 수 있다. 전장에서도 언급했듯이 성능도 증대시킬 수 있다.
- LinkedList/숙제 . . . . 1 match
free(pIns); // malloc함수로 만들어진 메모리중 쓸모 없는 메모리는 다시 반환되어야한다. (그렇지 않으면 메모리가 가득차서 컴퓨터가 멈춘다. ㅋㅋ)
- Linux/디렉토리용도 . . . . 1 match
리눅스의 디렉토리 구조를 이해하기 전에 마운트라는 개념을 이해해야할 필요가 있다. 리눅스는 모든 파티션을 /(이하 루트)에 포인터를 통해 연결한 마운트의 개념을 통해서 접근을 할 수 있다. 따라서 모든 디렉토리를 각기다른 장치 각기 다른 파티션에 나누어 넣어서 따로 보관할 수 있으며 데이터가 직접 보관되는 디스크를 따로 마운트해서 나중에 시스템을 다시 설치할때에 그 파티션만 지우지 않고 후에 마운팅하는 용도로 사용이 가능하다.
- Linux/필수명령어/용법 . . . . 1 match
일반적으로 echo 명령은 프롬프트 상에서 사용되는 일은 없다. 하지만 스크립트 작성시 번번히 사용된다. 셸 스크립트 상에서 echo 명령은 BASIC의 PRINT 명령이나 C 언어의 printf() 함수와 같이 메시지를 출력하는 데에 자주 사용된다. 또한 전혀 필요없을 것 같은 echo의 -n 옵션도 스크립트 상에서는 유용하게 사용될 수 있다.
- Lotto/김태진 . . . . 1 match
* 아, 그리고 오랜만에 포인터를 썼는데 예상대로 써져서 흡족했습니당.-
- Lotto/송지원 . . . . 1 match
int nc6( int n ) { // nC6 함수
- MFC/RasterOperation . . . . 1 match
{{{~cpp CDC::SetROP2()}}} 라는 함수로 제공하며 RasterOPerationTo의 약자이다.
- MFCStudy_2002_1 . . . . 1 match
그리고 중간 중간에..함수를 만들어서 사용하고 싶은데...전달인자로 뭘 받아야하는지도 잘모르겠고..^^a[[BR]]
- MFC_ . . . . 1 match
8. [양쪽의 클래스를 참조 필요시]
- Metaphor . . . . 1 match
시스템 메타포를 선정하면 같은 팀내에서 클래스와 메소드의 이름을 일관적으로 정할수 있어 공감대를 형성할 수 있다. (즉 하나의 메타포를 선정하여 공유하면 변수 이름같은 것을 지을때 같은 관점으로 짖게 된다는 의미). 어떤 객체에 대한 이름을 정하는 것은 시스템 전체를 이해하거나 코드를 재사용하는데 매우 중요하다. 만약 메타포를 올바르게 정한다면, 이름이 어떻게 정해지는가를 추측할 수 있게되고 실제로 개발 시간을 크게 절감시켜준다. 구축할 객체에 대한 이름을 위한 시스템(즉 메타포)를 결정할때는 모든 사람이 해당 시스템에 대하여 특별한 지식이 없이도 쉽게 연관되어 질수 있는 것으로 선택해야 한다. 예를 들어 크라이슬러의 지불시스템은 생산라인으로 구축되었다. 포드의 자동차 영업사원들은 BOM(부품표)으로 구조화 되었다. 구축하려고 하는 분야의 메타포를 사용할 수도 있다. 그러나 충분히 단순하지 않다면 영영에 해당하는 메타포를 사용하지는 말아라.
- ModelViewPresenter . . . . 1 match
MVP 는 실제로 3개의 클래스가 더 있다. 요약하면
- ModelingSimulationClass_Exam2006_1 . . . . 1 match
2) 부족한 시간, 랜덤함수를 사용할 수 없는 상황이라는 점을 말하고, TD 의 기대치를 구했다. 대충 구해보니 7.55 분가량이 소요된다는 사실을 알았다. (좌우 대칭형으로 가정했기 때문에... -_-) 따라서 한 패거리의 실기 시험합격자의 최대 인원은 40명 소요되는 시간은 총 5시간이지만 SQMS 모델이 큐잉에서 최대의 효율을 발휘 할 수 있으므로, 양쪽의 서버에 반씩을 나누어서 시험을 보면 2시간 반가량이 필요하다고 판단. 필기가 종료되는 시간은 10:00 + 2:30. 14:00 + 2:30 따라서 당일의 시험이 완전히 종료되는 17:00 분 안에 시험을 끝낼 수 있기 때문에 해당 모델은 안정하다고 적긴적었다. -_-;;
- MySQL/PasswordFunctionInJava . . . . 1 match
// JDK 1.5 이상에서 동작. (String.format 함수 때문에)
- NSISIde . . . . 1 match
* Save/Load 와 관련한 메세지의 함수 호출 순서 (Function Call 따라가기)
- NeoCoin/Server . . . . 1 match
아래 쉘 함수를 .bash_profile 등에 등록하여 실행되도록 한다.
- NumericalAnalysisClass/Exam2002_1 . . . . 1 match
5. Lagrange, Hermite, spline 함수의 특징을 Smoothness 관점에서 비교 설명하시오.
- NumericalAnalysisClass/Report2002_1 . . . . 1 match
Cubic Spline 함수를 계산하기 위해서는 Tri-Diagonal Matrix 에 대한 해를 구할 수 있어야 한다. 다음과 같이 주어진 Tri-Diagonal Matrix 시스템의 해를 계산하는 프로그램을 작성하시오.
- OurMajorLangIsCAndCPlusPlus/2006.1.26 . . . . 1 match
클래스 [OurMajorLangIsCAndCPlusPlus/Class]
- OurMajorLangIsCAndCPlusPlus/2006.1.5 . . . . 1 match
함수에 대하여... [OurMajorLangIsCAndCPlusPlus/Function]
- OurMajorLangIsCAndCPlusPlus/string.h . . . . 1 match
== 함수 (Functions) ==
- PNA2011/서지혜 . . . . 1 match
* Erlang은 함수형 언어. 분산처리 능력이 뛰어나다. 리스트의 재귀처리가 용이하다
- PairSynchronization . . . . 1 match
상민이랑 ProjectPrometheus 를 하면서 CrcCard 세션을 했을때는 CrcCard 에서의 각 클래스들을 화이트보드에 붙였었죠. 그리고 화이트보드에 선을 그으면서 일종의 Collaboration Diagram 처럼 이용하기도 했었습니다. 서로 대화하기 편한 방법을 찾아내는 것이 좋으리라 생각.~ --["1002"]
- PatternOrientedSoftwareArchitecture . . . . 1 match
* 이 패턴은 : data source - filter - pipes - filter - data sink, 의 순서로 되어 있고, 각 필터에서는 데이터를 처리하는 함수가 있을 수 있다. 레이어 패턴과 비슷한 점도 보이지만, 이 패턴의 특징은 쉬운 재조합과 재사용성이다. 에러를 처리하는 관점과 시스템의 신뢰성을 따지면 레이어가 더 낮다.
- Postech/QualityEntranceExam06 . . . . 1 match
3. Machine Language Like 한 프로그램 만들기. 코드 주고. 스앞 함수 호출하는 부분 있고 파라미터 패싱을 설명해야함.
- ProgrammingLanguageClass . . . . 1 match
아쉬운 부분은 프로그램 언어론이란 과목임에도 불구하고, 설명의 비중은 많이 쓰이는 언어일수록 높았던 점입니다. 함수형언어(FunctionalLanguage)는 기말 고사 바로 전 시간에 한 시간만에 끝내려다가, 그나마 끝내지도 못하고 요약 부분만 훑었습니다. 그 밖의 종류에 대해서는 거의 절차적 언어, 특히 C계열 언어를 설명하다가 부연 설명으로 나오는 경우가 많았습니다. 논리형언어(LogicLanguage)에 대한 설명은 거의 못 봤습니다. 어차피 쓰지 않을 언어라고 생각해서일까요.--[Leonardong]
- ProgrammingLanguageClass/2006/EndTermExamination . . . . 1 match
a) 상기 소스에서 fun 함수의 파라메터 전달 방식이 Pass-By-Value, Pass-By-Name 의 경우로 나누어서 출력 결과값을 나타내라 (소스는 대충 비슷한거 같은데 확실하지 않음. -_-;; 기억에 의존하다 보니 ㅋㅋ)
- ProgrammingLanguageClass/Report2002_2 . . . . 1 match
* 컴파일러에서 포인터에 대한 보안성에 관한 평가
- ProjectAR/Temp . . . . 1 match
=== 생각해 본것 (클래스 구조) ===
- ProjectPrometheus/CookBook . . . . 1 match
Python 에서의 string.urlencode 과 마찬가지로 GET,POST 로 넘기기 전 파라메터에 대해 URL Encoding 이 필요하다. URLEncoder 라는 클래스를 이용하면 된다.
- ProjectPrometheus/EngineeringTask . . . . 1 match
|| HTML 문서 가져오는 클래스 (Spider) 작성 || ○ ||
- ProjectPrometheus/Iteration1 . . . . 1 match
|| HTML 문서 가져오는 클래스 (Spider) 작성 || 1 || ○ (2시간) ||
- ProjectPrometheus/Iteration9 . . . . 1 match
* 도서관 UI 와 시스템 스타일이 바뀐점에 대한 대처.(GET/POST 변수들에 대해 분석. Extractor 클래스들 수정)
- ProjectTriunity . . . . 1 match
|| Upload:ExternalSort_PM_2.zip || 신재동 || 다단계 합병 초기 런 분배시 피보나치 수 계산 함수 ||
- ProjectZephyrus/ThreadForServer . . . . 1 match
이 아주 간단하고 단순한 프로그램을 수행하기 위해서 아래의 두가지 라이브러리가 필요 하다. 다운 받아서 클래스 패스에 잡아 놓기 [[BR]]
- PyGame . . . . 1 match
pygame.Surface 를 상속받은 새 클래스를 만들 수가 없다. 이상하게도 다음 코드가 Attribute 에러가 난다. 적절히 제약부분에 대해서 생각을 해야 할듯.
- PyOpenGL . . . . 1 match
새 버전의 [PyOpenGL]의 경우 메소드 이름이 약간 바뀌었다. xxxFuncCallback 함수 대신 xxxFunc 식으로 쓰인다. Nehe 의 코드 대신 [PyOpenGL] 인스톨시 같이 인스톨되는 Nehe Demo 프로그램 코드를 이용하기를 권한다.
- PyServlet . . . . 1 match
servlet 클래스의 경우는 수정시 바로바로 적용이 되나, import 되는 모듈을 수정하는 경우 바로 적용이 되지 않는다.
- REFACTORING . . . . 1 match
* 함수를 추가할 때
- RandomWalk/영동 . . . . 1 match
=== RandomWalk.cpp (Main함수) ===
- RandomWalk/창재 . . . . 1 match
int def_empty() // 꽉 찼나 안찼나 확인하는 함수.
- RandomWalk2/Vector로2차원동적배열만들기 . . . . 1 match
위의 방법 외에도 클래스로 감싸주고, 내부적으로는 1차원 배열을 쓰는 방법이 있겠죠. row*width+col로 특정 원소를 레퍼런스할 수 있습니다.
- ReleaseDebugBuildStartGo의관계 . . . . 1 match
-복사생성자에서 멤버 간 대입(member-wise assignment)를 잘 하는가?
- ReplaceTempWithQuery . . . . 1 match
위의 예는 매우 극단적으로 보일지도 모른다. 하지만 위의 예를 매우 복잡한 시스템의 일부분이라 가정하고 생각해보길 바란다. '''임시변수'''를 사용하는 코드는 해당 블럭에서만 접근 가능하기 때문에, 길어지는 성향이 있다. 이러한 임시변수를 '''질의 메소드'''(query method)로 바꿈으로써 어느곳에서라도, 임시변수에서 사용될 정보를 얻을 수 있고, 클래스 코드는 더 깔끔해진다.
- ReverseAndAdd/황재선 . . . . 1 match
reverse 부분은 shell에서 약간의 테스트를 거쳤습니다. 그래서 따로 테스트 코드를 만들지 않았는데 그 결과 디자인이 나빠진 것 같습니다. 아직은 tdd에 익숙하지 않아서 모든 함수를 테스트 코드화하면서 보폭을 줄이는 훈련을 해야겠습니다. -- 재선
- RoboCode . . . . 1 match
각 로보코드 참가자는 자바 언어의 요소를 사용하여 자신의 로봇을 만들면서 자바가 갖고 있는 상속성, 다형성, 이벤트 처리 및 내부 클래스 다루는 방법을 배우게 됩니다
- Ruby/2011년스터디/강성현 . . . . 1 match
* 만들어진 json parser를 이용하여 각 api의 입/출력을 처리할 수 있는 함수 작성
- RubyLanguage/Container . . . . 1 match
모든 배열은 Array 클래스의 인스턴스로, 배열은 그 자체가 객체이다. 배열은 다양한 메서드를 통해 조작할 수 있다.
- RubyLanguage/DataType . . . . 1 match
* 루비에는 Boolean클래스가 존재하지 않는다. 또한 true와 1은 다르며, false와 0도 같지 않다.
- RubyLanguage/InputOutput . . . . 1 match
* IO클래스
- RuminationOnC++ . . . . 1 match
아마존의 서평이 상당히 좋은 편이다. 비록 몇명안되는 리뷰만 있지만... 책을 본 사람들의 평가의 극상의 수준이다. 초급 C++ 프로그래머가 보기엔 좀 무리가 있는 내용이지만 재미있게 남는 시간에 읽을 수 있다.. (대략 50쪽에 핸들 클래스를 사용하라는 내용이 나온다.)
- RunTimeTypeInformation . . . . 1 match
위에서 보듯이 클래스의 형을 비교하는 것이 가능하다.
- STL/string . . . . 1 match
* string 클래스라고 해서 공백을 무시할수 있는것은 아니다. 학교 교재에 보면 getline()과 get()이 나온다. string 변수로 입력을 받는다 해도 cin >>을 사용하면 공백을 입력 받을수 없다. 따라서 getline() 써줘야 한다.
- SchemeLanguage . . . . 1 match
MIT에서 가르치는 프로그래밍 언어로, 흔히 우리가 알고 있는 C/C++, Java 등과는 완전히 다른 개념의 함수형 언어이다.
- Self-describingSequence/1002 . . . . 1 match
binary search 로 바꾸고 나서도 역시 오래걸림. 다른 검색법에 대해서 생각하던 중, findGroupIdx 함수 호출을 할때를 생각.
- SingletonPattern . . . . 1 match
이전에 ProjectZephyrus 를 프로그래밍할때 느낀점이라면, 초반에 디자인을 할 때 일수록 Singleton 을 쓸 생각을 하지 않는것이 좋겠다는 점이다. 초반에 디자인을 할때엔 (특히 Conceptual Model 단계정도만 생각하고 프로그래밍에 들어가는 사람의 경우) 어떠한 클래스건 대부분이 인스턴스가 한개이다. -_- 그렇다고 이 모든 것들을 글로벌 객체로 만들어내는 것은 그리 좋지 않다. --["1002"]
- Slurpys/문보창 . . . . 1 match
힘들게 버그를 잡고 통과. 재귀함수 사용시 여러가지 통로(?)를 잘 관리해 줘야한다.
- SmalltalkBestPracticePatterns/DispatchedInterpretation . . . . 1 match
때때로, 그러나, 한 객체의 정보는 다른 객체의 행위에 영향을 미칠 것이다. 정보의 사용이 단순할 경우, 또는 제한된 정보에 기반해서 선택이 가능할 경우에는 인코딩된 객체에게 메시지를 보내는 것이 충분히 가능하다. 이와 같이, 부울린 값들은 두 클래스의 하나의 인스턴스로 표현되어진다는 사실은, True 그리고 False, 메시지 #ifTrue: ifFalse:. 뒤로 숨겨진다
- SnakeBite/창섭 . . . . 1 match
DeleteMe) CRgn과 CRect에 있는 PtInRegion과 PtInRect함수로 영역 검사를 해보는 편이 편할듯 by 최봉환[[BR]]
- SoftwareEngineeringClass . . . . 1 match
하지만 역할별, 작업별로 만드는 계획서와 보고서에 쏟는 시간이 너무 많다는 생각은 저 뿐만이 아닐 것입니다. 심사시에는 계획서에서 언급하지 않은 활동을 실행했다고 딴지를 걸 정도로, 계획서대로 실행된 내용을 변경없이 실행하는 것이 프로젝트의 반복가능성을 평가하는 기준인것 같습니다. 설계와 구현 사이에서 계획대로 실행 안되는 부분을 극단적으로 느꼈는데, 예를 들어 클래스 다이어그램과 시퀀스 다이어그램이 [Refactoring]과 같은 코드 재구성 작업을 할 때마다 바뀌어야 했습니다. 다이어그램이 코드로 매칭되지 않기 때문에 코드를 바꿈은 물론 다이어그램을 바꾸는 이중의 수고를 겪어야 했습니다. :( --[Leonardong]
- SpiralArray/영동 . . . . 1 match
* 제대해서 처음으로 숙제를 제외하고 처음 짠 ToyProblem입니다. 1학년 때 프로그래밍잔치에서 못 짰던 걸 이제야 짰네요. 우선 소요시간으로 미루어 볼때 제대하고 나서 머리가 굳었다는 걸 느낄 수 있었고, 그만큼 처음부터 막 짜지 말고 설계 및 구상을 잘 해야겠다고 생각했습니다. 또한 객체지향으로 짠 것도 아니고 변수, 함수를 너무 지저분하게 쓴 거 같기도 하고... 반성할 점이 참 많았습니다. 그리고 일단 배열 크기도 미리 정했고 시작점도 0, 0으로 가정하고 해서 사용자의 잘 못된 입력에 대응하지 않은 점도 미비했네요.
- StudyingFundamentalsOfTcpIp . . . . 1 match
* 일정 분량을 공부하고 멤버들끼리 질답을 갖는 시간을 정기적으로 갖을 것입니다.
- SuperMarket . . . . 1 match
1. 클래스를 이용 (좀 더 체계적으로)
- TddRecursiveDescentParsing . . . . 1 match
문제점 : 테스트 가능할 수 있는 아이디어가 나오기까지가 오래걸렸다. 테스트 가능한 방법으로 접근하고 나서부터의 코딩은 1-1.5시간정도밖에 안걸렸지만. 그리고 본래의 스펙에는 AST 에 대한 언급이 없었다. 해당 함수가 제대로 호출되었는지를 근거로 접근하는 것이 나았을지도.
- TheWarOfGenesis2R/ToDo . . . . 1 match
* (V) 게임루틴과 출력루틴의 클래스 구분
- TheWarOfGenesis2R/일지 . . . . 1 match
* 리팩토링의 위대함을 계속 느껴 버렸다. Extract Method는 기본이고, 상위 클래스로 올리기, 등등 이것저것 하니까 매우 간단해지는 것을 느꼈다.
- UnitTest . . . . 1 match
A: Socket 이나 Database를 이용하는 경우에는 문제가 되겠죠. 그럴때 MockObjects를 이용하는 방법이 있었던걸로 기억하는데, 아직 실제로 제가 해보지는 않아서요. 대강 개념을 보면 MockObjects는 일종의 가짜 객체로 실제 객체가 하는 일을 시뮬레이션 해주는 객체입니다. 미리 MockObjects 를 셋팅을 해두고 해당 함수결과의 리턴 요구시에는 예측할 수 있는 데이터를 리턴하게끔 하는 것이지요. 나중에 본 프로그램에서 MockObjects들을 토대로 실제의 객체를 만든다.. 식의 개념으로 기억하고 있긴 한데, 저의 경우는 공부만 하고 적용해본 적은 없습니다. --석천
- UseSTL . . . . 1 match
* 오늘 맘에 드는 함수가 있는 소스를 보고 적어줄려 했더니.. 같은 책을 보고 있었네.. ^^;;;;; --["경태"]
- VisualStudio2005 . . . . 1 match
C# 자동으로 클래스 다이어 그램 그려주네요. 테스트 케이스 작성은 아직 못 해봤음. -_-
- VonNeumannAirport . . . . 1 match
-> 이에 따라 Input 부분이 바뀌고, Input 부분이 클래스와 합쳐진 코드의 경우 더더욱 골치.
- WikiProjectHistory . . . . 1 match
|| ["MFCStudy_2002_1"] || 창섭(["Wiz"]), 정훈, 재민 || 방학중 MFC 와 클래스의 개념을 익히며 간단한 결과물 작성 || 종료 ||
- WorldCupNoise/권순의 . . . . 1 match
* 재귀함수는 느려서 시간 초과되네요
- XMLStudy_2002/Encoding . . . . 1 match
*Unicode와 XML등과 같은 Markup Language 등에 대해 W3C와 Unicode.org 멤버들이 작성한 Technical Report : [http://www.w3.org/TR/1999/WD-unicode-xml-19990928/]
- XMLStudy_2002/XML+CSS . . . . 1 match
스타일은 한 번만 작성해도 같은 클래스에 속하는 XML문서들이 함께 사용할 수 있다.
- XpWeek/20041224 . . . . 1 match
사실 네트워크에 대한 MockObjects는 어렵지 않았던 것 같아. JUnit에서 제공하는 MockObject클래스를 소켓에 써먹는 방법에 집착한 나머지 포기하지 않았을까? 단순히 서버와 클라이언트 흉내만 내면 될텐데...
- YetAnotherTextMenu . . . . 1 match
차라리 "텍스트 메뉴" 자체를 Event Driven Programming 개념을 전달하기 위한 toy problem으로 쓰는 건 어떨까? 간단한 구조를 통해, 콜백 함수가 무엇인지 등을 배울 수 있을 것이다.
- Yggdrasil/가속된씨플플/0장 . . . . 1 match
* 함수: 자신의 이름을 가지며, 다른 곳에서 이를 호출하거나 실행시킬 수 있는 프로그램의 한 조각
- ZPBoard/AuthenticationBySession . . . . 1 match
session_start(); // Session 을 사용하기 위해서는 반드시 맨 처음에 이 함수를 호출해주어야 한다.
- ZPBoard/PHPStudy/쿠키 . . . . 1 match
* 제한시간 항목에는 time()이나 mktime()함수의 리턴값을 사용할 수도 있다.
- [Lovely]boy^_^/EnglishGrammer/Passive . . . . 1 match
We use get mainly in informal spoken English. You can use be in all situations.(항상 be 쓸수있단다. 고로 귀찮은 get쓰지말자... 클래스에서 get 보는것도 지겨운데..--;)
- [Lovely]boy^_^/ExtremeAlgorithmStudy/MathematicalFoundations . . . . 1 match
* 집합, 함수, 그래프, 트리
- [Lovely]boy^_^/영작교정 . . . . 1 match
* 변수나 함수 이름 쓸때 대소소...대소소 이런식으로 쓰다보니 저런 에러가 났다.--;
- eXtensibleMarkupLanguage . . . . 1 match
* [http://www.joon.pe.kr/blog/250 php로 xml 생성 클래스(예제포함)]
- erunc0/Mobile . . . . 1 match
* gx library 에서 제공해주는 몇안되는 함수를 이용하여. pda 화면에 대한 pointer를 얻어와 삽질해서 뿌린다. dx 할때랑 똑같음.
- java/reflection . . . . 1 match
* 문자열을 출력하는 샘플 클래스.
- lostship . . . . 1 match
|| ["Boost/SmartPointer"] || 스마트 포인터 쓰기 ||
- matlab . . . . 1 match
- 일단 classdef 로 클래스를 작성.
- pragma . . . . 1 match
C 와 C++ 을 구현한 각각의 컴파일러에는 포팅된 하드웨어나 OS 에 의존적인 몇몇가지들의 기능을 가지고 있다. 일례로 몇몇의 프로그램들은 메모리에 데이터가 어떠한 방식으로 자리잡을 것인지 에 관한 문제나 함수가 파라미터들을 조작하는 방법들에 대한 세밀한 조작이 요구된다. #pragma 지시어들은 C 와 C++ 언어 안에서 최소한의 호환성을 유지시키며 그러한 시스템 의존적인 명령어들을 언어의 기능으로서 포함시키는 일을 한다. Pragma 지시어들은 일반적으로 '''컴파일러들 마다 서로 다르다'''.
- source . . . . 1 match
[포인터 swap]
- zennith/source . . . . 1 match
이 컴비네이션 함수.. 제대로 푼건지 확신이 안가는군요. 6c3 같은거로 테스트 해보면 제대로 돌아가는 거 같은데요.
- zozo . . . . 1 match
중대컴공 98 이선호. 제로페이지랑 친한 네토리 학회 멤버.
- ㄷㄷㄷ . . . . 1 match
두 개의 서로 다른 함수를 사용해서 하도록 했지~
- 가위바위보 . . . . 1 match
렌덤 함수 이용을 가르치기 위한 숙제입니다
- 객체지향용어한글화토론 . . . . 1 match
* 예를 들어 외국인이 클래스를 처음 배울때 느끼는 public, private의 느낌과 우리가 그것을 처음 보았을때 느낌은 상당히 틀릴것이다.
- 고한종/on-off를조절할수있는코드 . . . . 1 match
//이 부분은 scanf_s("%c",&keyOnOff);로도 쓸 수 있지만 scanf_s와 scanf의 차이도 잘 모르고 scanf는 사실 매우 어려운 함수;
- 고한종/업적/WinAPI로만든학과주점포스기 . . . . 1 match
삼성 소프트웨어 멤버십을 노리면서 만든 거 였는데 미완성으로 끝. 폐기.
- 고한종/팩토리얼 . . . . 1 match
재귀함수를 쓰지 않고 팩토리알 쓰기. 저기서 변수를 더 줄일 수 있을것 같은데 하기 힘들다.
- 구구단/Leonardong . . . . 1 match
* Niner 클래스
- 구구단/조재화 . . . . 1 match
* cho 클래스
- 권영기/채팅프로그램 . . . . 1 match
* 서버의 경우 listen을 하기위하여 while문으로 무한 루프를 돌고 있으므로 조인이 없어도 스레드가 중간에 죽지않습니다. 그리고 main이 return을 하여 프로세스가 종료될 경우 지식스레드도 모두 종료되므로 main 함수 실행 도중에 종료해야하는 경우 이외에는 따로 처리를 하지 않아도됩니다. - [김희성]
- 김태진 . . . . 1 match
* 11학번 첫번째 ZP정회원이자(5/18), 첫번째 OB멤버입니다.
- 논문번역/2012년스터디/서민관 . . . . 1 match
특징 벡터들의 연관성을 줄이고 클래스(...)의 분리성을 증가시키기 위해서 우리는 훈련과 인식 단계의 선형 판별 해석을 통합하였다.(cf. [6])
- 데블스캠프2003/넷째날/Linux실습 . . . . 1 match
* C 소스를 입력합니다. 단, C++ 스타일이 아닌 C 스타일로. 즉, stdio.h와 printf등을 사용하라는 뜻이죠. 주의할 점은, 여기서 주의할 점은 main() 함수의 리턴값은 void로 해주면 안 되고 int로 해주어야 합니다.(왜 그런지는 모르겠으나 컴파일 에러가 나더라고요.)
- 데블스캠프2003/넷째날/후기 . . . . 1 match
* 오늘 알게 된 OOP의 특징 중 각 클래스를 묶는 캡슐이라는 개념....이것을 보니 프로그램 짰을때, 더 쉽게 고칠 수 있을 것 같네요.. --[문원명]
- 데블스캠프2003/셋째날/후기 . . . . 1 match
* 아아..랜덤..랜덤..-_-;; 잘 쓰면 재미있는 함수군ㅡㅡ 재미있게 갖고 놀아야지.. 랜덤워크, 개짓끝에 성공>_<// ㅡ [이진훈]
- 데블스캠프2004/세미나주제 . . . . 1 match
[STL]을 할때 단순히 자료구조를 사용하는 방법을 같이 보는것도 중요하겠지만 내부구조 (예를 들어, vector는 동적 배열, list은 (doubly?) linked list..)와 같이 쓰이는 함수(sort나 또 뭐가있드라..그 섞는것..; ), 반복자(Iterator)에 대한 개념 등등도 같이 보고 더불어 VC++6에 내장된 STL이 ''표준 STL이 아니라는 것''도 같이 말씀해 주셨으면;; (SeeAlso [http://www.stlport.org/ STLPort]) - [임인택]
- 데블스캠프2004준비 . . . . 1 match
* 새로운 멤버의 의지검증
- 데블스캠프2005/RUR-PLE/Harvest . . . . 1 match
#오른쪽 함수
- 데블스캠프2006/목요일후기 . . . . 1 match
마지막 아날로그 시계는.. 사각형, 원, 선 그리기를 RAND 함수로 하겠다고 했다가 시간을 너무 소비해버려서 구현하지 못했지만
- 데블스캠프2006/월요일/함수/문제풀이/성우용 . . . . 1 match
1번 함수만들기
- 데블스캠프2006/월요일/함수/문제풀이/이차형 . . . . 1 match
함수만들기
- 데블스캠프2006/전체일정 . . . . 1 match
|| 월 || [데블스캠프2006/월요일] || 문법 || 함수 || . || . || . ||
- 데블스캠프2006/화요일 . . . . 1 match
|| 19:30 ~ 21:00 || 포인터 + 예제 || 아영 선호 ||
- 데블스캠프2006/화요일/pointer/문제4/정승희 . . . . 1 match
#include<cstring>//문자열을 비교하는 함수(strcmp)를 포함
- 데블스캠프2009/목요일/연습문제/MFC/서민관 . . . . 1 match
뭔가 찜찜한 계산기. 구조상 *와 / 연산이 불가능하다... 또한 추가 함수를 만들지 않아서 버튼 구조를 똑같은 것을 9번 반복
- 데블스캠프2010/넷째날/후기 . . . . 1 match
* 자바스크립트가 C언어와 많이 닮은것 같아서 매우 인상깊었습니다. 하지만 저의 C언어 실력이 미숙하여 하는데에 많은 어려움을 겪으면서 많은 생각을 하게 되었습니다. 일단 기본적인 C언어의 문법과 선언하는 함수 등을 자세히 공부하고, 자바스크립트에서의 C언어의 활용 방법을 좀더 연구해야겠다고 생각했습니다. 그리고 자바스크립트를 통해 비쥬얼 스튜디오보다 좀더 편리한 프로그래밍을 할수있어 더 좋은 내용의 프로그램을 만들수있다는 것에 대하여 생각해 보았습니다. 앞으로 좀더 열심히 공부해야겠다고 생각합니다. - [양아석]
- 데블스캠프2010/다섯째날/ObjectCraft/미션1/서민관 . . . . 1 match
== 메인함수 ==
- 데블스캠프2010/다섯째날/ObjectCraft/미션3/김상호 . . . . 1 match
== 메인함수 ==
- 데블스캠프2011/둘째날/후기 . . . . 1 match
* 씐나는 Cheat-Engine Tutorial이군요. Off-Line Game들 할때 이용했던 T-Search, Game-Hack, Cheat-O-Matic 과 함께 잘 사용해보았던 Cheat-Engine입니다. 튜토리얼이 있는지는 몰랐네요. 포인터를 이용한 메모리를 바꾸는 보안도 찾을수 있는 대단한 성능이 숨겨져있었는지 몰랐습니다. 감격 감격. 문명5할때 문명 5에서는 값을 *100 + 난수로 해놔서 찾기 어려웠는데 참. 이제 튜토리얼을 통해 어떤 숨겨진 값들도 다 찾을 수 있을것 같습니다. 그리고 보여주고 준비해왔던 얘제들을 통해 보안이 얼마나 중요한지 알게되었습니다. 보안에 대해 많은걸 생각하게 해주네요. 유익한시간이었습니다. 다음에 관련 책이 있다면 한번 읽어볼 생각이 드네요.
- 데블스캠프2011/셋째날/String만들기 . . . . 1 match
|| 함수 || 예 ||
- 데블스캠프2013/셋째날/머신러닝 . . . . 1 match
//min이 어떤 클래스 인지.
- 데블스캠프2013/셋째날/후기 . . . . 1 match
* 음... 사실 정말 열심히 준비를 해서 최대한 차근차근 쉽게 설명을 해 보자고 생각을 했는데... 그래도 역시 처음 접하는 것이라 그런지 그렇게 간단하게 진행되지는 않은 것 같아서 마음에 아쉬움이 남습니다. 새내기들이 파일 포인터랑 파일 입출력을 조금이라도 알고 있었으면 훨씬 수월했을텐데 말이죠. 그래도 제가 할 수 있는 전력을 다 했다고 생각하고, 앞으로 똑같은 주제로 세미나를 한다고 해도 더 낫게는 못 할 겁니다. 따라서 앞으로 같은 주제로 세미나를 할 일은 아마 없지 않을까 싶습니다. 부탁이라도 들어오지 않는 이상. 이것 때문에 마음 걱정이 커서 밥을 먹어도 먹는 느낌도 없었는데, 그래도 스스로 만족스러울 만큼은 한 것 같아서 속이 후련하고 또 조금은 아쉽기도 합니다. - [서민관]
- 랜웍/이진훈 . . . . 1 match
int countz()//빈칸없나 체크하는 함수.
- 레밍즈프로젝트/그리기DC . . . . 1 match
[레밍즈프로젝트]에서 사용하게 될 그리기 클래스.
- 만년달력/강희경,Leonardong . . . . 1 match
int deter_date(int year, int month )//요일을 정하는 함수(0은 일요일, 6은 토요일)
- 만세삼창VS디아더스1차전 . . . . 1 match
dangling 포인터 아니냐;
- 문자반대출력/남상협 . . . . 1 match
* 아직도 파이썬 함수 좀 쓸라면 찾아 봐야한다. 이놈의 나쁜 기억력.. -_-
- 문자반대출력/최경현 . . . . 1 match
[문보창]선배님의 process_wchar() 함수를 빌려다 썼다.
- 문제풀이/1회 . . . . 1 match
이런 경우를 개선하기 위해서 map 함수가 있는것입니다. 이를 Haskell에서 차용해와 문법에 내장시키고 있는 것이 List Comprehension 이고 차후 [http://www.python.org/peps/pep-0289.html Genrator Expression]으로 확장될 예정입니다. 그리고 print 와 ,혼용은 그리 추천하지 않습니다. print를 여러번 호출하는것과 동일한 효과라서, 좋은 컴퓨터에서도 눈에 뜨일만큼 처리 속도가 늦습니다. --NeoCoin
- 반복문자열 . . . . 1 match
* 함수를 만든다.
- 반복문자열/이정화 . . . . 1 match
[반복문자열/허아영]에 있는 내용을 읽어보길 권합니다. 함수가 무엇일까 생각해볼 수 있을 것입니다. -- [Leonardong]
- 삼총사CppStudy/20030731 . . . . 1 match
* 기본적인 클래스의 사용방법
- 삼총사CppStudy/숙제2/곽세환 . . . . 1 match
진짜 잘하네요.. ^_^ 단한개를 지적하자면 스칼라값을 곱할때 v3 = 5 * v1; 이 안된다는것 정도겠네요... 이런건 friend함수를 한개정도 더 만들어주면 됩니다.
- 새싹-날다람쥐 6월 10일 . . . . 1 match
이 free는 가장 하위 포인터에만 사용이 가능하다. 따라서 array를 모두 free시키려면 for문을 돌려서 free(array[i])와 같이 모두 없애준 후에 free(array);를 해야 한다.
- 새싹교실/2011/무전취식/레벨2 . . . . 1 match
* printf()와 scanf()함수의 쓰임에 대해 말해주었습니다. %c %d %l %f %%등등.
- 새싹교실/2011/씨언어발전/2회차 . . . . 1 match
간단하게 bongbong 커리큘럼에 있는 예제를 이용하며 기본 입출력함수의 사용법에대해 수업했습니다.
- 새싹교실/2012/사과나무 . . . . 1 match
키워드라던가, 변수, 변수형 이라던가, 입출력 함수가 왜 있는가 같은 얘기를 했고
- 새싹교실/2012/아우토반/앞반/5.17 . . . . 1 match
1. 문자열을 인자로 받아 문자열을 거꾸로 저장하는 함수
- 새싹교실/2012/앞부분만본반 . . . . 1 match
5. printf 함수의 기본적인 이해
- 새싹교실/2012/열반 . . . . 1 match
* 함수의 사용법과 if,else if, else문의 차이를 배웠습니다. [권우성]
- 새싹교실/2013/라이히스아우토반/6회차 . . . . 1 match
어질어질 다음 시간에 포인터는 어떨까..걱정된당
- 새싹교실/2013/양반/3회차 . . . . 1 match
함수호출
- 새싹교실/2013/양반/5회차 . . . . 1 match
함수를 배워서 기분이 좋다.
- 새싹교실/2013/책상운반 . . . . 1 match
* 왜 함수들의 마지막은 return 0;로 끝나는 지, 또 어떻게 쓰는지
- 세미나/2004 . . . . 1 match
|| 3 || 민수&진영 || 클래스 ||. ||
- 송치완 . . . . 1 match
* ~~ProjectD의 멤버~~ 현재 탈주상태
- 수 . . . . 1 match
기본 함수들을 설명하기 위한 예제니까요. :)
- 수학의정석/집합의연산/조현태 . . . . 1 match
또한 오버헤드를 줄인다는 명목하에 함수로 나누지도 않았따. (귀차니즘.ㅎ)
- 숫자야구/ 변준원 . . . . 1 match
#include <iostream> // 랜덤함수는 iostream에 포함되어 있습니다.
- 쉽게Rpg게임만들기 . . . . 1 match
* 쉽게 RPG 게임 만들기 라고 해서 RPG 쯔꾸르 깔고 사용하는 법만 간단히 설명하는 건가 했는데 Ruby 얘기도 나오고 해시 얘기도 나오고 슈퍼 클래스 얘기도 나와서 놀람… - [김수경]
- 스터디제안 . . . . 1 match
스터디를 하기 위해 또 다른 조직을 만들기가 부담이 된다면 이런 곳을 통해 인원을 모을 수 있겠습니다. 스터디하는 데에까지 꼭 멤버쉽 커뮤니티가 필요한 것은 아니겠죠.
- 실시간멀티플레이어게임프로젝트 . . . . 1 match
파이썬의 기초 문법만 알면 강의에 참여할 수 있을 겁니다. 제가 말하는 기초란, if문, for문, 기초 데이타형(리스트, 터플, 사전, 문자열, 정수 등), 함수 정도에 대한 지식입니다.
- 양아석 . . . . 1 match
turn_off()함수를 만들어냄
- 양쪽의 클래스를 참조 필요시 . . . . 1 match
1. Set 함수를 만들어서 pWnd Setting
- 위키설명회2005/PPT준비 . . . . 1 match
용도 : 자산관리, 프로젝트 멤버 주소록, *공유팁, 프로젝트 세팅방법
- 이승한/mysql . . . . 1 match
* PHP 에서 지원하는 MySql API 함수를 사용
- 잔디밭/권순의 . . . . 1 match
* 더블 포인터 안 쓰고 하려고 했는데 머리가 딸려서 -_-;;;;
- 정모/2002.9.26 . . . . 1 match
["ProjectPrometheus"] 팀의 경우는 현재 도서관 UI 가 바뀌는 통에 열심히 기존 코드 수정중이라고 함. 그대신 모듈화가 되어있어서 소스의 일부 클래스들만 수정하면 된다고 한다.
- 정모/2003.8.26 . . . . 1 match
* [JavaStudy2003] => 진행중, 멤버가 많이 빠짐.
- 정모/2004.04.27 . . . . 1 match
* 그날은 단순히 위키설명회와 멤버 영입인가요. 그 이후 무얼할 것인지 뚜렷한 계획을 세우지 않은 것 같습니다. -- [황재선]
- 정모/2011.4.4/CodeRace/강소현 . . . . 1 match
* 음...저는 메인 함수를 사랑하나봅니다/ㅁ/ - [강소현]
- 정모/2012.5.14 . . . . 1 match
* 함수형 언어 스터디 제안
- 정모/2012.5.7 . . . . 1 match
* 함수형 언어 스터디 제안
- 정모/2012.7.18 . . . . 1 match
* 수요일 : callback 함수의 개념과 Javascript의 Event Handler 사용. 표준이 제정되지 않은 상황에서 Cross Browsing은 힘들다.
- 정의정 . . . . 1 match
* 삼성전자소프트웨어멤버십 21-2기 활동
- 제12회 한국자바개발자 컨퍼런스 후기/유상민의후기 . . . . 1 match
* 집에 돌아와 stan4j 돌려보고 있는데 정말 최고다. 당장 13개의 순환 의존성에 문제가 있는 지점을 찾아준다. Java 언어가 매크로가 없고 매타 프로그래밍 요소가 적다는 언어의 특성으로 이런 멋진 도구가 만들어 진다는건 정말 좋다. 특히 손영수씨가 500개 클래스 안쪽에서는 무료라고 했는데, 이런 대단한 도구가 시간 제약이 아니라 규모 제약으로 무료라니 정말 놀랍다.
- 조금더빠른형변환사용 . . . . 1 match
// C언어 함수
- 조영준 . . . . 1 match
* 동네팀 멤버
- 조재화 . . . . 1 match
* www.msdn.com 라이브러리와 함수... 등등의정보를 알 수 있다.
- 지금그때/OpeningQuestion . . . . 1 match
만약 관심이 가는 대상이 있다면 가급적 교양보다 (다른과) 전공수업을 들을 것을 권합니다. 학생들의 분위기, 교수의 태도, 수업의 진지함 등 모두가 차이가 큽니다. 의외로 따라가기가 그렇게 어렵지 않은 경우가 많습니다(오히려 클래스 탑을 하는 경우도 많습니다). 스스로 따라갈 수 있을지 의문이 들면, 해당 수업의 지난 학기 교과서를 구해서 읽어보세요. 감이 올겁니다.
- 지금그때2004/회고 . . . . 1 match
* 'COW', 'JStorm', 'Netory' 에 대한 홍보는 전혀 이루어지지 않았습니다. 행사 당일날 JStorm 이나 Netory 소속 멤버들에게 해당 모임이 있는지에 대해 물어봤을 때 아시는 분들이 없었습니다. (패널을 맡으신 분들을 제외하고요.)
- 지도분류 . . . . 1 match
||["Scheme"]|| MIT에서 가르치는, 함수형 프로그래밍 언어이다 ||
- 지속적인에너지패턴 . . . . 1 match
'''스터디 그룹을 시작하는 것은 꽤 쉽다. 그러나, 그것을 유지하고, 멤버들이 활발하게 하고, 대화가 통찰력이 있고, 그룹이 오래 지속되게 하는것은 전혀 다른 문제이다. '''
- 창섭/삽질 . . . . 1 match
* 이상하게 함수가 작동을 안하거든 기본적으로 parameter 갯수와 reference 여부를 확인하자.
- 최대공약수 . . . . 1 match
C언어시간에 배웠는데, 이 문제에서는 아마 값을 넘기는 함수를 만들어서 사용하라는 것인듯 -- 아영
- 최소정수의합 . . . . 1 match
- 괜찮습니다. 사용하는 언어에서 만족될 함수 등등..을 써서 알아서 프로그래밍 하시면 됩니다. 하지만 처리조건을 만족할 수 있는 언어는 그렇게 프로그래밍 해주시길 바랍니다.
- 최소정수의합/임인택2 . . . . 1 match
에서 rnd의 타입이 Integer로 되었는데 Integer는 다른 값으로 나눠지지 않았다(내가 방법을 모르고 있을수도 있겠지만). haskell wiki를 뒤져 toRational 이라는 함수를 찾았지만 출력되는 모양이 영 마음에 들지 않는다.
- 캠이랑놀자/051228 . . . . 1 match
함수
- 코드레이스출동 . . . . 1 match
다음주 월요일에도 '팀1'은 연습을 하려 합니다. 중요 멤버 상규가 수요일이 안되서 월요일 1번 더한다는... 결과적으로는 좋지요. ^^ 여튼 시간 되시는 팀은 위에 공지를 참고 하여 오세요. 이때는 다음주 수요일 보다 간단하게 해서 2~3시간 정도 연습할 예정입니다. 우리 모두 열심히 훈련!! 빰빠빠라빠~ (효과음) --재동
- 콤비반장의메모 . . . . 1 match
''사용자가 한번 플레이 했다는 걸 미디어에 직접 기록하는 방법으로는 디지털 워터마킹이 있습니다. 이 방법은 네트워킹 없이도 문제를 해결할 수 있는 방법입니다만 전문적 지식이 필요합니다. 네트워크로 확인하는 가장 쉬운 방법은 클라이언트는 재생시 마다 서버에서 인증을 받고, 서버측에서는 미디어의 아이디를 확인하고 재생횟수를 저장하는 방법이 아닐까 싶습니다. 미디어의 아이디 생성은 MD5 같은 해쉬함수 정도면 충분 할것 같습니다. --["데기"]''
- 큐와 스택/문원명 . . . . 1 match
// 이코드 때문입니다. 배열상의 모든 char 포인터가 결국 같은 곳을 가리키게 됩니다.
- 큰수찾아저장하기/조현태 . . . . 1 match
//여전히 소스는 엉망~ 아에 함수도 없네..ㅎㅎ
- 타도코코아CppStudy/0804 . . . . 1 match
최소 한개. 무조건 클래스를 이용하세요. 또한 될수 있으면 객체지향적으로.
- 토이/삼각형만들기/김남훈 . . . . 1 match
첫번째와 두번째는 너무 쉽다. 버퍼만 만들면 거기에 별표만 채우면 되니까. 오히려 makeBuffer 함수가 신경써야 할 부분. C 에서는 문자열의 끝을 신경써줘야 하니까.
- 파스칼삼각형/sksmsvlxk . . . . 1 match
* 내가 사용할 수 있는 함수가 존재하는 지 알아야 한다.
- 파스칼삼각형/김남훈 . . . . 1 match
문제는 내가 scheme 시스템에서 stdin stdout 을 어떻게 다루는지 몰라서 그냥 함수만 만들었다는 점.
- 파스칼삼각형/김준석 . . . . 1 match
아영이 누나 소스를 보았다. 아.. 재귀함수 + 하키스틱 공식으로 짤수있는거구나.. Ver 1, Ver 2, Ver 3의 변천사..
- 파스칼삼각형/김태훈zyint . . . . 1 match
함수가 멋지게 안나오는.. 이런 훌륭한녀석~!!
- 프로그래밍언어와학습 . . . . 1 match
* 학교에서 C++ 배운다고 하드웨어 건드리나. -_-; (전전공이라면 몰라도..) 컴퓨터공학과의 경우 학교에서 C++ 배워도 어셈블러 레벨까지 다루는 사람이 별로 없다고 할때, C++ 을 배웠다고 시스템레벨 까지의 깊은 이해가 필요없었다는 점인데.. 글을 읽으면, 마치 '교육용 언어로 C, C++ 을 배웠다면 시스템 레벨까지 이해할 것' 처럼 쓴 것 같다고 생각. (C, C++ 포인터를 레퍼런스 이상의 개념으로 쓴적이 있었나.. --a) 차라리 '우리는 전전공 출신에 하드웨어제어 해본 사람 뽑습니다' 라고 할것이지..쩝. Domain-Specific 한 부분을 생각치 않고서는 시스템 프로그래머에게서는 늘 자바와 Script Language 는 '군인을 나약하게 만드는 무기' 일 수밖에 없으니까.
- 프로그래밍잔치/첫째날후기 . . . . 1 match
사람들은 서로가 고른 언어로 만든 Hello World, 구구단 을 시연하면서 각자의 개발환경, 프로그래밍 방법 등을 보여주었다. 그리고 JuNe 은 중간에 Smalltalk (Squeak)의 OOP 적인 특성, Scheme, Haskell 의 함수형 언어 페러다임에 대해 보충 설명을 했다.
- 피보나치 . . . . 1 match
기본적인 함수의 제작은 재귀호출로 만들어야 하나, 다른 방법을 사용해도 됩니다.
- 피보나치/고준영 . . . . 1 match
물론 함수의 인수값을 2,3개씩해서 서버에 부담이 덜가는 방법이 있겠지만.. 난 이방법이 좋다.. --;;; 쩝.
- 피보나치/조현태 . . . . 1 match
//메인함수- 값을 입력받고 출력하는 역활을 합니다.
- 한자공 . . . . 1 match
== 멤버 ==
- 허아영 . . . . 1 match
[http://blog.naver.com/ourilove.do?Redirect=Log&logNo=100003444965 포인터공부]
- 현종이 . . . . 1 match
class SungJuk //클래스를 선언합니다.
Found 776 matching pages out of 7555 total pages (3690 pages are searched)
You can also click here to search title.