사막여우♥ MYPI

사막여우♥
접속 : 4392   Lv. 54

Category

Profile

Counter

  • 오늘 : 5 명
  • 전체 : 30853 명
  • Mypi Ver. 0.3.1 β
[Object-Oriented Programming] public, private, void, static (9) 2012/10/03 AM 09:51
계속 나오고 있지만 정확히 모르는 것들.

1. static

objective-c를 공부할 때부터 정확히 모르고 사용하던 명령어. 구글링을 통해 전역변수"처럼" 사용하고 싶은 변수가 있는 경우에 붙여주면 된다고 알고 있었다. member variable의 경우에는 해당 클래스에서 생성된 instance에 각각 생성되는 것으로 동일한 클래스에서 "찍혀나온" instance라 할지라도 서로 독립적인 메모리 공간을 할당받는다. 즉, 서로 다른 값을 저장할 수 있는 것(정확히는 가리키는 것)이다. 하지만 같은 클래스에서 찍혀나온 것들이 공통으로 가져야 하는 "값"이 필요한 경우에는 instance마다 독립적인 공간을 가질 필요가 없다. 이런 경우 static을 변수 앞에 붙여주게 된다. 결과적으로 클래스 변수라는 이름으로 불리고 있으며, 같은 클래스에서 찍혀나온 instance가 항상?? 동일한 값을 가지게 되는 변수가 된다.

의문점: static이 붙은 경우, 동일한 클래스에서 찍혀나온 instance가 동일한 값을 가지는 class variable을 instance마다 일일이 할당받는 것인지 혹은 하나의 값이 저장된 메모리 공간이 있고 이를 "가리키기만" 하는 것인지 확실하지 않다. 이 부분에 대한 것은 알고 지나가면 좋을 듯한 느낌이 든다.

2. public

이것을 앞에 붙이게 되면, 단순히 동일한 class 안에서만 공통적으로 사용될 수 있는 것이 아닌..같은 프로그램 안에서라면 어디서든 접근할 수 있는 변수가 된다. 말 그대로 진정한 전역변수가 되는 듯하다.

3. void

어떤 값을 입력 받고, 여러 가지 처리를 한 후에, 반환하는 값이 없다면 void를 쓴다.

신고

 

일류인생    친구신청

공용, 개인용, 반환없음, 전역
???맞나요?
아랫분이 말해주실거임

사막여우♥    친구신청

저도 공부하는 중이라 정확히 모르겠습니다 ㅋ 제 느낌에 대충 말씀하신게 맞는 듯한데요, 공부하면서 이해한 것들에 대해서는 제 나름대로 내용을 추가할 생각입니다.

덧글 달아주시는 분들께 죄송하지만..제가 적은 내용이 잘못된 곳에 대한 것은 조언을 해 주시면 감사하겠지만 제가 적지 않은 부분에 대한 자세한 설명은 적지 말아주셨으면 좋겠습니다. 댓글이 달리면 제가 그냥 쉽게 읽어버리게 되니까요 ^^;;;;

댓글이 달렸는데 안 읽을 수도 없고 ㅎㅎ

Coiie    친구신청

static 은 아직도 이해가 잘 않감...

사막의대리점    친구신청

static 변수는 전역변수로서 하나의 메모리를 차지합니다.
그래서 해당 함수가 종료되어도 초기화 되지 않죠.

프로그램 전체가 시작하고 끝날때 까지 딱 한번
종료될 때 초기화 됩니다.

동일한 값을 가지는 메모리를 계속 할당하는 것도 아니고, 어떠한 메모리를 포인터마냥 가르키기만 하는것도 아니고,

항상 전역변수 메모리인 data 메모리에, 그러니까 자료구조로 보자면 %i, %l 쯤 저장되고 항상 그 메모리에 접근하여 명령을 수행합니다.

사막여우♥    친구신청

후자가 맞는 설명이란 말씀이시군요.

저장공간은 하나. 멤버 변수는 동일한 곳을 가리킬 뿐.

저장 공간에 있는 값을 바꾸면 그 곳을 참조하고 있던 멤버 변수는 모두 다른 값으로 바뀌는 것처럼 되겠네요.

사자대빵    친구신청

전역변수와 static 변수는 비슷한 기능을 하는데요.
프로그램이 실행되게 되면 시작점함수(main) 함수에 진입하기 전에 전역변수가 먼저 메모리에 할당되게 되고, 그다음에 static 변수가 할당되게 되고 그담에 main 함수에 진입하게 됩니다.
static 변수는 전역변수와 다르게 적용 범위를 한정지을수가 있습니다. 특정 함수나 특정 클래스 내의 { } 사이에서만 접근이 가능하게 만들어질수가 있습니다.

사막여우♥    친구신청

헉 그렇군요. 전역변수가 main 함수 전에 메모리에 할당된다는걸 처음 알았습니다. 책 읽다보면 언젠가 나오겠죠?;;

조언 감사드려요 ㅠㅜ

사자대빵    친구신청

또 static을 함수나 클래스 멤버 함수로 사용하는 경우도 있는데요.
클래스 멤버 함수의 호출방식은 this 포인터를 이용해서 함수를 호출하도록 되어 있기 때문에 클래스의 메모리가 할당되지 않으면 멤버함수는 호출할수 없습니다만, static 클래스 멤버 함수의 경우는 this포인터를 사용하지 않고 일반 함수처럼 호출되도록 되어 있기 때문에 클래스 메모리를 할당하지 않더라도 멤버 함수를 호출할수 있고, this 포인터를 사용하지 않기 때문에 static 클래스 멤버함수 내에서는 this 포인터를 사용할 경우 컴파일 에러를 내게 됩니다.

사막여우♥    친구신청

헉 ㅠㅜ 아직 제가 이해하기 힘든 내용인 듯합니다. 나중에 무슨 말씀이신지 알게 되면 정리해야겠습니다. 제가 재미로만 공부하는거라 언제 정리할지 모르겠네요;
X