JAVA
package ch01;
import java.util.Scanner;
public class test0524 {
public static void main(String[] args) {
// 키보드 입력 : 학생수, 학생점수
// while 문, nextLine() 메소드 사용
// 최고점수,
Scanner sc = new Scanner(System.in);
int students = 0;
int scores [] = null;
boolean run = true;
while(run) {
System.out.println("------------------------------------------------------------");
System.out.println("1. 학생수 | 2. 점수입력 | 3. 점수리스트 | 4. 분석 | 5. 종료");
System.out.println("------------------------------------------------------------");
System.out.print("선택> ");
String input = sc.nextLine();
switch(input) {
// 1. 학생수
case "1":
System.out.print("학생수> ");
String studentCount = sc.nextLine();
students = Integer.parseInt(studentCount);
scores = new int[students];
break;
// 2. 점수입력
case "2":
for (int i =0; i < students; i++) {
System.out.print("scores[" + i + "]> ");
String score = sc.nextLine();
scores[i]= Integer.parseInt(score);
}break;
// 3. 점수 리스트
case "3":
for (int i =0; i < students; i++) {
System.out.println("scores[" + i + "]> " + scores[i]);
}
break;
// 4. 분석(최대값, 평균)
case "4":
int max = scores[0], sum = 0;
double avg = 0;
for (int i =0; i< students; i++) {
if( max < scores[i]) {
max = scores[i];
}
sum += scores[i];
}
avg = sum / students;
System.out.println("최고 점수 : " + max);
System.out.println("평균 점수 : " + avg);
break;
case "5":
run = false;
System.out.println("프로그램 종료");
break;
default:
System.out.println("잘못 입력하셨습니다.");
}
}
}
}
1번 선택시 학생 수를 입력받고,
2번 선택시 학생 점수를 입력받고,
3번 선택시 점수리스트를 확인하고,
4번 선택시 최대값과 평균값을 확인하고,
5번 선택시 프로그램이 종료되고,
이외의 번호 선택시 다시 선택해야하는 프로그램이다.
배열의 값을 입력하는 부분이 어려웠다.
배열은 선언했지만 배열의 Null로 초기화했으니 다른 값으로 집어넣어
배열의 길이를 선언했다.
이런 오류가 발생되지 않도록 숙지하자!
객체지향 프로그래밍을 사용해야하는 이유
: 결합도는 낮고 응집도는 높은 프로그램이기 때문
EX ) 자바 -- > Spring을 하는 이유
특징
1. 캡슐화
: 데이터(필드), 동작(메소드)을 하나로 묶고 실제 구현내용을 외부에 감추는 것
2. 상속
: 부모역할의 상위객체에서 자기가 가지고 있는 필드와 메소드를 자식객체에게 물려주어 사용할 수 있도록 하는 것
- 코드의 재 사요성을 높여준다.
- 유지보수 시간을 최소화 시켜준다.
3. 다형성
: 사용방법은 동일하지만 실행결과가 다양하게 나오는 성질
package ch03;
public class SportsCar {
// 필드 ( 데이터가 저장되는 곳)
public String SportCar;
// 생성자 : 클래스와 이름이 같고 Return 타입이 없다.
SportsCar(){
// 객체 생성시 초기화 담당 역할
System.out.println("SportsCar 생성자");
}
// 메소드
void SportsCar() {
// 객체의 동작 ( 명령문들의 집합)
System.out.println("SportsCar 메소드");
}
}
------------------------------------------------------
package ch03;
public class CarMain {
public static void main(String[] args) {
// 생성자 불러오기
SportsCar sportsCar1 = new SportsCar();
SportsCar sportsCar2 = new SportsCar();
SportsCar sportsCar3 = new SportsCar();
// 메소드 불러오기
sportsCar1.SportsCar();
sportsCar1.SportsCar();
sportsCar1.SportsCar();
// 생성자 객체(오브젝트) 값
System.out.println(sportsCar1);
System.out.println(sportsCar2);
System.out.println(sportsCar3);
}
}
각 개념을 이해하고 사용하자.
명령문은 필드를 제외한 생성자나 메소드 안에서만 사용이 가능하다.
1. 기본타입
1) 정수타입
byte - 0
char - \u0000(빈 공백)
short - 0
int - 0
long - 0L
2) 실수타입
float - 0.0F
double - 0.0
3) 논리타입
boolean - false
2. 참조타입
배열 - null
클래스(String 포함) - null
인터페이스 - null
package ch4;
public interface TV {
// 메소드 정의
// 인터페이스 값은 무조건 가져와야한다.
public void powerOn();
public void powerOff();
}
인터페이스에서 메소드를 정의한다.
메소드가 있는 인터페이스 값은 반드시 호출되어야한다.
package ch4;
public class LgTV implements TV{
LgTV(){
System.out.println("LG TV 생성자.");
}
public void powerOn() {
System.out.println("LG TV전원을 켭니다.");
}
public void powerOff() {
System.out.println("LG TV전원을 끕니다.");
}
}
-------------------------------------------------
package ch4;
public class SamsungTV implements TV{
SamsungTV(){
System.out.println("Samsung TV 생성자.");
}
void turnOn() {
System.out.println("Samsung TV(전용) 전원을 켭니다.");
}
void turnOff() {
System.out.println("Samsung TV(전용) 전원을 끕니다.");
}
@Override
public void powerOn() {
System.out.println("Samsung TV(전용) 전원을 켭니다.");
}
@Override
public void powerOff() {
System.out.println("Samsung TV(전용) 전원을 끕니다.");
}
}
메소드를 호출한다. (Implements 인터페이스명)
메소드를 사용하여 TV의 출력값을 전달하도록 연결한다.
package ch4;
public class BeanFactory {
public Object getBean(String tvName){
Object obj = null;
if(tvName.equals("L")) {
obj =new LgTV();
}else if (tvName.equals("S")) {
obj =new SamsungTV();
}
return obj;
}
}
오브젝트를 생성하여 TV의 이름값을 정한 뒤
Argument에 정해진 값이 들어올시에 출력값을 정해주도록 설정한다.
package ch4;
public class TVUser {
public static void main(String[] args) {
// 값의 리턴형이 Object 이므로 TV에 대입하기 위해서는 강제 형변환 필요
// Object를 TV로 강제 형 변환
BeanFactory beanFactory = new BeanFactory();
TV tv =(TV) beanFactory.getBean(args[0]);
tv.powerOn();
tv.powerOff();
}
}
오브젝트를 가져오기위해 형변환을 동일하게 강제로 변경해 준 뒤 args의 주소값의 항목값을 포함한 내용의 클래스의 값을 출력한다.
형변환이 동일하지 않으면 Error ! 반드시 형을 맞춰주도록 하자.