- 자바에서 타입을 지정할 때 int, String, double등을 사용하는데 이는 자바에서 기본적으로 제공하는 클래스의 일종이다.
- 클래스를 만들 때는 필드, 생성자, 메서드가 필요하며 만든 클래스는 Main클래스의 메인 메소드에서 호출하여 사용.
* 컴파일러가 프로그래밍 할 때 가장 먼저 메인 메서드를 찾는다.
예로 설명하면 클래스는 자동차를 만들기 위한 설계도이며 필드는 자동차에 대한 속성이다(색상, 차종, 번호 등) 메서드는 특정 작업 (엑셀, 브레이크 등) 을 수행하기 위한 명령문의 집합.
필드(속성)
- 필드는 객체의 데이터가 저장되는 곳으로 객체의 고유 데이터이다.
- 클래스에 포함 된 변수를 의미한다.
생성자
Public Class명 (타입 매개변수) { 필드변수 = 매개변수;} |
- 객체 생성 시 초기화 역할을 해주며 클래스 명과 동일하게 사용한다.
- 메인 메소드에서 사용 시 new 연산자로 호출된다. String name = new String();
- 생성자 우클릭 - 소스 - 필드 사용해서 생성자 생성에서 사용할 매개변수 클릭하여 생성할 수 있다.
- 매개변수를 넣은 생성자를 사용하면 메인 메서드에서 데이터 넣을 때 편리하다.
- 기본 생성자는 자동으로 생성된다.
- this.no는 위 필드no에 매개변수 no를 넣어준다는 뜻으로 매개변수의 이름과 구분되기 위해 자동 생성된다
- 매개변수 명을 다르게 사용하면 this를 붙이지 않아도 된다 -> no = uno;
*생성자와 메소드{ } 안에서 선언된 변수는 로컬변수다(필드 x)
메서드
Public void accelate( 매개변수 ){ 실행항 코드 return 리턴값; } |
접근제어자 - 반환타입 (return타입) - 메서드명
- 하나의 클래스에 같은 이름의 메서드를 둘 이상 정의할 수 없다
- 동일 이름을 사용하려면 메소드 오버로딩을 해야 함(매개변수 타입 다르게 지정 or 매개변수 개수 다르게 지정)
- 메서드 오버로딩을 사용하면 호출할 때 전달할 매개변수 타입이나 개수를 신경 쓰지 않아도 된다.
- 호출해서 사용할 때 메서드명()과 같이 소괄호가 뒤에 붙는다 (필드는 붙지 X)
* 반환타입 void는 결과값을 리턴하지(돌려받지) 않을 때 사용한다.
* 리턴 타입이 있는 경우 반드시 return이 필요하다
-정수타입 리턴 받을 때는 int타입으로 작성한 뒤 메서드 내에서 return해줘야 함.
Car클래스
-차량 관리 프로그램을 생성하기 위해 따로 생성
package ex12;
public class Car {
//필드
String company = "현대자동차";
String model;
String color;
int maxSpeed = 250;
//생성자
public Car() {
}
public Car(String model, String color) {
super();
this.model = model;
this.color = color;
}
//메서드
public void print() {
System.out.println("회사:"+company);
System.out.println("모델명:"+model);
System.out.println("색상:"+color);
System.out.println("최대속도:"+maxSpeed);
System.out.println("------------------------------------------------");
}
}
1. 자동차 클래스의 회사명, 모델명, 색상, 최대속도 필드를 생성한다. (회사명과 최대속도는 고정값으로 넣음)
* maxSpeed와 같이 연결되는 뒤 단어의 첫 글자를 대문자로 표기하는 방식을 카멜표기법이라고 한다.
2. 기본 생성자를 생성한 뒤 필드를 사용하여 모델명과 색상을 매개변수로 담은 새 생성자를 만든다.
3. print메서드를 생성하여 각 필드별 데이터를 목록으로 나타내는 명령문을 작성한다.
메인 클래스 - 메인메서드 작성
(코드 3개로 나눠서 리뷰, 코드 3개 모두 붙여야 정상 작동된다.)
package ex12;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
Car[] cars = new Car[100];
cars[0] = new Car("소나타","흰색");
cars[1] = new Car("그랜저","검은색");
int count = 2;
boolean run = true;
while(run) {
System.out.println("----------------------------------------------------");
System.out.println("1. 자동차등록 | 2. 자동차목록 | 3. 차량조회| 0. 종료");
System.out.println("----------------------------------------------------");
System.out.print("선택>");
int menu = s.nextInt();s.nextLine();
1. 값을 입력받기 위해 Scanner 메서드를 호출(import)하여 's'변수에 담아준다.
2. 새로 생성한 Car 클래스를 크기 100짜리 cars배열에 담아 사용해 준다.
3. cars [0]과 cars [1]에 미리 생성해놓은 생성자를 사용해 매개변수로 데이터를 입력 - 0번 차, 1번 차 생성
4. int count는 초기값으로 2를 부여한다. 이미 두 개의 배열을 생성했기 때문에 0이 아닌 2를 씀
5. 메뉴를 반복하여 출력하기 위해 while문을 사용했고 boolean의 초기값을 true로 두기 위해 run에 담아 사용
6. 사용자에게 메뉴를 보여주기 위해 print문을 이용하여 생성.
7. 입력한 메뉴 번호에 따라 조회하기 위해 switch~case문을 사용, 값은 s.nextInt();s.nextLine();으로 받는다.
* nextInt() 뒤에 nextLine() 쓰는 이유는 엔터까지의 값을 받기 위함임
switch(menu) {
case 0:
run = false;
break;
case 1:
Car c = new Car();
System.out.print("모델명>");
c.model = s.nextLine();
System.out.print("색상>");
c.color = s.nextLine();
cars[count] = c;
count ++;
System.out.println(count+"개 자동차가 등록되었습니다.");
break;
case 2:
if(count == 0) System.out.println("등록된 자동차가 없습니다");
for(int i = 0; i<count; i++) {
Car num = cars[i];
num.print();
}
break;
8. case 0 : 0번 선택했을 때 run이 false로 바뀌면서 while문을 빠져나오고 break로 switch문 빠져나와 종료된다.
9. case 1: 차량 등록
- Car클래스의 c변수를 새로 생성하여 모델명, 색상의 값을 입력받아 넣어준다.
- c변수의 데이터를 cars배열의 count번째에 담은 후 count++해주어 새로 차량등록 시 데이터가 다음 인덱스에 저장된다.
- sysout은 사용자에게 알려주기 위해 생성
* c변수를 생성하지 않고 바로 cars [count] 번째에 각 필드의 값을 입력받아도 된다.
10. case 2: 차량 목록
- for문을 사용해 값을 넣기 위해 새로 생성한 Car num에다 cars[i]부터 cars[count-1]번까지 데이터를 넣고 반복 출력한다.
- 등록된 차량이 없다면 if (count==0) -> 없다는 문구 출력
case 3:
System.out.print("검색할 모델명>");
String model = s.nextLine();
boolean find = false;
for(int i = 0; i < count; i++){
c = cars[i];
if(c.model.equals(model)) {
c.print();
find = true;
}
}
if(find==false)System.out.println("해당 모델은 존재하지 않습니다")
break;
default:
System.out.println("메뉴를 다시 선택하세요!");
}
}
System.out.println("프로그램을 종료합니다!");
}
10. case 3: 차량 조회
- model명 변수를 String타입에 담아 nextLine()으로 값을 입력받는다.
- for문을 통해 해당 목록을 i-count번째까지 반복하여 조회하고 if문을 통해 조회한 차량이 존재하면 목록 출력
- case 1에서 사용한 c변수를 재사용하여 해당 차량의 인덱스에 해당하는 cars의 데이터를 담아 c에 입력된 model 필드와 입력한 model 데이터를 equals로 비교 (String은 equals로 데이터를 비교한다)
- 존재하면 c.print()로 목록을 출력하고 find = true로 변경. find의 초기값을 false로 주어야 찾지 못했을 경우를 출력할 수 있다.
- 해당 차량이 존재하지 않을 경우 if(find==false) 없다는 문구를 출력한다. **이 if문은 for문 밖에다 작성해야 한다.
11. default: 없는 메뉴 선택
- 잘못 선택했다는 문구 출력
12. 0번 눌렀을 때 프로그램이 종료되며 사용자에게 알리는 문구를 출력한다(while문 밖에 작성해야 중복으로 뜨지 않는다)
'BE > Java [Servlet , Spring]' 카테고리의 다른 글
Oracle (SQL Developer) 테이블 생성 + JAVA 연결 (0) | 2023.01.17 |
---|---|
JAVA 주소목록 출력 DAO + getter&setter메서드 (자바빈), 접근제한자 (0) | 2023.01.17 |
Java 배열의 합계 및 최대&최소 값 구하기 (Sum, Max, Min) (0) | 2023.01.09 |
Java 상품 관리 프로그램 리뷰(DecimalFormat, integer parseInt) (0) | 2023.01.08 |
Java 성적 입력 프로그램 리뷰 (참조 변수, 문자열 비교 equals) (0) | 2023.01.08 |