ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 1. Java 기본 구조
    CSE/Java 2015. 7. 24. 13:52

    1. Java 기본 구조

     기본적인 Java 프로그램이 어떻게 구성되어 있는지 확인해 보도록 하겠습니다! 

     자바에서는 모든 것(객체)을 class 키워드를 사용하여 형상화한 뒤 이를 통해 만든 객체로 처리합니다.

     그럼 전반적인 요소들을 파악하기 위해 이번 장을 진행하도록 하겠습니다.



    1.1 간단한 프로그램

      자바 프로그램은 한 개 이상의 클래스로 구성합니다. 

      클래스는 한 개 이상의 필드(field)메서드(method)로 구성합니다.




      [예제1] 화면에 Hello Java를 출력하는 코드를 생성하라. 


    1
    2
    3
    4
    5
    6
    7
    8
    package exam1;
     
    public class Hello {
        public static void main(String[] args) {
            System.out.println("Hello Java");
        }
    }
     
    cs




     결과 화면.









      자바 프로그램은 아래 규칙을 지켜야 합니다.

      - 자바로 작성한 소스 파일 이름은 하나의 프로젝트에 여러 개의 클래스들이 있어도 소스 파일 이름과 동일한 클래스 앞에만 public 접근 지정자를 붙일 수 있습니다.

      - 소스 파일명은 public이 붙은 클래스의 이름과 동일해야 합니다. 만약 다르면 컴파일 과정에서 오류가 발생합니다. 모든 자바 소스 코드는 .java 확장자로 끝납니다.


     

     1.1.1 클래스(Class)

        클래스는 개념을 형상화한 것이고, 인스턴스는 현재 존재하고 있는 것입니다.

        클래스는 객체에서 공통된 상태와 행동을 모델링한 것으로 설계도와 유사하며, 다음과 같은 구성요소로 이루어 집니다.

         - 필드(field): 객체에 속한 데이터(객체의 상태, 속성, 특징, 정보, 명사적 의미)를 저장할 변수

         - 메서드(method): 필드 상태를 조작할 수 있는 함수

         - 객체의 행위(behavior, 행동, 동작, 기능, 방법, 데이터 조작, 동사적 의미)


        객체란 실 세계에 존재하는 모든 것(일상 생활에서 볼 수 있는 사물)과 아이디어 같은 개념을 총칭합니다. 모든 객체는 상태(state)와 행위(behavior)로 구성됩니다. 객체는 클래스로부터 생성됩니다.


        클래스 정의란 클래스를 구현하는 것으로 클래스 헤더몸체로 구성됩니다.

        - 클래스 헤더class 예약어로 시작하여 이 뒤에 클래스 이름을 기술합니다. 관례상 클래스 이름(클래스명)은 대문자로 시작합니다.

        - 클래스 몸체는 스텁(메서드의 기능은 없지만 컴파일이 가능하도록 빈 중괄호) 안에 넣어 정의합니다. 즉, 중괄호 { 와 } 내부에 필드와 메서드가 구성됩니다.






     1.1.2 메서드와 main() 메서드

        클래스에서 꼭 필요한 행위를 포함하려면 메서드를 정의해야 합니다.

        메서드(method: 함수)는 어떤 특정한 행위(동작, 기능)을 구현하는 함수입니다.

        클래스의 메서드는 해당 클래스로부터 만들어지는 객체에게 메서드로 표현된 기능을 부여하는 것이고, 객체에게 메서드로 표현된 행위 능력을 갖게 하는 것입니다.

        클래스를 실행하기 위해 반드시 main 메서드를 정의해야 합니다. main 메서드는 자바 프로그램 실행이 시작되는 특별한 메서드 입니다.

        메서드 정의는 클래스(또는 인터페이스) 안에 정의(메서드 기능 구현)합니다.



      접근지정자    반환 자료형    메서드명(매개변수)  {

            // 몸체 (메서드 처리 내용)

      } 



        메서드의 정의 형태는 마치 제품을 만든(몸체) 후 그 제품을 담기 위해 포장(중괄호 {}) 하고 제품명을 붙이는 것(메서드 명)과 유사합니다.



        메서드의 구성 요소는 아래와 같습니다.

         1. 메서드 헤더(Header)는 접근 지정자, 반환형(return type), 메서드 명, 매개변수로 구성됩니다.

         2. 접근 지정자(access specifier)는 멤버 변수와 메서드에 접근을 허락하는 레벨을 나타냅니다. (public, static)

         3. 반환형(return type)은 객체가 메서드 호출의 결과로 돌려주어야 하는 정보입니다. void라고 지정된 메서드는 메서드 호출의 결과로 돌려줘야 할 정보가 없다는 것입니다. 

         4. 메서드 명은 사용자가 해당 기능에 부합하는 이름을 지정합니다. 

         5. 매개변수(parameter)는 메서드가 호출될 때 요구되는 입력 값을 받아서 저장하는 변수입니다. 메서드 명 다음에 오는 소괄호 (와 )에 표기합니다. 

         인자(argument)는 메서드를 호출할 때 함께 전달하는 정보입니다. 인자는 매개변수에 대응하여 치환됩니다. 매개변수와 인수는 반드시 동일한 자료형과 동일한 순서, 동일한 개수대로 사용해야 합니다. 

         두 개 이상의 값을 전달받는 메서드라면 각 매개변수마다 자료형을 반드시 표기해야 합니다. 각 매개변수는 콤마로 구분합니다. 

         6. 메서드 몸체(body)는 실제로 객체가 할 행위를 적어주는 곳 입니다.

         스텁 안에 메서드 기능을 기술하여 정의합니다.



         위 예제에서 작성한 java 프로그램은 java 명령어에 의해 JVM(Java Virtual Machine)이 실행될 때 클래스로부터 어떠한 객체도 생성되지 않은 상태입니다. 객체가 생성되지 않으면 실행할 수 없습니다. 이를 해결하기 위해 main() 메서드는 static으로 선언되어야만 합니다.


         static으로 선언하면 new 키워드를 사용하여 클래스의 인스턴스를 생성하지 않고 직접 모든 클래스에서 main 메서드를 호출할 수 있기 때문입니다.




     1.1.3 주석(Comment)

        주석은 코드의 내용을 설명한 문서입니다.

        주석은 프로그램 문장이 아니므로 컴파일시 무시되어 실행되지 않습니다.


       1. /* 설명문 */   :  블록 단위 주석, /* 와 */ 사이에 있는 모든 문자를 무시

       2. // 설명문      :   행 단위 주석, // 부터 그 줄 끝까지만 주석

       3. /** documentation */  :  선언문 앞에서만 사용 가능  





     1.1.4 블록 표시 { }

        중괄호 { 와 }는 한 개 이상의 문장을 한 개의 블록으로 인식합니다.



       {

           // 블록 내용

       }



        블록은 열린 중괄호 { 로 시작하여 닫힌 중괄호 } 로 끝납니다. 즉, 블록 끝은세미콜론( ;)이 아닌 닫힌 중괄호 }로 끝난다는 점을 유의해야 합니다. 클래스와 메서드는 블록 내부에 본문을 넣습니다.



     1.1.5 문장(Statement)

        문장은 컴퓨터에게 작업을 지시하는 최소 구성단위입니다 문장의 끝은 항상 세미콜론(;)을 붙여서 하나의 문장임을 표시합니다.

        위 예제의 System.out.println("Hello Java");는 화면에 문자열을 출력하라고 지시한 문장입니다.





     1.1.6 식별자(Identifier)

        식별자는 클래스, 변수, 메서드 등에 붙이는 이름입니다. 





     1.1.7 예약어(Keyword)

        예약어는 미리 용도가 정해진 이름으로 식별자로 사용할 수 없습니다.

        class는 클래스를 정의 용도로만 사용될 수 있기에 클래스 명으로 사용할 수 없습니다.





     1.1.8 접근 지정자(Access specifier)

        접근 지정자는 멤버 변수와 메서드에 접근을 허락하는 레벨을 나타냅니다. 






    1.2 메시지 상자에서 텍스트 출력

     1.2.1 대화상자에 텍스트 출력

       콘솔 모니터가 아닌 메시지 대화상자에서 텍스트를 출력하려면 JOptionPane 클래스에 등록된 showMessageDialog 메서드를 사용합니다. JOptionPane 클래스는 주로 확인창, 알림창, 질문창등의 용도로 띄울 수 있습니다. 

       showMessageDialog 메서드는 단순 알림창(경고창, 메시지 박스)를 띄웁니다.



     

     JOptionPane.showMessageDialog(Component parentComponent, Object message, String, title, int messageType)

     



       - parentComponent: 어떤 프레임에 띄어줄 것인가를 결정하는 상위 컴포넌트 갖는 프레임으로 주로 null 값을 지정하여 기본 프레임을 지정합니다.

       - message: 출력할 내용 메시지(문자열)

       - title: 메시지 창 상단 제목표시줄의 상단 제목

       - messageType: 알림창의 메시지 종류





      [예제2] 대화상자에 메시지 출력 


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    package exam1;
     
    import javax.swing.JOptionPane;
     
    public class Hello {
        public static void main(String[] args) {
            JOptionPane.showMessageDialog(null"Hello!");
        }
    }
     
    cs



    출력화면.




       JOptionPane는 자바에서 정의하여 제공합니다. 자바에서 제공하는 클래스들은 기능별로 모은 패키지로 그룹화되어 제공됩니다. 
       JOptionPane는 다양한 그래픽을 처리할 수 있는 javax.swing 패키지에 선언되어 있습니다. 즉, JOptionPane의 전체 이름은 javax.swing.JOptionPane 입니다.


     



    1.3 package

     1.3.1 서론

       자바에서 패키지(package)는 관련된 클래스 또는 인터페이스를 그룹으로 묶어 놓은 것입니다.

       클래스는 물리적으로 하나의 클래스 파일(확장자 .class)인 것처럼 패키지는 물리적으로 하나의 디렉터리입니다. 따라서 하나의 패키지는 디렉터리에 저장된 클래스 파일들입니다.



     1.3.2 패키지 이름

       디렉터리는 \로 표시하지만 자바에서는 패키지와 클래스명 사이에 점(.)으로 하위 클래스를 표시합니다.

       디렉터리가 하위 디렉터리를 가질 수 있는 것처럼 패키지도 다른 패키지를 포함할 수 있으므로 점(.)으로 구분함여 계층 구조를 구성합니다.




      System.out.println

     


       예를 들어, 위 구조를 살펴보면 패키지 out.은 System 패키지의 하위 패키지입니다. 물리적으로 System\out\println.class를 의미하므로 디렉터리 System의 서브 디렉터리 out에 속한 println.class 파일입니다.

       System.out은 java.io.PrintStream의 인스턴스입니다. println()은 java.io.PrintStream의 멤버 함수이지만, java.lang.System.out에서 작업합니다.



    1.4 import는 지정한 클래스를 포함시킴

     1.4.1 서론

       자바에서는 다양한 기능을 갖는 기본 클래스들을 패키지 형태로 제공합니다. 이러한 패키지들을 자바 클래스 라이브러리(Java Class Library)라고 합니다. 자바 클래스 라이브러리에 들어 있는 클래스를 사용하려면 import 문장을 사용하여 프로그램에 포함시켜야 합니다.


       

       import 클래스가 포함된 패키지

       

       ex) import java.lang.*; 



       컴파일러는 import 문을 통해 클래스 패키지에 대한 정보를 제공하여 소스 코드에서 사용한 클래스의 패키지를 알아낸 후 모든 클래스 이름 앞에 패키지명을 붙여줍니다.

       모든 자바 프로그램에서는 기본적으로 java.lang 패키지에 있는 모든 클래스를 암시적으로 포함시킵니다. 다음 문장이 명시되지 않지만 선언한 것과 동일합니다.

       import  java.lang.*;

      
       





    * 이 포스팅은 강성수 저 'Java 홀릭'을 참고하여 작성했습니다.


    댓글

Designed by Tistory.