Mon/Jan/6 [Java] day5. subString method, private 접근제한자, 상속 기본개념, ArrayList 정리&활용

Jan/6/2020
국비교육 [Java]
day 5. subString method, private 접근제한자, 상속 기본개념, ArrayList 정리&활용

// String의 subString method
String s = "abc"; 
/* 
이렇게 선언했을때, 
"a"는 변수 s의 0번째 index
"b"는 변수 s의 1번째 index
"c"는 변수 s의 2번째 index 를 갖는다
*/

// substring method
// ex) 주민번호에서 data 뽑아내기
String no = "880130-2056655";
String[] s = no.split("-");
        
String year = s[0].substring(0);  // s[0]의 0번째 자리부터 끝까지 출력
    System.out.println(year);  // 880130
String year = s[0].substring(0,2);  // s[0]의 0~1번째(2번째 앞 까지) 자리 출력
    System.out.println(year);  // 88
if(genderNo.equals("1") || genderNo.equals("2")){
    int age = 2020 - (Integer.parseInt(year)+1900);
    System.out.println(age);
} else {
    int age = 2020 - (Integer.parseInt(year)+2000);
    System.out.println(age);}  // 32

/* 
개발자는 일반 사용자가 잘못 입력했을 때도 대비해야
예를 들어 뒷자리 첫글자에 5,6을 넣거나
1988년생인데 뒷자리 첫글자에 3을 넣는 경우
일자에 35일을 넣는 경우 등..
*/

// →
else {
    int age = Integer.parseInt(year)+2000;
    if (age>2020){         // if로 age가 잘못 입력됐는지 검사할 수 있도록
        System.out.println("잘못 입력하셨습니다");  
    }else{
        System.out.println(2020-age);
    }
cs

// 접근제한자 private; 해당 class에서만 사용가능한 변수

/*
보안이 필요한 주민번호 등에 사용
생성자를 private 으로 지정하면, 객채 생성 안됨. 사용은 가능
Class 자체를 private으로 지정하면, 아예 오류.
⇒ class는 무조건 public으로 선언
*/

// InfoClass 내부에 ageOperator method 만들기
// private으로 주민번호 입력 받고, public 으로 age 출력
public class InfoClass {
    private String no;
    int age = 0;
    public InfoClass() {
    }
    public InfoClass(String string) {
        this.no = string;
        this.ageOperator();
    }
    private void ageOperator() {
        String[] s = this.no.split("-");
        String year = s[0].substring(0, 2);
        String genderNo = s[1].substring(0, 1);
        if (genderNo.equals("1") || genderNo.equals("2")) {
            this.age = 2020 - (Integer.parseInt(year) + 1900);
        } else {
            this.age = Integer.parseInt(year) + 2000;
            if (this.age > 2020) {
                System.out.println("잘못 입력하셨습니다");
            } else {
                this.age = 2020 - this.age;
            }
        }
    }
}
// MainClass에서 input&output
public class MainClass {
    public static void main(String[] args) {
        InfoClass ic = new InfoClass("880130-1056655");        
        System.out.println(ic.age);
    
    }
}
cs

> 자연어처리에서 문자열 쪼개기, 간판에서 글자를 하나씩 차례로 출력할 때 등 사용

// 상속
/* 
eclipse 에서 new class 만들 때 나오는 SuperClass = 부모 Class
class를 새로 생성할 때도 Object라는 java 기본 class에서 나온 것
Object 기본 methods
.equals(), geClass(), toString()....
*/

// Casting 과의 연관성
TestClass tc = new TestClass(); // downcasting; Object o = new TestClass();        
// Object는 어떤 형태든지 다 받음, 모든 class의 조상!
Object o = new TestClass();
Object o2 = new InfoClass("2222");
Object o3 = new DataClass();
Object o4 = new EmployeeClass();

// 암묵적/자동 형변환, upCasting, Object 에 없고 TestClass에만 있는 것은 사용불가
Object o = new TestClass(); 
// 명시적 형변환, upCasting
Object o = (Object) new TestClass()
TestClass tc2 = (TestClass) o;  // casting 통해 tc2에서 다시 TestClass 변수 사용 가능
TestClass t1 = new TestClass();
InfoClass t2 = new InfoClass();
DataClass t3 = new DataClass();
EmployeeClass t4 = new EmployeeClass();
cs

// ArrayList & casting
TestClass tc = new TestClass();
ArrayList a = new ArrayList();
a.add(tc);
    System.out.println(a.size());  // 1
// a에서 index 0를 뺀 것을 변수화하는 방법; casting        
// upcasting, method의 매개변수 대부분은 Object로 정의되어 있음
Object t = a.get(0);  
// downcasting
TestClass t2 = (TestClass)a.get(0);
// 매번 ArrayList 작업을 할 때, casting 작업하려면 불편함
// 그래서 '예약'을 활용하면 편하다
ArrayList<TestClass> a = new ArrayList<TestClass>(); // 아예 TestClass type으로 들어가도록 '예약'
a.add(tc);        
TestClass t2 = a.get(0);
cs

< array & ArrayList >
array
- 용도 : 주로 여러 개의 값을 저장할 때
- 특징
- 동일한 data type만 저장 가능
- 초기 index의 갯수는 수정 불가능
 - ex) TestClass[] tArr = new TestClass[3];

ArrayList
- 용도 : 주로 객체들 저장
- 특징
- 외부클래스로 존재: ArrayList.class
- 반드시 import 필요 : import java.util.ArrayList
  - 내부 method 통해 갯수 정해지고, 수정가능. 따라서 객체생성 필수 : new ArrayList()
  - 다양한 타입의 데이터 저장 가능 : Object type으로 저장 되기 때문
   ex) ArrayList a = new ArrayList();
          a.add(new TestClass); a.add(true); a.add(1123); a.add(12.5); a.add("문자열"); 
  - 단 저장된 값은 Object type으로 저장! 따라서 데이터를 사용할 경우, 원래 타입으로 변환해야 한다
   ex) TestClass t = (TestClass) a.get(0);
  - 만약 동일한 타입의 객체들을 저장할 경우 미리 타입 예약
   ex) ArrayList<TestClass> a = new ArrayList<TestClass>();
          a.add(new TestClass())  // TestClass type으로 저장
      TestClass tt = a.get(0); // data type 변환 불필요
 - 주요 method
  - add(객체명); // 맨마지막 위치에 데이터 추가
  - get(indexNo); // 지정 위치의 데이터 추출
  - remove(indexNo); //지정 위치의 데이터 제거하고 그 데이터를 반환
  - size() // data 갯수 ; 데이터 추가/삭제 시 자동 변환
  ex) a.add(new TestClass); // size() == 1 
         a.add(new TestClass); // size() == 2
         a.add(new TestClass); // size() == 3
         a.remove(0) ; // size() == 2, 제거된 데이터 위치로 한칸씩 이동
 - DataBase에 활용되므로 잘 알아두자!

< 예제 : ArrayList 활용 >

public class EmployeeClass {
    int empNo = 0;
    String eName = "";
    String job = "";  // 가장 많은 수를 차지하는 "사원"으로 initialize 해도 됨
    String hireDate = "";
    int sale = 0;
    int commission = 0;
    int deptNo = 0;
    public EmployeeClass() {
    }

    public EmployeeClass(int e, String n, String j, String h, int s, int c, int d) {
        this.empNo = e;
        this.eName = n;
        this.job = j;
        this.hireDate = h;
        this.sale = s;
        this.commission = c;
        this.deptNo = d;
    }

    // 부서식별번호가 없는 data를 전달받는 생성자
// 해당 업무를 어느 정도 알아야 생성자를 어떻게 얼마나 만들지 계획할 수 있다
// 특히 금융, 국세청!
    public EmployeeClass(int e, String n, String j, String h, int s, int c) {
        this.empNo = e;
        this.eName = n;
        this.job = j;
        this.hireDate = h;
        this.sale = s;
        this.commission = c;
    }
}
cs


import java.util.ArrayList;
public class DataClass {
    ArrayList<EmployeeClass> empArr = new ArrayList<EmployeeClass>();
    public DataClass() {
        empArr.add(new EmployeeClass(////);
        empArr.add(new EmployeeClass(////));
        empArr.add(new EmployeeClass(////));
        empArr.add(new EmployeeClass(////));
        empArr.add(new EmployeeClass(////));
        empArr.add(new EmployeeClass(////));
        empArr.add(new EmployeeClass(////));
    }
}
cs

import java.util.ArrayList;
public class MainClass {
    public static void main(String[] args) {
        DataClass dc = new DataClass();
        for (int i = 0; i < dc.empArr.size(); i++) {
            // System.out.println(dc.empArr.get(i));  이렇게 되면 index i의 16진수 값이 나옴
            System.out.println(dc.empArr.get(i).eName); // .eName을 추가해야 이름만 추출
        }
    }
}
cs

계좌 이자 > 통장은 123원으로 찍혀도, 실제는 123.432526...원
이런 경우에 ArrayList 활용할 수 있음

<The End>

댓글

가장 많이 본 글