Mon/Jan/6 [Java] day5. subString method, private 접근제한자, 상속 기본개념, ArrayList 정리&활용
Jan/6/2020
국비교육 [Java]
day 5. subString method, private 접근제한자, 상속 기본개념, ArrayList 정리&활용
국비교육 [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>
댓글
댓글 쓰기