본문 바로가기

JAVA/특강

특강 1일차

1. 객체지향 프로그래밍 (OOP : )

현실세계 -----------------> 가상세계
 : 학생 관리                       : 학생관리 프로그램 개발

 : 학생객체 추출         ===========> 가상세계에서 100% 그대로 표현
   ( 속성 : 이름, 학번 )                    클래스(객체)
                                                   변수(속성)
                                                   메소드(동작)

 : 객체, 주체

subject -------------> object
(주체)                          (객체)

   100가지 객체중에서 학생관리에 필요한 객체를 추출하는 과정
     : 추상화작업
     : 학생객체 ( 속성, 동작 )



2. 클래스
  : *.java로 생성
  : 클래스명은 반드시 대문자로 작성
  : 의미있는 명사형으로 지정한다.
  : 용도
    ====> 데이터 저장
  : 클래스 구성요소
    
     - 변수
     - 메소드
     - 생성자
    

  예) 학생객체  -------------------->  Student.java

  : 문법

  public class 클래스명 {

       //변수

       //메소드

       //생성자

}

 public class Student {

}

    - 클래스 종류 1

      1) 재사용 가능한 클래스
          : Student.java

       2) 재사용 가능한 클래스를 핸들링하는 클래스
          : Student 클래스를 메모리에 올리는 작업 및 데이터 설정, 얻기 등....
          : 특별한 메소드를 가져야 된다. ( main )
             ====> starting point
             ====> 스스로 메모리에 로드(load) 가능하다.

       public static void main(String[] args){}                //main이 있으면 재사용 못한당!

       : StudentTest.java


     - 클래스 종류 2

        1) 개발자가 만든 클래스

        2) 시스템이 만들어준 클래스 ( API라고 한다. )
            : API 문서 제공 ( html 제공 )
            : http://java.sum.com 참조
            : 패키지 형태로 제공
            : 소스파일 ( src.zip )과 클래스파일 제공 ( JDK 설치하면 자동으로 제공 )

3. 변수

   : 블럭단위로 생존한다.

   : 종류 3가지 ( 변수의 lifeTime 서로 다르다.)

       - 로컬변수
             : 메소드 안에 선언
             : 메소드안에서 사용가능하다.
             : 메소드가 호출될 때 생성된다.
             : 메소드가 끝날 때 제거된다. (    } )
             : 저장위치는 stack에 저장된다.

       - 인스턴스 변수
             : 메소드 밖에 선언
             : 객체 생성할 때 생성된다. ( new 이용 )
               객체 소멸할 때 제거된다. ( heap에 저장된 클래스를 더이상 참조못할 때)

       - 클래스 변수
             :



   : 용도
     =====> 데이터 저장
  
     * 데이터 종류
     1) 기본 데이터 ( 8가지 )     : Primitive Data Type ( PDT )

         - 수치데이터 
                      : 정수     byte (1byte)
                                   short (2byte)
                        int (4byte)        : 기본값
                        long (8byte)
                       ==> 1  , 123
           : 실수
                        float (4byte)
                        double (8byte)   : 기본값
                       ==> 1.34F,  2.45
- 문자데이터
            :           char (2byte)
                        ==> 하나의 문자
                        ==>   'A'  ,    'C',     '가'
- 논리데이터
            :           boolean
                        ==> 참/거짓
                        ==> true/false  ( 0/1 안돼 )

======> 저장되는 값은 실제값이 저장된다.
    int num = 123;
    float xx = 2.34f;

     2) 참조데이터   ( Reference Data Type : RDT )
               : 8개를 제외한 나머지는 모두 참조 데이터이다.
                  ( 클래스, 인터페이스, 배열 )

            =======> 저장되는 값은 진짜 데이터가 저장되는 주소값이 저장된다.

             String name = "홍길동";

                     name에는 "홍길동"이 저장된 주소값이 저장되어 있음.

       : 문법

          1) 변수 선언

          데이터타입   변수명;

        ======> 변수명은 소문자, 의미있는 명사형

        예 ) Student.java
        
           String          name;    // 홍길동     (String 은 클래스, 문자열 저장할 때 사용)


          =======> name ?
             : 변수
             : 문자열 변수
             : String 변수
             : 참조 데이터 변수
             : RDT 변수

        2) 값할당

           변수명 = 값;

           name = "홍길동";

       예) String name;     //변수선언
 
              name = "홍길동";     // 값할당 ( 초기화 작업)

            String  name = "홍길동";     //변수선언 및 초기화작업을 한번에 가능




4. 메소드

    - 용도
       : 변수에 데이터를 저장, 변수의 값을 얻기 위해서 사용

    - 종류 1
        1) setter 메소드
              : 값을 저장

        2) getter  메소드
               : 값을 얻기

    - 종류 1

        1) worker 메소드
               : 일반적인 메소드
               : setter, getter

        2) caller 메소드

      - 문법

         public  리턴타입  메소드명([인자]) {

                   // 메소드가 실행할 코드

                  return  [값];
         }

       : 메소드명은 동사형으로 , 소문자로 지정한다.
         ( setter변수명, get변수명으로 일반적으로 지정한다. )

      예) String name;

          setName
           
        public void setName(String n){                                     //setName("홍길동"); 이렇게 호출

            name = n;
          //  return ;
         }


          getName

        public String getName(){                                             //String n = getName(); 이렇게 호출

           return name;
         }

       : 특징
           ===> 반드시 호출해야 수행된다.
           ===> 호출하면 수행이되고, 작업이 끝나면 반드시 호출한 곳으로 돌아간다.
           ===> 반드시 클래스를 객체생성한 후에 호출가능하다.



5. 객체생성
   : 클래스를 메모리에 올리는 작업
   : 일반적으로 main 메소드를 가진 핸들링 클래스에서 주로 작업한다.
   : new 이용.

   : 문법

      클래스명  변수명 = new 클래스명([인자]);

    예) Student stu = new Student();

         ===> stu ?
             : 변수
             : RDT 변수
             : Student 클래스 타입의 변수


6. 생성자

   : constructor
   : 용도
     ==> 인트턴스 변수에 데이터를 처음 저장하는 역할 ( 초기화 작업 )
     ==> setter 메소드


    : 문법

     public 클래스명 ([인자]) {}

    특징
      ==> 메소드와 비슷
      ==> 리턴타입이 없다.
      ==> 반드시 이름은 클래스명으로 지정한다.
      ==> 자동으로 생성되는 생성자가 존재한다. ( default 생성자 )
           ( 모든 클래스에는 default 생성자가 자동생성된다. )
            public 클래스명(){}
             : 개발자가 생성자를 명시적으로 만들면 자동생성되지 않는다.
                (인자없는 생성자는 사용하지 않더라도 명시적으로 작성하자. )
      ==> 메소드처럼 호출해야 수행된다.
      ==> 객체생성시에 호출한다.

          예) Student.java

       public Student(){}

       student stu = new Student();



7. 오버로딩 생성자 ( Overloading Constructor ) , 오버로딩 메소드

   : 정의
     ==> 하나의 클래스에 같은 이름의 생성자가 여러개 올 수 있다.

   : 규칙
     ==> 인자가 달라야 한다. ( argument-list 라고 한다. )
         : 갯수, 타입, 순서가 달라야 한다.
   예> 
      public Student(){}
      public Student(int n){}
      public Student(String n){}
      public Student(int n, String a){}
      public Student(String n, int a){}



8. this 키워드

   : this는 heap 메모리에 올라가있는 인스턴스를 의미한다. ( new )
   : 용도 2 가지

   1) 인스턴스 변수와 로컬 변수 이름이 동일할 때

   2) 오버로딩 생성자 호출
       =====> 반드시 첫 라인에 적어야 한다.
     : this();
       this(234);
       this("홍길동", 202020);

    public Student(){}

    public Student(String n, int s, String addr){

           name = n;
           ssn = s;
           address = addr;

     }

    public Student(String n, int s){

          this(n,s,"대구");

    }

     ======> 하나의 생성자에서 객체생성하기 위해서 ( 몰아주기 위해서 )



9. 패키지
   : 용도
       =====> 관련된 클래스들끼리 묶어서 관리할 목적 ( 윈도우의 폴더개념 )
       =====> 도메인으로 지정 ( 유일한 값이기 때문에 )

    : 문법

        package 패키지명;        또는 package 패키지명.패키지명1;


        예>

               package com.test;

               public class Student{

               }

        : 특징
            ===> 패키지가 서로 다른 클래스는 접근 불가능하다.



10. import

    : 용도
      ===> 패키지가 다른 클래스를 접근할 때 사용한다.

    : 문법
       ===> import 패키지명.클래스명;


    : java.lang 패키지의 클래스는 import 없이 사용가능한 유일한 패키지이다.
       (다른 패키지는 반드시 import 해야 한다.)
 


11. 연산자

    1) 산술연산자
          : +  -  *  /  %

    2) 증감 연산자

          : ++   (1증가)
          : --   (1감소)

         예> int num = 2;
               num++;      //3

               int num2 = 2;
               ++num;       //3

            : 주의할 점은 다른 연산자와 같이 사용시 주의

          예>
               int a = 2;
               int b = a++;
               // a = 3 
               // b = 2

               int x = 2;
               int y = ++x;
               // a = 3 
               // b = 3


     3) 비교 연산자

        A == B
        A != B
        A  > B
        A >= B
        A  < B
        A <= B


    4) 대입 연산자



     5) 3항 연산자

       (조건식)  ?  참 : 거짓 ;

       예>
             int xxx = 3;
             int num = ( xxx > 4 ) ? 100 : 200 ;
              //num ? 200

        6) instanceOf

              : 클래스의 데이터 타입을 체크하기 위한 연산자
              : 변수명 instanceOf 클래스명
              : 결과값은 boolean

          예>
               String name = "zzzz";

                if( name  instanceOf  String ){

                }

         7) 논리연산자
          ===> 연산결과는  boolean

              : &&

              : ||


12. 제어문

    1) 조건문

         if 문

         문법 : 
 
               if(조건식) statement;
           ====> 조건식이 true 인 경우에만 statement가 실행된다.

           - if ~ else 문

              if(조건식)
                       statement1;
              else
                        statement2;

            - switch 문
               : 값의 데이터 타입 ( int, char, short, byte)
                   (long은 제외)

               switch( 값 ){

                      case 값1 : 

                            break;
                      case 값2 : 

                            break;
                      case 값3 : 

                            break;
                      case 값4 : 

                            break;
                      default :
               }

13.
14.
15. 상속

   - 클래스들간의 관계중에서 'is a' 관계이다.
   예>  사원, 관리자, 엔지니어

        관리자 is a 사원
        엔지니어 is a 사원
      ===> 상속관계가 성립이 된다.

        * UML

                             사원 (부모클래스, super class)



            관리자                   엔지니어    (자식 클래스, child class)

    * 클래스들 간의 관계 ( class relationship)

    - is a
    - has a ( use a )

  예> 분석단계 객체 추출

     : 학생, 대학생, 컴퓨터, 트럭, 엔진, ....

        대학생 is a 학생

        트럭 has a 엔진
        학생 use a 컴퓨터

      * has a , use a를 가상세계에서도 표현해야 된다.

     public class 트럭{

           // 변수
            엔진 a; //인스턴스 변수, composition(끈끈한 관계)

            public void xx(){
                       라디오 y; //로컬 변수 , aggregation (덜 끈끈한 관계)
            }

     }

     public class 엔진 {



      }

    * UML ( Unified Modeling Language )
       : 도식화하는 방법
       : 클래스 다이어그램





수만 정의해 놓고 오른쪽 마우스 => source => getter and setter 선택하면 자동으로 get,setter 메소드 정의된다.

javac StudnetTest.java       //컴파일
java StudentTest              // 실행

this.name = name; 에서 this.name은 heap에 있는 name, name은 stack에 있는 name

'JAVA > 특강' 카테고리의 다른 글

특강 4일차  (0) 2011.11.27
특강 2일차  (0) 2011.11.20