ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 7. Array , JavaBeans, 추상클래스
    program_language 및 궁금한것/Java 2019. 4. 16. 18:42

    <배열> Array - 복수데이터

    - 데이터 형이 동일한 자료에 같은(하나의) 변수명을 정의한 자료들의 집합.

    - 첫번째 데이터 부터 인덱스(자동번호)가 부여0, 번지로 서로다른 데이터를 구분한다.

    - 배열은 객체다. <-- 객체라는 것은 . 을 찍고 필드나 메소드를 사용할 수 있다.

    - 맴버변수처럼 각방은 기본값이 정해져 있다.

    - 배열의 크기가 정해지면 인덱스를 벗어나는 참조를 하면 안된다.

      (ArrayIndexOutOfBoundsException! <-- 에러발생, 인덱스의 최대크기를 넘어서면 출력되는 것)

     

    배열 선언 방법

    1. 자료형[ ] 배열명 = { 데이터List(콤마로 구분되는 데이터) } ;

       <- 배열선언과 동시에 데이터를 초기화(이미 데이터가 확정 되었을때 사용)

       <- 주의: 배열선언과 데이터 초기화 하는 부분을 다로 작성할 수 없다.

    2. 자료형[ ] 배열명 = new 자료형 [배열크기] ;

       <- 값이 정해져 있지 않고 방만 만들어 놓는 것이다.

       <- 프로그램 실행 도중 데이터 값을 입력할때(변경할때) 주로 사용한다.

       <- 배열선언과 데이터 초기화 하는 부분을 다로 작성하는 것이 가능하다.

     

    * 배열 객체 생성을 하게 되면 해당위치에 상관없이 각방에는 초기값이 부여된다.

      (맴버변수 처럼 각 자료형의 기본값이 입력됨)

     

    참고)

    int[] su = { 11, 22, 33 }; <-- su라는 배열변수에 복수 데이터를 대입.

    String[] str={ "길동","라임","주원" };

    System.out.println(str) <--str은 레퍼런스를 참조하는 참조 변수이기 때문에 출력시 str의 주소값만 나온다.

    장점: 관리가 편하다.

     

    int[] arr;  과  int arr2[];  의 차이점?

    동일하다. 차이가 전혀 없다. 굳이 찾아보면 아래와 같은 선언부에 차이가 있다.

     

    int[] arr, arr3, arr4;  <-- arr, arr3, arr4는 배열
    int arr2[],arr9;  <-- arr2는 배열, arr9는 정수

     

    hello() 메소드 안에서는 값을 초기화를 해줘야 한다.

    맴버변수는 기본값이 있지만, 지역변수는 기본값이 없기 때문에 초기화를 해주거나 값을 넣어줘야 한다.

    class Q {
    int i; // 기본값이 존재한다. 0

    void hello() {
    int j; // 기본값이 존재 x

    System.out.println( i );  // <-- 0이 출력된다.

    System.out.println( j ); // <-------------------- 에러에러에러에러난다.
    }
    }


    <자바빈즈> JavaBeans

    - 서로 관련성 있는 속성을 묶어주는 클래스(객체)

    - 내 식대로 이해를 하자면 편의성을 위해서 만든 참조 클래스 이다.

    - 사용하는 곳에 따라 VO(Value Object) 또는 DTO(Data Transfer Object)라는 이름을 사용하기도 한다.

       ex) 차의 색깔, 브랜드, 사이즈 등을 묶어주는 오브젝트가 자바빈즈

     

    규칙) 

      1. 속성데이터(아래의 name, age, job등)를 private하게 선언 <-- private하기 때문에 자식도 없다. 외부사용불가능

         (1번에서 끝나면 사용이 불가하기 때문에 쓰뤠기임) 

      2. 속성데이터를 선언한 클래스 내에 public 주고 받는 메소드(get,set)를 정의

      3. public한 생성자, 오버로딩 생성자를 정의 할 수 있다.

      4. 반드시 속성의 수와 일치하는 get,set이 정의되지 않아도 된다.

     

    참고)

    get으로 시작되는 메소드 들: 게터메소드(getter)

    set으로 시작되는 메소드 들: 세터메소드(setter)

     

    public class Person{

       private String name;

       private int age;

       private String job;

     

       public Person(){}

       public Person(String name,int age,String job){

         this.name=name;

        this.age=age;

        this.job=job;

    }

     

       public void setName(String name){

       this.name=name;

       } // 홍길동으로 세팅된 값을

     

       public String getName(){

       return name; 

       } // 메인에게 전달을 한다.

     

       public void setAge(int age){

       this.age=age;

       }

    }

    =========main()==========

    Person p= new Person();

      p.name="홍길동";  <-- 이름정보 주기 : 에러발생

             --> p.setName("홍길동);  <-- 이름정보 주기: 실행OK

      sysout( p.name); <-- 이름정보 받기 "홍길동"출력: 에러발생

             --> sysout(p.getName()); <-- 이름정보 받기(얻기) "홍길동" 출력: 실행OK

     

    리턴을 할때에 주의 사항

    int su=300;

    Abc a= new Abc();

    return new Abc(); <-- 왜냐면 a= new Abc()니깐

    <추상클래스> abstract class

    - 후손 class를 제어할 목적으로 사용

    - 객체화 될 수 없는 클래스 <--new를 못쓴다. 메모리 할당이 안된다.

    - 구현(정의)된 메소드와 선언된 메소드로 구성

    - 스스로 객체생성 불가(new 사용x), 후손 class 객체 생성(자식은 부모다!) 해서 사용

    - 부모가 들어갈 수 있는 자리에 자식도 들어갈 수 있다.

    형식)

          abstract class 클래스명{

               // 필드선언

     

               public void hello() { } // 구현된(정의된) 메소드

               abstract void print(); // 선언된 메소드

    **주의:  선언된 메소드를 사용하는 경우 반드시 abstract 명시!

     

          }

     

    class 기본클래스                   class 추상클래스  interface 인터페이스

    {

      // 정의(구현)된 메소드만!     //선언된 메소드 // 선언된 메소드만

      void hello() { }                       void hellow();     void hello();

                                            // 정의 메소드 

                                               void goodBye(){}  

         }

    }

     

    ** 정리

    클래스는 객체생성해서 사용한다.

    인터페이스는 클래스에 구현되서 사용된다. defind가 될 수 없다.

    추상클래스는 자식클래스 객체 생성해서 사용한다.

     

    ** 메소드 정리

    void m1(){} <-- 이름을 불러달라

    - 항상 호출한 곳으로 이동한다.

    void m2(int su){ } <-- 나를 호출할대는 인자값을 넣어주세요.

    - 매개변수- 문장 - 리턴 순으로 데이터가 이동한다.

    int m3(){ } <- 정수를 결과값으로 드릴게요

    - 주소값만 돌려받는다.

     

    메소드 코드 정리

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
     
     
    class Parent{  }
    class Child extends Parent{}
     
    --------------------------------------------
    <메소드 정의>
     
    public void hello(Child c){
     
    }
     
    public void goodBye(Parent p){//Parent p = new Child();
     
    }
    --------------------------------------------
    <메소드 호출>
       
       hello(new Child());
       Child cc = new Child();
         hello( cc );
         
       hello(new Parent());  ? (X)  자식객체에 부모객체가 들어갈 수 없다!!  
       -----------------------------
       goodBye(new Parent());
       Parent pp = new Parent();
        goodBye( pp );
        
       goodBye(new Child()); ? (O)    
       
    =====================================================================   
     
    http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
    http://colorscripter.com/info#e" target="_blank" style="text-decoration:none; color:white">cs

    void a(String greeting) {

    }

    String b(int su) {

    return "안녕하세요!";

    }

    int c() {

    return 500;

    }

    --------------------

    실행순서: c->b->a

    a( b( c( ) ) )

    --------------------

     

    <라인 단위 입력>

    BufferedReader <--  메소드 readLine()

     

    Reader r= new Reader();  (x) <-- 추상클래스 : 자식 <-- InputStreamReader

    InputStream is = System.in

    Reader r = new InputStreamReader(is)

    BufferedReader br= new BufferedReader(r)

    br<-- readLine ( ); // 줄을 구분자로 하는 text입력

     

    BufferedReader br= new BufferedReader(new InputStreamReader(System.in);

     

    new 생성자~!

     

    반응형

    댓글

Designed by Tistory.