사막여우♥ MYPI

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

Category

Profile

Counter

  • 오늘 : 14 명
  • 전체 : 32455 명
  • Mypi Ver. 0.3.1 β
[Object-Oriented Programming] 매개 변수로 기본형을 넘기느냐 메모리주소를 넘기느냐 (6) 2012/10/03 AM 11:07
기본형을 넘기면 단순히 넘겨받은 "값"만을 이용할 수 있는 것.

메모리주소를 넘겨받으면 해당메모리 주소의 값을 대체할 수 있기 때문에 이용 및 변경이 가능하게 된다.

-------------------------

코딩을 잘못하는 경우, 전투가 끝났는데 경험치가 오르지 않을 수도 있을 듯하다. (기본형으로 넘겨받은 경우)

신고

 

당근천국    친구신청

용도에 따라 다르죠.
원래 함수는 원리턴이 기본으로 해야 합니다.
하지만 불가피한 상황이라면 포인터로 넘겨서 값을 리턴 받아야죠.

물론 뒤로가면 다른 문제때문에 포인터남발하는 경우가 있습니다만....,일단 배울때는 원리턴이 기본이라는거 꼭 깔고 가셔야 함요~

파동함수의신    친구신청

콜바이밸류, 콜바이래퍼런스인가?

사막여우♥    친구신청

헉 원리턴이 기본이군요.

아직 그런 내용까지 나오질 않아서 ㅠㅜ

기억하고 있겠습니다.

bigthewar    친구신청

이 포인터라는게 남발하게되면 코드가 많이 꼬이게 되는것도 사실이죠... 그래서 윗분 말씀대로 기본이 중요한거구요. 공부 힘내세요

TommyLee    친구신청

원리턴이란게 뭐지 -_-;;
프로그램질 10년 가까이 하고있는데 원리턴이란건 처음 듣는듯...
값을 리턴하는걸 원리턴이라고 하는 건지...

함수 구현에 원칙이란 건 없습니다.
적재적소에 용도에 알맞게 구현하는게 중요하죠
프로그래머에게 중요한 소양 중 하나는 자유로운 사고방식입니다.
"꼭 이래야한다"라는 사고방식은 천재 or 고수 프로그래머가 아닌 이상
업무든 인간 관계에서든 좋지않은 결과를 가져옵니다..

사막여우♥    친구신청

책 보는데 자꾸 리턴 없는 예시가 나와서 답답했는데, 여러 가지 방법이 있다고 생각하고 넘어가기로 했습니다.

개인적으로 리턴을 없애버리고 메모리참조로 해결하는게 느낌이 좋아요 ㅋ
[Object-Oriented Programming] public static void main(String[] args) (0) 2012/10/03 AM 11:00
어디서든 가능해야 하니까 public.

main 함수는 일단은 하나만 존재해야 하니까 static.

main 함수의 종료(즉, return)는 프로그램의 종료를 뜻하니까 반환하는 값이 없어야 하므로 void.

뒷 부분은 아직 잘 모름;

신고

 
[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 포인터를 사용할 경우 컴파일 에러를 내게 됩니다.

사막여우♥    친구신청

헉 ㅠㅜ 아직 제가 이해하기 힘든 내용인 듯합니다. 나중에 무슨 말씀이신지 알게 되면 정리해야겠습니다. 제가 재미로만 공부하는거라 언제 정리할지 모르겠네요;
[Object-Oriented Programming] 같은 형태를 반복적으로 정의해야 하는 경우? (0) 2012/10/03 AM 09:49
Time1, Time2, Time3... 혹은 Time[3] 이렇게 하나하나 혹은 배열로 정의를 할 수도 있지만,

Class Time이라는 하나의 클래스를 만들어서 사용하면 각각의 구분이 쉽고 햇갈릴 염려가 없어지기 때문에 편리해진다.

이런 부분이 객체지향 프로그래밍의 장점이라고 할 수 있다.

신고

 
현재페이지1
X