728x90

배열에 객체가 들어가다보니 기존 배열보다 좀 까다롭다는 느낌이 들었다

배열 안에 있는 객체 속성값에 접근해서 출력하는게 기존과는 달라서 좀 헤맸다는 것

기존 기본형 자료타입들과 다르게 객체타입이다보니 헷갈리는게 많았다는 것

아직은 숙련도가 많이 부족해서 계속 반복해서 내 손발처럼 될 수 있게 연습해야겠다

 

package chap06_objectArray.controller;

import java.util.Arrays;

import chap06_objectArray.model.vo.Person;

public class Person02Controller {
	
	public void objectArr00() {
		
		// 예제
		// 출처 :http://daplus.net/java-java%EB%A1%9C-%EA%B0%9D%EC%B2%B4-%EB%B0%B0%EC%97%B4-%EB%A7%8C%EB%93%A4%EA%B8%B0/
		
		// 1.선언 및 인스턴스화
		A[ ] arr = new A[4];
		
		// 2.객체 초기화
		// 방법1
		arr[0] = new A();
		arr[1] = new A();
		arr[2] = new A();
		arr[3] = new A();
		
		// 방법2
		for( int i=0; i<4; i++ ) {
			  arr[i] = new A();
		}
		// 방금 만든 객체에서 기존 메소드 호출 가능해짐
		// 방법1
		int x = arr[1].getNumber();
		// 방법2
		arr[1].setNumber(x);
		
	}
	
	public void objectArr01() {
		
		// 객체배열
		//
		// 배열 선언 : Stack 영역에 공간 생성(변수의 선언 : stack에 공간 차지)
		// 배열 할당 : heap 영역에 공간 생성
		// 배열 초기화 : 인덱스,중괄호,for문
		// 배열 삭제 : null
		// 배열 값 출력하는 방법 2가지 : for문 + vo클래스 toString메소드
		
		
		
		
		// 배열 선언 - stack 영역에 생성
		String objArr;
		
		// 배열 할당 - heap 영역에 생성
		Person[] objArr01 = new Person[3];
		
		// 초기화
		//	1)인덱스
		objArr01[0] = new Person();
		objArr01[1] = new Person("김철수", 20, 'M', 170.5, 70);
		objArr01[2] = new Person("이순신", 40,'M', 180.5, 85.5); 

// vo Person		
//		private String name;
//		private int age;
//		private char gender;
//		private double height;
//		private double weight;
		
		// 	2) 중괄호
		Person objArr02 = new Person("안중근", 30,'M', 175.5, 75.3);
		Person[] objArr03 = {new Person("유관순", 18,'F', 160.2, 45.5),
							 new Person("신사임당", 40,'F', 157.5, 43.2),
							 new Person("세종대왕", 55, 'M', 180.5, 80.5)
							};
		System.out.println(objArr02); // chap06_objectArray.model.vo.Person@6d06d69c
		System.out.println(Arrays.toString(objArr03)); // 객체주소값 출력 : [chap06_objectArray.model.vo.Person@6d06d69c, chap06_objectArray.model.vo.Person@7852e922, chap06_objectArray.model.vo.Person@4e25154f]

//		System.out.println(Arrays.toString(objArr02[0])); // The type of the expression must be an array type but it resolved to Person
//		for(int i=0; i < objArr02.length; i++) { // 
//			System.out.println(objArr02[i]);	// The type of the expression must be an array type but it resolved to Person
//		}										// for문 출력은 int나 int로 자동형변환되는 소수들이 가능
		
		
		// 	3) for문
		Person[] objArr04 = new Person[3];
		for(int i=0; i < objArr04.length; i++) {
			objArr04[i] = 
		}
		
		
		// 객체 주소값 출력
		for(int i=0; i < objArr03.length; i++) {
			System.out.println("objArr03 = "+objArr03[i]);
//				objArr03 = chap06_objectArray.model.vo.Person@7852e922
//				objArr03 = chap06_objectArray.model.vo.Person@4e25154f
//				objArr03 = chap06_objectArray.model.vo.Person@70dea4e
		}
		// vo클래스 toString()을 이용한 객체속성값 출력
		for(int i=0; i < objArr03.length; i++) {
			System.out.println(objArr03[i].personInfo());
//				유관순, 18, F, 160.2, 45.5
//				신사임당, 40, F, 157.5, 43.2
//				세종대왕, 55, M, 180.5, 80.5
		}
//		System.out.println(Arrays.toString(objArr03.personInfo())); // Cannot invoke personInfo() on the array type Person[]
//		System.out.println(Arrays.toString(objArr03[0].personInfo())); // The method toString(long[]) in the type Arrays is not applicable for the arguments (String)
//		System.out.println(Arrays.personInfo()); // toString빼고 바로 출력할려했으나 에러 : The method personInfo() is undefined for the type Arrays
		
		// 삭제
		objArr03 = null;
		System.out.println(objArr03); // null
		System.out.println(Arrays.toString(objArr03)); // null
		for(int i=0; i < objArr03.length; i++) {
			System.out.println(objArr03[i].personInfo()); // Exception in thread "main" java.lang.NullPointerException
		}
		
		
	}
	
	
	
}
728x90
반응형
728x90

 

배열(Array)

자바스크립트에서는 자료형 지정이 없기 때문에 한 배열 안에 모든 자료형 보관 가능

 

1.배열 선언 및 초기화

배열 선언 시 크기를 지정하지 않고 선언할 수도 있고 크기를 정하고 선언할 수도 있음

function arrayTest2(){
  var arr1 = new Array();     // 배열 선언
  var arr2 = new Array(3);    // 배열 및 배열 길이 선언
  console.log('arr1.length : ' + arr1.length);
  console.log('arr2.length : ' + arr2.length);

  // length가 0이면 값 삽입 불가능? 확인 ㄱ
  

  // 배열 추가
  arr1[0] = '사과';
  arr1[1] = '귤';
  arr1[2] = '바나나';
  arr1[3] = '딸기';       // 4번째 인덱스에 추가됨. 
  // 배열 길이 0으로 지정해놔도 데이터 계속 들어갈 수 있음

  console.log('arr1.length : ' + arr1.length);
  console.log(arr1);

  // 알아서 값이 증가하면서 값도 받아옴
  arr2[0] = '지하철';
  arr2[1] = '기차';
  arr2[2] = '비행기';

  console.log('arr2.length : ' + arr2.length);
  console.log(arr2);
  

  // 초기화 의미 : 객체 선언을 하고 값을 최초로 할당하는 것

  // 선언과 동시에 초기화 방법1 -  강의시간 12:20
  var arr3 = new Array('빨강', '초록', '파랑');
  console.log('arr3.length : ' + arr3.length);
  console.log(arr3);

  // 선언과 동시에 초기화 방법2
  var arr4 = ['java','oracle','jdbc','html','css','javascript'];
  console.log('arr4.length : ' + arr4.length);
  console.log(arr4);  // ['java','oracle','jdbc','html','css','javascript']
}

 

2.배열 메소드

 

indexOf()

해당 요소가 위치한 인덱스 번호 반환

없으면 -1반환

function methodTest1(){
    var arr = ['사과', '포도', '배', '바나나', '감', '키위', '복숭아'];
    console.log(arr.indexOf('바나나'));    // 3. 해당 요소가 위치한 인덱스 반환
    console.log(arr.indexOf('토마토'));    // 배열에 존재하지 않는 값이기에 -1 반환
}

 

concat()

이어 붙이기

function methodTest2(){
    var arrl = ['빨강', '노랑', '초록'];
    var arr2 = ['파랑', '보라'];

    console.log(arr1.concat(arr2)); // ['빨강', '노랑', '초록',//'파랑', '보라']
    console.log(arr2.concat(arr1)); // ['파랑', '보라',//'빨강', '노랑', '초록']
    
    // 메소드 체인 가능
    onsole.log(arr2.concat(arr1).concat(arr1).concat(arr2));
}

 

join()

결합해서 ‘문자열’로 반환

join()은 parameter 지정안하면 ,으로

지정하면 지정한 값(구분자)을 넣어서 구분하여 반환

  • 밑에 toString()과 비슷
<button onclick="methodTest3();">배열 메소드 : join()</button>
<script>
    function methodTest3(){
        var arr = ['강남', '역삼', '선릉', '교대'];
        console.log(arr.join());    // 강남,역삼,선릉,교대
        console.log(typeof arr.join()); // string

    }
</script>

 

reverse()

배열의 값을 뒤집어서 반환

function methodTest4(){
  var arr = [1, 2, 3, 4, 5, 6, 7];
  console.log(arr.reverse());     // [7, 6, 5, 4, 3, 2, 1]
  var arr2 = ['a','b','c','d','e'];
  console.log(arr2.reverse());    // ['e', 'd', 'c', 'b', 'a']
}

 

sort()

배열 값을 정렬 : 안에 들어온 값들을 문자열로 변환해서 문자열 정렬

간단한 문자열 숫자는 숫자로 변환하여 숫자 정렬하고 다음 영어 정렬한다

function methodTest5(){
    var arr = [10, 543, 34, 450, 123, 885];
    console.log(arr.sort());    // [10, 123, 34, 450, 543, 885]

    var arr = ['b', 10, 543, 34, 450, 123, 'a']; 
    console.log(arr.sort());    // [10, 123, 34, 450, 543, 'a', 'b']

		// console.log(a.sort());    //  ['4', 5, 'a', 'b', 'c']    str4를 숫자4로 바꾸고 4,5..순으로 정렬

    // 숫자로 정렬하고 싶을 때 방법
    var sortArr = arr.sort(function(left, right){
                    return left-right; // 내림차순
                    return right-left; // 오름차순
                // 뺄셈을 이용해 누가 더 큰지 알아내고 이를 기반으로   자리를 바꿀지 말지 정한다.
// 레프트 라이트
// 양수 왼쪽값이 더 큼 왼쪽값이 더 크면 안되니 ... 뺄셈을 이용해서 누가 더 큰지 비교
// 자동으로 큰수를 넣는거 그 이후                    
        }
    );
    console.log(sortArr);
}

 

push() & pop()

 - push : 마지막에 요소 추가 <-> unshift // 길이 반환

 - pop : 마지막 요소 꺼내오기 <-> shift // 제거된 요소 반환

       (꺼내오며 마지막 요소가 배열에서 삭제됨)

function methodTest6(){
  var arr = ['김고은', '한예슬', '신민아', '전지현', '손예진', '김소연'];
  arr.push('유인나'); // 마지막에 유인나 추가됨
  console.log(arr);   // ['김고은', '한예슬', '신민아', '전지현', '손예진', '김소연', '유인나']

  arr.push('송혜교'); 
  console.log(arr);   // ['김고은', '한예슬', '신민아', '전지현', '손예진', '김소연', '유인나', '송혜교']

  console.log(arr.push('유인나')); // 9 : 푸쉬가 되고 난 다음에 사이즈가 나오는것

  arr.sort();

  console.log(arr);
  console.log("========")
  console.log(arr.pop()); // 마지막 요소 꺼내오기(꺼내오며 마지막 요소가 배열에서 삭제됨)
  console.log(arr);   
  arr.pop();              // 마지막 요소 꺼내오기(꺼내오며 마지막 요소가 배열에서 삭제됨)
  console.log(arr);
}
// push : 마지막 요소에 추가
console.log(a);           // (5) ['4', 5, 'a', 'b', 'c']
console.log(a.push());    //  5     <- 콘솔에서는 소트된 상태에서 원래 배열의 마지막값 5를 반환
console.log(a.push(6));   //  6    
console.log(a);           // (6) ['4', 5, 'a', 'b', 'c',6]
console.log(a.push())       // 6 // 파라미터 안적으면 배열의 길이 반환(?)
console.log(typeof(a.push()));    //  number

 

shift() & unshift()

 - shift : 첫번째 요소 제거하고, 제거된 요소를 반환 <-> pop // 제거된 요소 반환(str 반환)

 - unshift : 맨 앞에 요소 추가하고, 추가한 길이를 반환 <-> push // 길이 반환(number 반환)

(method) Array<string>.shift(): string

(method) Array<string>.unshift(...items: string[]): number

function methodTest7(){
    var arr = ['야구', '축구', '농구', '배구', '탁구'];
    console.log(arr);         // ['야구', '축구', '농구', '배구', '탁구']

    arr.shift();              // 야구 삭제
    console.log(arr);         // ['축구', '농구', '배구', '탁구']
    console.log(arr.shift()); // 축구
    console.log(arr);         // ['농구', '배구', '탁구']

    arr.unshift('ㅁ');          // ㅁ 추가
    console.log(arr.unshift()); // 4    길이 반환
    console.log(arr);           //  ['ㅁ', '농구', '배구', '탁구']
}

 

slice() & splice()

slice()

slice(start idx, end idx) 끝 인덱스 미포함(-1)해서 엘리먼트 추출

splice()

splice(start idx, end idx, 대체할 idx) a부터 b개까지 c의 값으로 변경

function methodTest8(){
    var arr = ['자바', '오라클', 'JDBC', 'HTML', 'css', 'JavaScript']; // 끝 인덱스 미포함해서
    console.log(arr.slice(2, 4));   // ['JDBC', 'HTML']
    console.log(arr);               // ['자바', '오라클', 'JDBC', 'HTML', 'css', 'JavaScript']
    
    console.log(arr.splice(0, 2, 'Spring')); // ['자바', '오라클'] // 0부터 2개 빼내고 spring을 추가하겠다는 코드
    console.log(arr);       // ['Spring', 'JDBC', 'HTML', 'css', 'JavaScript']

}

 

toString()

join()과 비슷

차이는

toString() : 무조건 ','로 구분지어 반환

join()은 parameter 디폴트는 ',' 들어가고 지정하면 지정한 값(구분자)을 넣어서 각 값을 연결하여 반환

toString() → 무조건 ,쉼표 구분자로 합쳐서 문자열로 연결되어 나옵니다 ≒ join

function methodTest9(){
  var arr = ['잠은', '보약이다', '잠은', '죽어서 자는게', '아니다', '그건', '죽은거다'];
  console.log(arr.toString()); // 잠은,보약이다,잠은,죽어서 자는게,아니다,그건,죽은거다
  console.log(arr.toString('ㅁ'));
  console.log(arr);            // ['잠은', '보약이다', '잠은', '죽어서 자는게', '아니다', '그건', '죽은거다']

  console.log(arr.join());     // 잠은,보약이다,잠은,죽어서 자는게,아니다,그건,죽은거다
  console.log(arr.join('/'));  // 잠은/보약이다/잠은/죽어서 자는게/아니다/그건/죽은거다

  console.log(arr); 

}

 

728x90
반응형
728x90

 

<이클립스 eclipse 간편단축키>

 

소문자 전체를 대문자로 바꾸는 단축키

ctrl + shift + x

 

코드 자동 생성

alt + shift + s

단축키를 누르면 아래의 창이 뜬다

 

getter & setter 자동 생성

model.vo 클래스에서 필드 부분만 작성 한 후, alt + shift + s해서 Generate Getter and Setter 클릭

아래처럼 자동 생성해준다

 

 

생성자 자동 생성

model.vo 클래스에서 필드 부분만 작성 한 후, alt + shift + s해서 Generate Constructor using Filelds 클릭

 

toString 메소드 자동 생성

model.vo 클래스에서 필드 부분만 작성 한 후, alt + shift + s해서 Generate to String()... 클릭

 

이제 힘들게 model.vo 코드들을 일일히 다 쓸 필요없다. 시간과 에너지를 아끼고 새거 배우는데 집중하자

 

 

728x90
반응형
728x90

 

model.VO

Override toString() + setter/getter

 

package MVC.model.vo;
import java.sql.Date;

public class pModelVo07 {
//  VO : Vaule Object
//		 데이터를 잠시 담아두는 ‘임시 저장공간’
//    	 변수로써 사용
//	 	 Read-Only속성을 값 오브젝트
//   	  자바에서 단순히 값 타입을 표현하기 위해 불변 클래스(Read-Only)를 만들어 사용

	private int empNo; // 사번
	private String empName; // 이름
	private String job; // 직책
	private int mgr; // 직속 상사(manager)
	private Date hireDate; // java.sql.Date // 고용일
	private int sal; // 급여
	private int comm; // 커미션(인센티브)
	private int deptNo; // 부서번호

	
	public pModelVo07() {}
	public pModelVo07(String job, int sal, int comm) {
		this.job = job;
		this.sal = sal;
		this.comm = comm;
	}
	public pModelVo07(int empNo, String job, int sal, int comm) {
		this(job, sal, comm);
		this.empNo = empNo;
	}
	public pModelVo07(int empNo, String empName, String job, int mgr, int sal, int comm, int deptNo) {
		this(job,sal,comm);
		this.empNo = empNo;
		this.empName = empName;
		this.mgr = mgr;
		this.deptNo = deptNo;
	}
	public pModelVo07(int empNo, String empName, String job, int mgr, Date hireDate, int sal, int comm, int deptNo) {
		this(job,sal,comm);
		this.empNo = empNo;
		this.empName = empName;
		this.mgr = mgr;
		this.deptNo = deptNo;
		this.hireDate = hireDate;
	}
	
	public int getEmpNo() {
		return empNo;
	}
	public String getEmpName() {
		return empName;
	}
	public String getJob() {
		return job;
	}
	public int getMgr() {
		return mgr;
	}
	public Date getHireDate() {
		return hireDate;
	}
	public int getSal() {
		return sal;
	}	
	public int getComnn() {
		return comm;
	}
	public int getDeptNo() {
		return deptNo;
	}
	
	public void setEmpNo(int empNo) {
		this.empNo = empNo;
	}
	public void setEmpName(String empName) {
		this.empName = empName;
	}
	public void setMgr(int mgr) {
		this.mgr = mgr;
	}
	public void setHireDate(Date hireDate) {
		this.hireDate = hireDate;
	}
	public void setSal(int sal) {
		this.sal = sal;
	}
	public void setComm(int comm) {
		this.comm = comm;
	}
	public void setDeptNo(int deptNo) {
		this.deptNo = deptNo;
	}
	
	
	@Override
	public String toString() {
		return empNo+" / "+empName+" / "+job+" / "+mgr+" / "+hireDate+" / "+sal+" / "+comm+" / "+deptNo+" / ";
	}
	
}
728x90
반응형

+ Recent posts