사막여우♥ MYPI

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

Category

Profile

Counter

  • 오늘 : 59 명
  • 전체 : 32528 명
  • 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 포인터를 사용할 경우 컴파일 에러를 내게 됩니다.

사막여우♥    친구신청

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

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

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

신고

 
[IT] JAVA: 클래스->객체(속성, 기능) (이거 공부하고 있어요) (2) 2012/10/03 AM 07:18
책을 그대로 배끼는 듯한 느낌이지만,

클래스에서 객체의 속성과 기능을 모두 정의하고 객체를 만들어낸다고 하네요.

Objective-C랑 대체 뭐가 다른 것인지 전혀 모르겠습니다;;

챕터 1,2,3에서는 C에서 나오는 것과 거의 똑같은 것들이 나오고 이제 객체지향성 어쩌구가 나오는데,

기본적인 개념이 완전히 같네요;;

책을 거의 10초에 한장씩 넘기다가 가끔 멈추고..이렇게 보고있습니다;

JAVA와 Objective-C의 다른 점이 나와야 뭔가 신명날 듯한 느낌!

신고

 

마왕의다리털    친구신청

C언어 계열의 객체지향 언어들의 기본 문법과 기초 개념이란 건 다 고만고만 하죠.
(전 오히려 그런 것 때문에 배우기 어렵더군요. "이게 이거였나 저게 이거였나..." 하면서...)
문법이 아니라, 내부적인 동작 원리에서 다른 점을 찾아보시면 어떨까요?

GC가 있느냐 없느냐, VM기반이냐 네이티브 기반이냐,
문법적으로 기본 제공해 주는 특별한 데이터형이나
특수 지원기능(멀티스레딩 지원이나 OS 통신 등)은 무엇인가...
뭐 이런걸 보셔야 될 듯......

아예 개념 자체가 다른 언어를 찾으신다면
함수형 언어나 선언형 언어들 중에 찾아보세요.
하스켈이나 프롤로그나.....

사막여우♥    친구신청

그런 부분까지는 제가 아직 왕초짜라 감이 없습니다 ^^;
문법적인 부분에서는 상당히 비슷하더라구요. 제가 objective-c를 공부할 때 가장 어려웠던 부분이 memory 관리 부분이었습니다. 이 부분을 JAVA에서는 garbage collector라는 녀석이 상당 부분 해결해준다고 책에 적혀있더군요. 공부하면서 차이점이 무엇인지 생각해봐야겠습니다.

조언 정말 감사드립니다!
[IT] 안드로이드 어플 만들려면 자바 공부하는게 맞죠?;; (13) 2012/10/03 AM 01:21
스쳐지나가는 글에서 자바라고 써있긴 했는데, 바로 책을 사러가서 그런지 갑자기 자바를 배우는게 맞는지 의문이 드네요;

일단 자바 책을 보고있는데 다른 것들은 어떤걸 공부해야하나요??

신고

 

관바    친구신청

자바 문법 공부하시고 안드로이드 SDK 공부하시면 됩니다.

120d_Coupe    친구신청

자바를 배우시고 안드로이드 프로그래밍을 공부하시면됨...

난설월화    친구신청

자바를 기본으로 깔고 안드로이드 API 쪽 공부하시면 됩니다

네멋대로해라    친구신청

자바 배우는게 맞긴 한데, 안드로이드 앱 개발자 수요 별로 없습니다.
자바스크립트 배워서 모바일 웹앱(or 하이브리드앱) 개발쪽을 파시는게 낫습니다.

난설월화    친구신청

웹쪽도 하시면 금상첨화

캐슬마인    친구신청

저희쪽은 수요가 많은데 네멋대로해라님쪽은 다른가보네요...

안드로이드 개발이 자바말고도 C계열언어에 NDK조합으로도 개발이 가능하다고 들었는데 보통은 자바에 이클립스로 개발하고요, 자바 기본적인 개념 익히고 안드로이드sdk깔아서 api참고하면서 공부하시면 될꺼예요.(자바 개념부터 시작하는 안드로이드개발책도 있습니다.)
안드로이드는 버전이 많이 나뉘어져있어서 사막여우님이 원하시는 버전에 맞게 책을 구입하시거나 해당API를 보시는걸 추천합니다. 공개용 어플을 만드실 계획이시라면 안드로이드 사이트가셔서 버전별 점유율을 참고하시고 만드시는게 좋을꺼예요. 그리고 제 주위에선 보통 공개용 어플을 만들면 갤럭시시리즈에 (해상도나 버전을)맞춰서 만들더군요.

Cereal_MK    친구신청

앱개발은 다른 기술과는 다르게 회사수요 맞춰서 줄줄 따라다닐필요도 굳이 없죠..

사업자 안내고도 수익창출이 가능하니깐.. (잘 만들었을경우)

잘 만들기만한다는 가정하에는 대기업이랑 맞짱뜰수도 있는게 어플..

네마리    친구신청

안드로이드 어플개발이면 자바+이클립스+안드로이드API 세개는 해야하구요. html5는 어렵겠지만 하시는게;;;

Cereal_MK    친구신청

입문용이시면 요즘 [자바기본입문 + 안드로이드 기초] 묶어서 자연스럽게 안드로이드까지 가르쳐주는 서적들 있습니다.

제가 보던책은 저자 - 강요천 '열혈강의 객체지향 JAVA'라는 책인데
전반적인 기초 들어있고 뒷부분에 안드로이드 포함되있어서 다떼면 자연스럽게 안드로이드로 넘어가더군요 그 뒤에는 안드로이드 전문 서적 파시면 될것같네요

기초서적은 자바랑 안드로이드 묶여있는책 사서 보시는걸 추천합니다

블러드    친구신청

C언어 포인터 까지 가면 레퍼런스 개념 이해하기 편하고, 자료구조 같은 기본기는 필수.

택틱스 오우거    친구신청

요즘은 하이브리드로 개발하는게 대세.... 유지보수때문에;

사막여우♥    친구신청

헉..댓글이 제 예상과 상당히 다른 방향으로 발전해버렸네요 ㅋ

전 그냥 재미로 공부하는거라서요 ㅠㅜ

프로그래밍을 좋아해서 C, objective-C, cocoa 이런걸 공부했습니다.

이번에 폰을 아이폰에서 갤3으로 바꾸고나니 JAVA도 관심이 생겨서 공부하는거에요 ㅎㅎ

다들 여러가지 조언 정말 감사드립니다.

루리웹-1986613    친구신청

참고로 자바 공부해도 안sdk 해보시면 나 머했지?

하는 생각 들거임

중요한건 자바에서 배운 개념들
[IT] 헠헠 헬로월드 (5) 2012/10/01 PM 08:39

헬로월드 완성했어요 ㅋ

신고

 

KRADLE    친구신청

어서오세요

평범한 일반인    친구신청

설마 프로그래밍 기초중에 기초를 배울때 나오는 Hello, world. 인가요?

사막여우♥    친구신청

네 맞아요 ㅋ 자바 오늘 책 사서 처음부터 보고있어요~

잇힝읏흥    친구신청

생각해보면 이때가 제일 행복했습니다.

캐슬마인    친구신청

축하드려요
이전 현재페이지6 7 8 9 10
X