본문 바로가기
IT/자바

클래스 메소드 정확한 이해

by 독서실총무J 2017. 4. 30.
반응형

와우 !

벌써 네번째 복습 포스팅을 적고 있다

아직까지는 어렵지 않은 내용이라 그런지 나름 선전하고 있다

네번째날에 했던 예제들은 상대적으로 양이 작아서 

설명을 길게 적어야 할것 같다

한마디로 평화롭던 블로깅 중 오늘은 내게 위기라는 것이다


그전까지는 보는 사람까지도 민망할 정도로 항상 구글 검색에게 

모든 대리 설명을 떠넘기곤 했는데 오늘만은 나도 열심히

설명을 달아보도록 할테니 보는 여러분들도 초오집중해서 

내가 뭘 잘못 말하는지 말해주길 바란다


그렇다고 이것도 모르냐는 식의 꼰대스타일의 답변은

내가 아닌 그 누구더라도 싫어할테니 사이버 공간이지만

모두 아름다운 말과 매너있는 댓글을 달아주었으면 감사하겠다


이번에 다뤄볼 주제는 클래스와 메소드 이다

자바 같은 객체지향 프로그래밍에서 이둘은 중요하게 여겨지곤 하는데

어떻게 사용하냐에 따라 그사람의 실력을 알아볼수 있다고 한다


첫번째 클래스 메소드에 대한 예제를 보도록 하자


class First {

    void todoFirst() { Second s = new Second(); s.todoSecond(); } } class Second {     void todoSecond() { } } class Start {     public static void main(String[] args) { First f = new First(); f.todoFirst(); } }


하나의 자바 파일에는 하나의 클래스가 있는것이 좋다

아니, 좋다는 표현보다 당연히 그래야 한다

그러나 우리는 복습을 하며 배우는 단계이고 

여러개를 만들기 귀찮으니 여기서는 세개의 클래스를 

함께 적어 표현할것을 이해해주길 바란다


앞에서 언급했듯이 오늘은 구글에 힘을 빌리지 않고

모두 내가 설명할 것이라 약속 했으니 , 직접 클래스에 대하여 설명해주겠다


클래스는 필드와 메소드로 구성되는데, 

보통 자바 서적에서는 클래스를 설계도라고 비유한다

그러나 , 우리는 조금 더 쉽게 이해하기 위해서 다르게 생각해보자


서울 강남 한복판으로 나가보면 쌍둥이들이 그렇게나 많은데,

이부분에서 우리는 클래스의 정의를 좀더 쉽게 이해할수 있겠다

'김태희 얼굴처럼 해주세요 ~'

'한예슬 얼굴처럼 해주세요 ~'

등등 , 연예인 얼굴 클래스를 이용하여 많은 여성분들이 성형을 하고 있는 것이다


대충 클래스가 뭔지 감이 오지 않는가?

예상치 못한 획기적인 비유 때문에 감이 잡히지 않는 분들을 위해

부연 설명을 달자면 하나의 붕어빵 틀이라고 생각하면 된다

그걸 찍어내서 여러 종류 맛의 붕어빵을 만들어 낼수 있다  


처음 설명이 이해가 되지 않고 , 붕어빵을 한번도 못먹어본

사람이 있을지도 모르니 예제로 빠르게 이해해보도록 하자


First와 Second 클래스를 만들어 main문에서 

First형의 f라는 변수를 만들어 내고 있는 예제이다

이렇게 만들어진 f 변수는 First안에 있는 

todoFirst 메소드를 가지고 있는것이다 


todoFirst메소드 안에 있는 변수 s에 대해서는 스스로 생각해보자

코드도 짧아 몇번 쳐보고 출력하다보면 금방 이해할수 있을것이다

메소드를 호출할때에는 ' . ' 을 붙여서 할수 있다


class Some { int plus2(int n) { n += 2; return n; } void printResult(int n) { System.out.println(plus2(n)); } void todo(String str1, String str2) { System.out.println("첫번째 파라미터 : " + str1); System.out.println("두번째 파라미터 : " + str2); } void printClassName() { System.out.println("Some"); } } class UseSome { public static void main(String[] args) { Some s1 = new Some(); Some s2 = new Some(); Some s3 = new Some(); int num = s1.plus2(3); s1.todo("abc", "def"); s2.printResult(3); System.out.println(s3.plus2(4)); System.out.println(s3.plus2(40)); System.out.println(s3.plus2(400)); } }


두번째가 겉보기에 길어서 어려워 보이지만 

실상 첫번째보다 쉽다 s1, s2, s3라는 Some형 변수를 세개 만들어

 Some 안의 4개의 메소드 대로 실행하면 된다


까먹고 메소드의 형태에 대해서 언급을 안하였는데 

순서대로 자료형 이름 괄호 라고 보면 된다

괄호 안에는 매개변수가 들어간다


자료형에서 String은 문자열 ,  void는 반환값이 없는 형태이고,

나머지는 앞전에 포스팅에서 이야기 했으니 알아서 보고 오자


하나의 자판기를 생각하면 이해하기 더욱 쉬울것이다

매개변수라는 동전들을 넣으니 자료형에 맞는 음료가 나온다고 생각하자


코드가 그리 어려운건 아니니, 이번에도 직접 쳐볼것을 추천한다

내 블로그의 코드들은 모두 복붙이 가능하므로 붙여넣기 해도 상관은 없다

그러나 확실히 직접 쳐보고 실행하는것과 그렇지 않았던 것은

엄청난 차이가 있다 

 

class Dog {
	String name;
	String kind;
	String color;
	
	boolean hungry;	//배고픈지 아닌지

	void bark() {
		System.out.println("멍 멍 멍 ~");
	}

	String bite(String what) {
		System.out.println(what + "을(를) 물었습니다.");
		
		return what + "(물어뜯긴)";
	}

	boolean eat(String food) {
		if(hungry) {
		System.out.println(food + "을(를) 먹었습니다.");
			hungry = false;
		} else {
			System.out.prkntln("배가 불러서 안먹어요.");
		}
		return hungry;
		
	}

	void poop() {
		System.out.println("응가를 합니다.");
		hungry = true;
	}
}

class UseDog {
	public static void main(String[] args)	{
		Dog d = new Dog();
		d.name = "센세이션";
		d.kind = "믹스견";
		d.color = "검정";
		
		d.bark();
		d.eat("개껌");
		d.bite("가방");

	}
}


필드에 대해서 이번엔 말해보자 

필드는 상태를 , 앞서 말한 메소드는 행위 라고 생각하면 편하다

이 예제에서는 개의 이름과 종류, 색깔이라는 상태와 

짖기 , 물기 , 먹기 , 싸기 라는 행동이 

Dog라는 이름의 클래스로 지정해주었다


사실 정말 미안하지만 원래 첨에 이거부터 설명을 했어야 했는데 

소스정리를 잘못하여 뒤로 밀려나 있어서 이제야 설명을 한다

정말 미안하다


멍청하게 설명하는 나이지만 이걸 보고 있는 여러분들이

똑똑하니 아무문제 없을거라 예상하며 오늘은 여기까지 적고 끝내겠다


마지막 예제도 직접 해보길 바란다

옛날 자바강사님이 항상 백문이불여일타 라고 하셨다

당시에는 뭔 헛소리를 세련되게 하나 싶었는데

지금 생각해보면 정말 맞는말이다 


꼭 자신이 직접 치고 이해하는 과정을 거치도록 노력하자

노력은 배신을 하지 않는다고 하지 않는가


클래스와 메소드에 대한 이해도는 중요하니

나처럼 노력을 배신하지 말고 , 

꼭 쳐보는걸 추천한다


아, 그리고 외부서비스로 글을 발행 하였는데도 

네이버에 검색이 안되는게 걱정이다

N블로그 처럼 몇일 지나야 사이트에 보이는것인가?

정확하게 알수가 없어서 어떻게 해야될지 모르겠는데

여기에 대해서 자세하게 아시는 분은 댓글 달아주시면 감사하겠다


근데 이글을 누가 볼라나 모르겠다

어제도 딱 4명이 보았더라 

빨리 활성화 되었으면 좋겠다

반응형

'IT > 자바' 카테고리의 다른 글

Class 두번째 복습과 this  (0) 2017.05.02
클래스 사용 연습 및 복습  (0) 2017.05.02
조건문 switch 반복문 while for  (0) 2017.04.29
자바 형변환 if문 설명  (0) 2017.04.28
Scanner와 print 그리고 간단한 수식  (0) 2017.04.27

댓글