안녕하세요~ 매니입니다 이번에는
'객체'라는 것에 대해 포스팅 해보겠습니다.
'객체'는 자신만의 고유한 특성과 행동을 가지며 다른 객체와 상호 작용하는 존재죠
'객체 지향 언어'란 모든 것을 객체라는 개념으로 프로그래밍한다 이런 것입니다.
그리고 객체를 알려면 클래스를 알아야 합니다 왜냐면
자바는 '클래스'안에 프로그래밍 해야 하기 때문입니다.
본론부터 말하자면 클래스는 설계도 이고
슬라임, 스텀프, 달팽이란 이름의 클래스들이 존재하고
이 클래스(설계도)들을 이용해 슬라임, 스텀프, 달팽이등등 객체를 만듭니다.
그리고 메인함수가 있는 'MapleStory'라는 클래스는 실행이 되면서
그 프로그램의 껍데기 객체가 되죠
다시말해 메인함수가 있는 'Maplestory' 클래스는 바로 'MapleStory'란 껍데기 객체가 되고
'MapleStory'껍데기 객체 안에 있는 메인함수에서
수많은 클래스로 수많은 객체들(몬스터,유저,NPC,아이템등)을 만들어
객체들이 상호작용하는 MapleStory라는 객체(게임이)가 완성 되는 것이죠.
그래서 자바는 '객체 지향 언어' 라고 합니다.
C언어에서는
메인 함수가 들어있는 소스파일과
다른 여러 소스파일들이 있다가 결국 나중에
링크(하나로 합쳐) 프로그램을 만들지만
자바는 메인 함수가 들어 있는 클래스와 다른 클래스들을 이용한 객체들을
한 곳에 모아 하나의 프로그램으로 만드는 것이죠
참고로 객체를 만드는 방법은
좀더 이해를 쉽게 하기 위해 앞서 말한 메이플스토리 를 예시로 들어보겠습니다.
이런식으로 클래스 이름과 똑같은 함수(메소드)를 우리는
이 생성자는 같은 이름이지만
매개변수의 수를 다르게 하거나
매개변수 타입을 다르게 해서
여러개의 생성자를 만들 수 있습니다.
왜 생성자를 여러개를 만드느냐? 라는 것에 대한 답변은
예시를 든 것처럼 케릭터를 만들 때 여성으로 할 건지 남성으로 할건지와 같은
옵션을 더 할 수 있기 때문입니다.
'객체'라는 것에 대해 포스팅 해보겠습니다.
먼저 자바는 '객체 지향 언어'라고 합니다
그리고'객체'는 자신만의 고유한 특성과 행동을 가지며 다른 객체와 상호 작용하는 존재죠
'객체 지향 언어'란 모든 것을 객체라는 개념으로 프로그래밍한다 이런 것입니다.
그리고 객체를 알려면 클래스를 알아야 합니다 왜냐면
자바는 '클래스'안에 프로그래밍 해야 하기 때문입니다.
본론부터 말하자면 클래스는 설계도 이고
객체는 설계도를 이용해 만들어진 것(객체) 입니다.
대부분이 공감하실 '메이플스토리'라는 게임으로 예시를 들어보자면,
이 클래스(설계도)들을 이용해 슬라임, 스텀프, 달팽이등등 객체를 만듭니다.
그리고 메인함수가 있는 'MapleStory'라는 클래스는 실행이 되면서
그 프로그램의 껍데기 객체가 되죠
다시말해 메인함수가 있는 'Maplestory' 클래스는 바로 'MapleStory'란 껍데기 객체가 되고
'MapleStory'껍데기 객체 안에 있는 메인함수에서
수많은 클래스로 수많은 객체들(몬스터,유저,NPC,아이템등)을 만들어
객체들이 상호작용하는 MapleStory라는 객체(게임이)가 완성 되는 것이죠.
그래서 자바는 '객체 지향 언어' 라고 합니다.
C언어에서는
메인 함수가 들어있는 소스파일과
다른 여러 소스파일들이 있다가 결국 나중에
링크(하나로 합쳐) 프로그램을 만들지만
자바는 메인 함수가 들어 있는 클래스와 다른 클래스들을 이용한 객체들을
한 곳에 모아 하나의 프로그램으로 만드는 것이죠
참고로 객체를 만드는 방법은
클래스이름 레퍼런스 = new 생성자이름();
입니다.
클래스 = 직업
레퍼런스 = 유저 닉네임
생성자 = 세부 사항(처음 캐릭터 만들 때 여자인지 남자냐 부터, 마법사 2차 전직이면 불독일지 썬콜인지 같은 개념)
캐릭터 = 객체
이렇게 말이죠.
즉,
클래스이름 레퍼런스 = new 생성자이름();
↓↓↓↓↓↓↓↓
직업 유저닉네임 = new 세부사항;
이렇게 말이죠
자 저희가 메이플 처음 아이디를 만들 때
저희는 먼저 처음에 어떤 직업(모험가, 시그너스, 아란 등등...)을
고를지와 저희들이 사용할 이름을 정하죠?
이렇게 처음에 직업을 고르는데 저희는
직업을 클래스라 하기로 했죠?
메이플에는 많은 직업이 있지만(똥겜)
간단히 모험가(위대한)와 팬텀만 표현해 봅시다.
대충 자바로 표현해보면
이런식으로 대충 모험가와 팬텀 직업을 만들었습니다.
그리고 저는 직업을
갓모험가로 정했습니다.
직업(클래스)를 골랐으니 이름을 정해야겠죠?
왜 이름을 지어줘야 하냐면, 모험가인 객체는 수없이 많기 때문에
이름이 없으면 구분이 안되기 때문입니다.
(내가 그의 이름을 불러주었을 때 그는 나에게로 와서 꽃이 되었다 - 김춘수 작가의 "꽃")
저는 제 캐릭터에게 전설의 모험가 이름인 "타락파워전사"를
붙여줬다고 칩시다.
이렇게 말이죠, 하지만 자바의 특징이 있습니다.
자바에서 객체의 이름(레퍼런스)은, 객체의 이름을 만들 때 사용한 클래스로
만들어진 객체들만 사용할 수 있게 되어 있습니다.
다시말해 이 "타락파워전사"라는 이름(레퍼런스)은
모험가 직업(클래스)으로 만들었기에
모험가 캐릭터(객체)만 쓸 수 있다는 것입니다.
물론 자바의 특징인 '상속'을 받은 클래스는
말 그대로 부모의 클래스의 특징(멤버)들을 고스란히 받았기에
자식 클래스로 만든 객체는 부모클래스로 만든 이름을 사용할 수 있습니다.
이것을 '업캐스팅'이라 하는데 이건 추후에 다른 좀 더 자세히 다룰게요
또 이름의 개념이기 때문에 객체라는 것은 원래
여러개의 이름을 가질 수 있죠?
예로들어
한국어 "불꽃놀이"는
영어로는 "Fireworks"이고
일본어로는 "하나비" 인 것 처럼 말이죠
이렇게
최초의만렙러= 타락파워전사 라는 식으로 코드를 쓰면
자바에서는 "타락파워전사"가 가리키던 여성 캐릭터 객체가
"최초의만렙러"라는 이름도 갖게 됩니다.
그림을 보시죠
네, 글씨 정말 못쓰네요.
악필이라 죄송합니다.. 빨리 쓰려다보니 대충 쓴것도 있어요 ㅠㅠ
어쨋든 ... 저 위에 그림은 코드를 쓰고
밑에 회색펜으로 표시한 것이 코드가 실행됐을 때 모습입니다.
밑에 회색펜으로 표시한 것이 코드가 실행됐을 때 모습입니다.
최초의만렙러 = 타락파워전사 ;
이와같이 코드를 썼을 땐
"타락파워전사"라는 이름을 가진 객체가
"최초의 만렙러"라는 이름도 갖게된다는 것입니다.
여기까지의 과정이
클래스이름 레퍼런스
| |
직업 유저닉네임
| |
모험가 타락파워전사
이고, 모험가 직업의 이름 "타락파워전사" 까지 만든겁니다.
이제 이 이름을 사용할 수 있는 모험가 캐릭터만 있으면 되죠.
계속해서
머리모양이나, 얼굴생김새, 성별을 골라야하는데
그냥 간단하게(귀찮으니) 성별만 고른다 칩시다.
저는 당연히!
타락파워전사를 남자...
가 아닌 여자로 해보겠습니다 (타락파워전사님 죄송합니다.)
평범하면 재미가 아리마셍!
이런식으로 클래스 이름과 똑같은 함수(메소드)를 우리는
'생성자' 라고 하는데요
이 생성자는 같은 이름이지만
매개변수의 수를 다르게 하거나
매개변수 타입을 다르게 해서
여러개의 생성자를 만들 수 있습니다.
왜 생성자를 여러개를 만드느냐? 라는 것에 대한 답변은
예시를 든 것처럼 케릭터를 만들 때 여성으로 할 건지 남성으로 할건지와 같은
옵션을 더 할 수 있기 때문입니다.
Adventurer 타락파워전사 = new Adventurer(1);
이렇게 매개변수 정수 1를 받는 생성자로 객체를 만들면
모험가인 남자 캐릭터가 생성돼 모험가만 쓸 수 있는 이름 "타락파워전사"를 갖게 되고
Adventurer 타락파워전사 = new Adventurer():
와 같이 매개변수가 없는 생성자(세부사항) Adventurer()를 쓰면
모험가인 여자 캐릭터가 만들어져 모험가만 쓸 수 있는 이름 "타락파워전사"을 갖게 된다 치는거죠
다시 정리해볼게요.
이렇게 new 라는 명령어 뒤에 여자 모험가를 만드는 생성자를 써서
여자 모험가가 만들어 졌고 //new Adventurer();
'타락파워전사' 라는 모험가만 쓸 수 있는 이름을 만들었습니다.//Adventurer 타락파워전사;
이제 만들어진 여자 모험가에게 , 전설의 모험가 이름인 '타락파워전사'를 붙여줍니다
//Adventurer 타락파워전사 = new Adventurer();
이렇게 되면 최종적으로
성별은 여자
직업은 모험가
레벨은 1
체력인 50
마나는 50인
"타락파워전사"라는 케릭터(객체)가 생성이 된겁니다!
자바를 첨 공부하시는 분들을 위해 나름 열심히(아주 열심히)
포스팅을 해봤는데 꼭 도움이 됐으면 좋겠습니다 !
포스팅을 해봤는데 꼭 도움이 됐으면 좋겠습니다 !
도움이 되셨다면 댓글을 남겨주시거나 팔로우 버튼 눌러주시면 정말 감사하겠습니다!
혹시 오타나, 틀린 개념이 있다면 댓글로 지적해주시면 바로 수정하겠습니다!
댓글 없음:
댓글 쓰기
#1 여러분들이 소중한 시간을 투자해 달아주시는 따뜻한 댓글들은 저에게 정말 큰 힘이 됩니다!
#2 저의 각 포스트들은 엄청난 노력과 시간 투자를 통해 만들어진 포스트들로, 무단 복제나 모방하는 것을 금지합니다.
#3 저의 포스트에도 틀린 정보가 있을 수도 있습니다. 그럴 경우 친절한 말투로 근거와 함께 댓글로 달아주시면 정말 감사하겠습니다!