지난 포스팅까지 기본 문법을 정리했는데요. 어찌보면, 지금부터 정리하는 클래스가 제대로 된 JAVA프로그래밍의 주요 내용일 것 같네요.

클래스라고 하는 것이 없이는 JAVA프로그래밍이 없다고 해도 과언이 아닌데요. 그 이유는 자바가 클래스로부터 인스턴스인 객체를 생성함으로써 프로그램이 만들어지기 때문이죠.

클래스클래스헤더(선언)와 클래스멤버로 이루어지고, 클래스멤버멤버변수(클래스가 가지는 속성 정리), 생성자(constructor:객체 초기화 담당), 그리고 메소드(method:클래스가 가지는 데이터를 조작,변환)로 이루어진다.

위의 예제에서 보면, 클래스헤더 멤버변수, 메소드로 이루어져 있습니다. (생성자는 생략되어 있다.)

  • (1) 클래스 선언

    클래스를 선언할 때에는 한정자를 이용해서 생성할 수 있다.

[public/final/abstract] class Class-name { //클래스 헤더부분

………… // 클래스 멤버부분

}

- public : 모든 클래스에서 접근 가능한 한정자 (따로 지정이 없으면 main()이 있는 클래스를 public으로 인식)

- final : 더 이상의 서브클래스를 가지지 못하는 한정자

- abstract : 추상클래스 - 객체를 생성할 수 없는 한정자

  • (2) 객체의 생성

    객체를 생성하기 위해서는 객체를 선언하고, 그 후 생성을 하게 되는데, 보통 동시에 하나의 문장으로도선언과 생성을 할 수 있다.

    객체의 선언 : 클래스명 객체참조변수;

    객체의 생성 : 객체참조변수 = new 클래스명;

    객체의 선언과 생성을 한 문장에 : 클래스명 객체참조변수 = new 클래스명( );

  • (3) 멤버 변수

    멤버변수는 메소드 밖에서 선언된 변수입니다. 멤버변수는 크게 객체변수(객체속성변수와 객체참조변수)와 클래스변수, 종단(final)변수로 나뉘어집니다.

[public/private] [static/final] 변수타입 변수명;

한정자(public/private)의 차이는 클래스 내에서 멤버변수의 접근의 제한 범위에 따라 다른 것으로 public은 항상 접근이 가능하며, private는 캡슐화(encapsulation)가 적용되어 소속된 클래스 내에서만 사용할 수 있다.

그 다음, 변수의 타입을 선언하는 static/final 객체변수(객체속성변수, 객체참조변수)와 클래스변수(static), 그리고 종단변수(final)로 구분되는 구분자이다.

가) 객체변수

- 객체참조변수 : 생성된 객체를 지정하는 변수

- 객체속성변수 : 값을 가지는 변수

나) 클래스변수

- 클래스변수는 전역변수(global)의 개념을 가지며, 하나의 응용프로그램 내에서 하나의 클래스변수를 공유한다.

다) 종단변수

- 변수라고 정의는 되어있지만, 변하지 않는 상수값을 가지게 된다. 따라서 final이 붙은 변수는 딱 한번의 초기화를 하면, 그 이후에는 값을 변할 수 없다. (종단변수는 관례상 대문자를 써서 표현한다)

  • (4) 생성자 (Constructor)

    생성자는 주로 객체변수를 초기화할 필요가 있을 때 사용하며, 생성자의 이름은 반드시 클래스의 이름과 동일하여야 한다.

[public/private] 클래스이름(매개변수) {
…….. //초기화 문장
}

생성자에서도 public과 private의 한정자를 사용할 수 있으나, 일반적으로 생성자에서는 private를 사용하지 않습니다.

특이한 것은, 하나의 클래스 내에서 여러 개의 생성자를 사용할 수 있습니다. 아까 생성자의 이름은 클래스의 이름과 반드시 같아야 하는데, 어떻게 여러 개를 쓸 수 있을까요?

오버로딩(Overloading)이라고 하는 개념인데요.. (스타크래프트 저그의 오버로드를 생각하신 분들 계시나요? -_-;; 에이~ 있잖아요~)

같은 이름의 생성자를 매개변수의 타입이나 개수를 다르게 해서 쓸 수 있는데요. 매게변수에 따라 각기 다른 생성자를 찾아서 객체생성을 합니다.

  • (5) 메소드 (method)

    오늘 정리할 마지막 부분입니다. 역시나 클래스에 대해서 정리할 내용이 좀 많은 것 같네요. 자, 마지막까지 열심히 정리해 봅시다~

[public/private] [static/final/abstract/synchronized] 반환값타입 메소드이름([매개변수들]) {
………… //지역변수 선언 및 메소드 행위 기술
}

메소드는 클래스 내에서 할 수 있는 행동을 정의하는 것으로 실제 행위를 하는 부분이라고 보면 됩니다. 메소드이름은 소문자로 시작하는 것이 관례입니다.

가) 접근한정자 (public/private) : 앞서 여러 번 설명한 것과 같이 접근의 제한 범위를 선언합니다.

나) 클래스 메소드 (static)

- 변수에도 클래스 변수가 있듯이 메소드에도 클래스 메소드를 사용할 수 있다.

다) final : 서브 클래스에서 오버라이딩(overriding)될 수 없다. (상속부분에서 다시 설명)

라) abstract : 추상메소드로 추상클래스 내에서 선언될 수 있다. (상속부분에서 다시 설명)

마) synchronized : 스레드를 동기화 할 수 있는 기법을 위해 사용. (다중스레드 부분에서 다시 설명)

메소드 선언부에서는 반환값에 대한 자료형이 선언되고, return문으로 반환된다. 만약 반환값이 없을 경우에는 void를 지정한다.

그리고, 위에 설명한 생성자의 오버로딩과 같이 메소드에서도 오버로딩(Overloading)을 사용할 수 있으며, 실제적으로도 프로그래밍에서 자주 사용되는 개념이라고 하니, 잘 알아두어야 합니다.

Argument passing(값 전달 방식) : 메소드에 값을 전달하는 방법은 실제적인 변수 값을 전달하는 방식(call by value)과 참조자료형변수(객체의 주소)형태로 전달하는 방식을 가지고 있습니다. 이 두가지 방식의 차이는 값-전달의 경우는 관계가 없지만, 주소전달방식은 매개변수의 값이 변하면 그 주소를 참조하는 메소드에 전달되는 값도 변하게 되는 차이가 있습니다.

Recursive(재귀적 호출) : 메소드를 정리함에 있어서 재귀적 호출을 마지막으로 정리해봅니다. 재귀적 호출은 자신이 반복되어 수행되는 것을 의미합니다. 일반적으로 팩토리얼과 하노이타워 프로그램을 제작할때에 사용할 수 있습니다.

이 팩토리얼 프로그램에서처럼 사용자 입력값을 메소드에서 처리하는 과정에서 0이 아닐경우에 -1씩을 감해가면서 자기 자신의 메소드를 계속 반복해서 호출하는 방식을 취합니다. 이 경우, return값이 계속 메모리상에 남아 있으면서 r값에 돌아오면서 곱해가면서 최종적으로 모든 값을 곱한 값을 return하게 됩니다.

자, 이제 클래스에 대해서 정리가 다 되었네요~ 점점 좀 복잡해지는 것이 느껴지시나요? 다음 포스팅에서는 내용은 그리 많지 않지만, 자바 언어의 실행환경에 있어서 중요한 개념인 JVM(자바가상머신)에서 처리되는 메모리모델에 대해 정리해 보도록 하겠습니다.

   


 - 일반행정직

 - 검찰직공무원

 - 경찰공무원

 - 교정직공무원

 - 사회복지직공무원

 - 환경직공무원

 - 감사직공무원

 - 화공직공무원

 - 농업직공무원

 - 보건직공무원

 - 사서직공무원

 - 외무영사직공무원

 - 임업직공무원

 - 전산직공무원

 ● 유망자격증 기출문제

 - 소방공무원

 - 교육행정직공무원

 - 세무직공무원

 - 10급공무원

 - 토목직공무원

 - 간호직공무원

 - 건축직공무원

 - 농업연구사

 - 농촌지도사

 - 보호직공무원

 - 식품위생직공무원

 - 의료기술직공무원

 - 전기직공무원

 - 출입국관리직공무원

 ● 공무원 최신자료 받기


 - 4대보험관리사

 - 결혼상담사

 - 공인중개사

 - 노인여가건강관리사

 - 농산물품질관리사

 - 도로교통사고감정사

 - 사회복지사1급

 - 소비자전문상담사

 - 실버시터상담지도사

 - 아동심리상담사

 - 영재놀이지도사

 - 주택관리사

 - 치매예방관리사

 - 저작권관리사

 - 일반행정사

 - PIA사설정보관리사

 - 건강식이요법사

 - 경호(경비)지도사

 - 노인심리상담사

 - 노후생활설계사

 - 다문화가정상담사

 - 속기사

 - 심리상담사

 - 연예인관리사

 - 장례지도사

 - 직업상담사

 - 유기농관리사

 - [방과후]교육마술지도사

-[방과후]창의사고력지도사

 - [학점은행제]사회복지사

  1. 2011.02.10 14:39 신고 [Edit/Del] [Reply]
    앗..1등이다
    좋은 정보 잘보고 갑니다...
    솔직히 정독은 못하고 가네요ㅡ.ㅡ
    즐거운 하루 되세요^^
  2. 2011.02.10 18:27 신고 [Edit/Del] [Reply]
    저두,...너무 어려운 말들이~ ㅠ.ㅠ
    암튼 잘 보고 갑니다 ^^
  3. 2011.02.12 16:30 신고 [Edit/Del] [Reply]
    몸은 좀 괜찮으세요?
    어제 모임은 즐거웠습니다~
    술을 안드시니 살짝 놀랐지만요 ㅎㅎ
    다음에 또 들어오시면 뵈염 ^^
    • 2011.02.12 18:30 신고 [Edit/Del]
      체했던 거 같아요. 이제 좀 살만합니다.ㅎㅎ

      살짝 놀래시는 분들 많더라구요..ㅋㅋ

      담에 꼭 불러주세요~ ㅎㅎ -_-;; 가능하면 날라오면 좋으련만..ㅋ
  4. 2011.02.12 20:31 신고 [Edit/Del] [Reply]
    ㅋㅋㅋ
    한스미님이 회색바탕이 좋다고해서 바로 바꾸고....ㅋㅋ
    타이틀 너무 혼란스러우면 안 좋다는 말에 또 바꿨습니다 ㅋ
    깔끔한게 좋네요 ㅋㅋ
    밥사이다님 잘 가세요~ 다음에 또 한국오면 봬요!!ㅋㅋ
    • 2011.02.12 22:09 신고 [Edit/Del]
      우와~ 부지런하시네요~

      바로 달려가서 인증댓글 하나 날렸습니다.ㅋㅋ

      앞으로 정모한다면 얼마나 가고싶을까... ^^;

      아무튼 좋은 시간 잘 보냈습니다~
  5. 꿀병자리
    2011.03.30 22:14 [Edit/Del] [Reply]
    멋져요 ^_^ 지금 하나씩 보고있어요.ㅠㅠ

    설명이 정말 잘 요약되어있어요.
  6. 빗물방울
    2011.07.04 21:55 [Edit/Del] [Reply]
    고등학교에서 배워도 개념이 깔끔하게 정리가 잘 안 되어서 걱정이었는데,
    설명이 정말 깔끔하게 잘 되어있네요^^
    자주 오겠습니다~ㅎㅎ

댓글을 남겨주세요

Name *

Password *

Link (Your Homepage or Blog)

Comment

Secret