본문 바로가기

공부/컴퓨터

클래스 및 메소드에 대한 잡다한 생각....

반응형
코드인에 적었던글을 옮겨 붙임. ㅋㅋ
요즘엔 글 쓰는것도 귀찮아서 참. ;;;
http://cafe.naver.com/javacircle/14870


안녕하세요.
  찬 입니다.
 
파일럿프로젝트 -_- 너무 길어서 PP 라고 했습니다. ㅋㅋ
오늘은 그냥 잡다한 생각을 한번 나열해 보려고 합니다. ㅎㅎ
 
 
우리가 일반적으로 만들어서 쓰는 클래스와.. 그리고 그 행동을 하는 메소드에 대한 이야기입니다.
 
 
다들 잘 알다시피.. 문장은 명사와 동사가 있습니다.
 
"주사위를 굴린다."
 
라는 문장이 있으면..
 
 
"주사위" 라는 명사와   "굴린다" 라는 동사를 찾을 수 있습니다.
이렇게 구해진 명사와 동사를 이용해서 클래스를 만들어 보도록 합니다.
class 주사위 {
    public int 굴린다() { .. }
}
 
 
흠.. 잘 만들어 졌네요...
 
 
그럼 이제 이 놈을 한번 실행해 볼까요?
주사위 육면체주사위 = new  주사위();
 
육면체주사위.굴린다();  

 
 
네. 저런식으로 쓸 수 있을것 같네요..
 
저런식으로 사용한다면 다음과 같이 해석해야 겠죠..
 
"육면체주사위를 굴린다." 즉.. 어떠한 사람이 굴렸는지는 모르고, 육면체 주사위 "를" 굴리는게 되죠..
 
 
그럼 저기다가 사람을 한번 넣어 볼까요?
class 사람 {
    public void 굴린다 (주사위) { 
        주사위.굴린다();
    }
}
 
 
그러면.. 자 실행을 해 보죠..
사람  찬 = new  사람();
주사위 육면체주사위 = new 주사위();
찬.굴린다(육면체주사위);
 
 
그냥 보기에는 문제가 없어 보입니다.  객체와 메소드 만을 한번 읽어 보겠습니다.
 
 
1. 찬.굴린다(육면체주사위);    //  "찬" "굴린다"
2. 육면체주사위.굴린다();       //  "육면체주사위" "굴린다";
 
저런식으로 읽게 됩니다.
 
 
"찬"  과  "육면체주사위" 는... 위와 같이 똑같이 문장의 주체가 되지만...
 
"찬" 은.. "~이/가/은/는" 가 붙는 주어가 되고...
"육면체주사위" 는 "~을/를" 이 붙는.. 목적어가 됩니다.
 
즉, 똑같은 객체.메소드() 라는 문장이 두가지의 해석이( 주어 또는 목적어 ) 가능해 지게 됩니다.
통일 되지 않은 방법으로 문장을 읽을 수 있는 소지가 있다는 말이죠..
 
 
 
만약 육면체주사위가 어떠한 동물이라고 알고 있는 아프리카 깊숙한 곳의 사람이 와서
"육면체주사위" "굴린다" 라고.. 읽으면 어떻게 되죠?
주사위가 스스로 굴려질 수는 없는 일이죠. ㅎㅎ
 
 
 
일반적인 문법으로는 명사가 무엇을 한다 라고 되어져야 하는데... 
주사위는 무엇을 본인 스스로 할 수 없기 때문에..
그럴려면 "주사위가" "굴려진다" 가 되어야 합니다.
 
 
즉, 주사위는.. 누군가에게서 굴림을 "당하는 입장"이 되어야 하죠..
자동사와 타동사.. 스스로 할 수 있나? 아니면 남이 하게 만들어 주는것인가에 대한 생각을 해 봐야 할겁니다.
 
자연스럽게 말을 바꿀려면 "육면체주사위가 굴려진다 - ( 굴려짐을 당한다 )" 가 되어야 겠죠?
그럼 아래에서는 굴려짐을 당한다 라는 메소드를 만들어서 처리를 해 보도록 하죠
 
 
 
 
 
 
그럼 다시 생각해 보죠..
 
"찬이 주사위를 굴린다."
 
 
흠.. 이번에는 "찬" 이라는 명사가 하나 들어 갔네요..
그러므로 사람이라는 클래스를 만들고, 찬이라는 객체를 만들어야 겠네요.. 흠..
 
그리고 주사위는 "찬"에 의해서.. 굴려지게 되는거죠?
거기에 맞도록 한번 짜 봅시다.
 
class 주사위 {
    public int 굴려진다() { ... }
}
 
 
class 사람 {
    public void 굴린다(주사위 육면체주사위) {
        육면체주사위.굴려진다();
    }
}
 
 
자.. 클래스 정의를 다 했으니
그럼..사용해 봅시다.
사람 찬 = new 사람();
주사위 육면체주사위 = new 주사위();
 
찬.굴린다(육면체주사위);
 
네.. 이렇게 하면.. 됩니다. 그러면 이제 다시 읽어 보죠..
 
 
1. 찬.굴린다(육면체주사위);    //    "찬".. "육면체 주사위"를 "굴리고"
2. 육면체주사위.굴려진다();    //    "육면체주사위"  "굴려진다" 가 되는군요.. ㅎㅎ
 
 
그러면. 말의 아구가 딱 맞아 떨어 지는군요..
 
 
 
물론. 한글과 영어의 차이에 의해서 그리 소용없는 짓일 수도 있을듯 합니다.
 
하지만 메소드를 하나 하나 만들어 갈때..
저런점에 조금더 신경을 쓰고 모양을 내면.
좀 더 낳은 코드가 나오지 않을까 합니다. ㅎㅎ
 
 
이런 글을 쓰면서 항상 하는 말이지만
아니면 말고 말입니다. ㅎㅎ
 
 
즐거운 하루 되세요~ ^_^
반응형