객체 지향(Object Oriented Programming)
객체 지향 프로그래밍이란 다양한 작업이 가능한 프로그램 코드(명령)들을 클래스로 묶어서 작성하고 다른 묶음과 연계하여 처리하는 프로그래밍 방식을 말한다. 여기서 객체는 변수 + 메소드를 의미한다.
객체 지향의 특성)
- 캡슐화(Encapsulation) : 변수와 메소드를 하나로 묶음 +) 정보은닉(Information Hiding) : 클래스의 구성을 숨김
- 상속(Inheritance) : 기존 코드를 재사용 + 확장
- 다형성(Polymorphism) : 같은 이름의 메소드를 만들거나, 대표 클래스로 하위 클래스를 포함시킴
ArrayList
ArrayList는 배열과 유사한 형태의 저장 구조 객체이다. java.util 패키지에 포함되어 있으며, 상단에 'import java.util.ArrayList;' 문장을 작성해야 한다. 저장은 객체(인스턴스)를 기반으로 한다. '<>' 안에 저장하고 싶은 데이터를 담을 수 있는 클래스를 넣는다. 또한 개발자가 작성한 DTO 클래스도 저장할 수 있다.
Generics(제네릭스) => <클래스> : 저장하고자 하는 클래스를 지정하면 그 클래스의 크기에 맞게 최종 설정하여 생성하는 형태(템플릿)
ArrayList 활용)
- 데이터 추가 : add(인스턴스);
- 데이터 가져오기 : get(idx); => idx : 순번 => 0부터 시작
- 데이터 삭제 : remove(인스턴스/idx)
- 전체 데이터 삭제 : clear()
1. 예제 - 작동 class
import controller.ControllerClass;
public class MainClass {
public static void main(String[] args) {
ControllerClass cc = new ControllerClass();
cc.run();
}
}
2. 예제 - 컨트롤 class
package controller;
import dto.DataDto;
import java.util.ArrayList;
import java.util.Scanner;
public class ControllerClass {
Scanner scan = new Scanner((System.in));
// 데이터 저장 공간(ArrayList) - 정수 배열
ArrayList<DataDto> datas = new ArrayList<>();
public void run() {
// 지역 변수는 가급적 초기화하기
String menu = null; // Stirng(객체)은 null
System.out.println("관리 프로그램");
System.out.println("===========");
while(true) {
System.out.println("1. 입력");
System.out.println("2. 출력");
System.out.println("0. 종료");
System.out.print("입력> ");
menu = scan.nextLine();
if (menu.equals("0")) {
System.out.println("프로그램 종료");
break; // 또는 return;
}
switch (menu) { // 정수/문자/문자열 변수
case "1":
inputData();
break;
case "2":
outputData();
break;
default: // 잘못된 입력 처리
System.out.println("0~1번 중에 하나를 입력하세요.");
}
} // while end
} // run end
// 입력 처리용 메소드
void inputData() {
System.out.println("⭐ 입력 ⭐");
System.out.println("--------");
String inValue = null;
int num = 0;
float fnum = 0.0f;
DataDto data = null;
// 사용자가 숫자가 아닌 값을 입력한다면?
try {
data = new DataDto();
System.out.print("정수 입력 : ");
inValue = scan.nextLine();
num = Integer.parseInt(inValue);
data.setNumber(num);
System.out.print("문자열 입력 : ");
inValue = scan.nextLine();
data.setStr(inValue);
System.out.print("실수 입력 : ");
inValue = scan.nextLine();
fnum = Float.parseFloat(inValue);
data.setFnumber(fnum);
} catch (NumberFormatException nfe) {
System.out.println("숫자를 입력하세요.");
return;
}
// ArrayList에 값 추가 : add()
datas.add(data); // push와 같은 일을 하는 메소드
System.out.println(("입력 완료. 이전 메뉴로 돌아갑니다."));
} // inputData end
void outputData(){
System.out.println("⭐ 전체 출력 ⭐");
System.out.println("---------------");
// 데이터의 유무 확인하여 없을 경우 메소드를 종료한다
if(datas.size() == 0){
System.out.println("데이터가 없습니다.");
return;
}
int sum = 0;
for(DataDto d : datas){
System.out.println("정수 : " + d.getNumber());
System.out.println("문자열 : " + d.getStr());
System.out.println("실수 : " + d.getFnumber());
sum += d.getNumber();
System.out.println("---------------");
}
System.out.println("총합 : " + sum);
System.out.println("출력 완료. 이전 메뉴로 돌아갑니다");
}
} // class end
3. 예제 - 정보 처리 class
package dto;
public class DataDto {
private int number;
private String str;
private float fnumber;
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
public float getFnumber() {
return fnumber;
}
public void setFnumber(float fnumber) {
this.fnumber = fnumber;
}
}