국비지원학원/Java

30일차

초코맛 2018. 12. 3. 01:06
반응형

*3차원 배열
  • 면,행,열로 구성된 배열
  • 고정길이형이며 배열의 모든방의 데이터형이 같다.
  • 면의수 : 배열명.length
  • 행의수 : 배열명[면의번호].length
  • 열의수 : 배열명[면의번호][행의번호].length
  • 작성법)
선언)
    모든데이터형으로 만들수 있고    ~???    삼차원이기 때문에 for가 세번.
    데이터형[][][] 배열명 = null;
    int[][][] arr= null;
생성)
    new 는 heap에 올리는데, heap에 올라가면 자동초기화.
    배열명 = new 데이터형[면의수][행의수][열의수];
    arr= new int[2][2][3];
선언+생성)
    데이터형[][][] 배열명 = new 데이터형[면의수][행의수][열의수];
    int[][][] arr= new int[2][2][3];
값 할당)
    배열명[면의번호][행의번호][열의번호]=값;
    <사실 일렬로 쭈욱 저장되어있긴 하다.
    arr[0][0][1] =10;
    arr[1][1][2] = 20;
값 사용)
    배열명[면의번호][행의번호][열의번호]
    arr[0][0][0]
모든방의 값 출력(일괄처리)
    for(int i=0; i<배열명.length(면의수); i++){
        for(int j=0; j<배열명[i].length(행의수); j++){
            for(int k=0; j<배열명[i][j].length(열의수); k++){
                배열명[i][j][k]
개선된 for
    3차원 배열의 한면은 2차원 배열로 이루어져 있다.
    for(면을 저장할 2차원 배열 : 3차원 배열명){

        for(행을 저장할 1차원 배열 : 2차원 배열명){

            for(일차원 배열 방의 값을 저장할 데이터형 : 일차원 배열){

                변수명
            }
        }
    }

-기본형 형식의 사용
  • 면구분 괄호, 행구분 괄호를 사용해 구분
  • 데이터형[][][] 배열명 = {{{}{}{}},  {{}{}{}}};      <행구분 괄호 / 면구분 괄호
  • int[][][] arr = {{{1,2,3},{4,5,6}},{{7,8,9},{10,11,12}}};

-private 배열을 public method로 반환하면 private가 public 이 되어버림  //call of reference? 의 이야기 이다.

  • <보안사고를 방지하기 위함.
  • <시큐어 코딩 가이드 참고.
  • <모든 참조형은 다 이런 취약점을 안고 있다.
public class Test {
    private int[] arr={1,2,3,4};
    
    public int[] getArr(){
        return arr;
    }
}
아예상관이 없는 다른클래스에서
public class Test2{
    public static void mein(String[] args){
        Test t= new Test();
        int[] a= t.getArr();
        a[0]=200;
        //a배열이라도 arr의 그자리가 변경된다.
        int[] temp = t.getArr(); //주소가 하나이다보니 원래 생성된 객체를 변경 시킨다.
        //원본배열이 바뀌지 않으려면..
▼     
public class Test {
    private int[] arr={1,2,3,4};
    
    public int[] getArr(){
        //return arr;//그대로 리턴하면 하나의 주소로 주소가 넘어가기 때문에 안전한 사용을 하지 못하니 배열을 복사한다음 return해주어야 한다.
        int[] temp =new int[arr.length];
            for(int i=0;i<arr.length; i++){
                temp[i]=arr[i];
            }
        return temp;//좀더 안전해 진다.
    }

 

}

 

 


-객체배열 만들기.
  • <어제 이름은 String 과목은 int로 따로 저장 하였는데 따로놀게되 서로 상관이 없게 된다.
  • <이때, 한꺼번에 모아 사용하고 싶은데 ...(class : 참조형 데이터형, 사용자정의데이터형)
  • <복합적인 값을 함께 묶어 사용하고 싶음..
  • <PL/SQL에서의 record
  • 클래스로 배열을 생성
  • 여러개의 값을 한번에 관리하기 위해.

public class Strudent{
    private int num;
    private String name;
    private int javaScore, OracleScore;
    //private 는 외부에서 접근 불가.
    
    public Student(int num, String name, int j.s){
        this.num = num;
        //스택과 힙의 이름 구분위함
        this.name = name;
        //명칭이 다르면 this안붙여도 식별가능
        javaScore=j.s;
    }
    //setter / getter
    
}

Student[] stu = new Student[3];
//<방이 세개가 만들어 지기는 하는데, 널이 들어가 잇다.(값생성 아직

//값할당 : Student 객체만 입력가능
    데이터형[방의 번호] = new 생성자();


null
null
null

    stu[0] = new Strudent((1,"이재찬",100);

1
이재찬
100



1
이재찬
100
null
null
    stu[1] = new Strudent(2,"정택성",99);
<생성자를 2개 만드는거라 생성자의 오버로딩 이라고..

    stu[2] = new Strudent();

0
null
0


<heap이 만들어 지고 그 주소를 가지고 들어가 지게 된다.

stu[2] 값을 넣고 싶으면
stu[2].setNum(3);
stu[2].setName("이재현");
stu[2].setJavaScore(80);
(또는)
student st = stu[2];
set.setNum(3);


-모든방의 값을 출력
    for(int i=0; i<배열명.length; i++){
        stu[i].getNum();               <
(또는)
student s = stu[2];
s.getNum(3);
부르고 객체에 getter를 담아서 주로 많이 사용한다.
//클래스명 객체명 = 배열의[i]
//객체명.getter(); 로 값을 얻는다.



*OOP언어의 3가지특징 다형성 상속 캡슐화
  • 상속, 다형성, 캡슐화
  • 다형성 중에 overload 
  • 캡슐화는 접근지정자(사용범위/접근권한) (public protected private default



*상속(inheritance)
  • 부모클래스의 자원(변수, method)을 자식클래스에서 자신의 것처럼 사용하는 것
  • <private는 쓸수 없다. public 이나 protected
  • 클래스간의 계층이 형성된다.(부모클래스(super)  |   
  •                                                  자식클래스(sub))
  • 자바는 단일 상속만 지원 (내 부모가 하나) : 부모가 뚜렷하고, 중복상속이되는 상황을 방지할 수 있다.
  • 단점 : 부모클래스가 하나라 기능 구현의 제약이 있다.
  • extends라는 키워드로 자식클래스에서 부모클래스를 선택한다. (자식이 부모를 선택해 부모는 누가 내자식인지 모른다.)
  • =>부모클래스에서는 상속받는 자식클래스를 알수 없다. 
ex) 걸어다니는 것
           -포유류-
           개,소,사람
치와와 허스키 황소 젖소 김 정 이
  • 부모는 자식들이 가지는 공통특징을 정의 / 자식클래스는 자신만의 특징을 정의하게 된다.
  • 부모에 정의된게 자식에게 맞지않으면 오버라이딩.
  • <다중상속의 장점을 사용하고 싶을때에는 인터페이스 를 사용한다.
  • 다중상속의 기능을 사용할 때에는 interface사용.
  • 생성자는 상속되지 않는다.(private, default)도
  • super 키워드로 부모클래스의 자원을 선택하여 사용할수 있다.

 


다 오브젝이 부모로 있다-> 모든 클래스의 부모 클래스
  • 자바 모든클래스의 부모클래스는 java.lang.Object 이다.
  • <코드의 재사용성을 위해서 상속을 받는것.
  • 자식클래스를 생성하면 부모클래스가 먼저 생성된다.
  • 작성법 ) [접근지정자] class 자식클래스명 [extends 상속할 부모클래스명]{
  • 대괄호부분은 생략가능 한데, 부모클래스를 생략하면 extends Object이 들어가 진다.
  • 상속관계에 있는 클래스끼리만 강제 형변환이 된다.



모든 자식클래스가 사용하게될 모든 특징
부모클래스 A
변수 int i
method()    metodA()
                ↑(자식클래스가 선택)

자식클래스 B
변수 int j
method()  metodB()
자신만의 특징정의

객체화를 할때에는 자식애서?한테? 하고
B b = new B();
b.j
b.methodB();

b.i
b.methodA();
=>자식의 객체로 부모의 자원을 사용할 수 있다.
A Class는 Object이 먼저 만들어지고 부모가 만들어졌고, 그리고 와서 자식이 만들어 진다. 그리고 객체

 

반응형

'국비지원학원 > Java' 카테고리의 다른 글

32일차  (0) 2018.12.06
31일차  (0) 2018.12.03
29일차  (0) 2018.11.30
28일차  (0) 2018.11.28
27일차  (0) 2018.11.27