반응형
*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 |
|
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이 먼저 만들어지고 부모가 만들어졌고, 그리고 와서 자식이 만들어 진다. 그리고 객체
반응형