Java 차량 관리 프로그램 리뷰 - 클래스 생성하기(필드, 생성자, 메서드 오버로딩)

2023. 1. 9. 23:14·BE/Java [Servlet , Spring]

- 자바에서 타입을 지정할 때 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
'BE/Java [Servlet , Spring]' 카테고리의 다른 글
  • Oracle (SQL Developer) 테이블 생성 + JAVA 연결
  • JAVA 주소목록 출력 DAO + getter&setter메서드 (자바빈), 접근제한자
  • Java 배열의 합계 및 최대&최소 값 구하기 (Sum, Max, Min)
  • Java 상품 관리 프로그램 리뷰(DecimalFormat, integer parseInt)
시녜's
시녜's
성장중인 새싹 개발자 🌱
  • 시녜's
    개발기록
    시녜's
  • 전체
    오늘
    어제
    • 분류 전체보기
      • FE
        • React
        • javascript(jQuery)
        • HTML & CSS
      • BE
        • Java [Servlet , Spring]
        • C & C++
        • Node.js
        • node.js
        • SQL (Oracle, mysql)
      • CS
        • 프로그래밍 이론(정보처리기사)
      • Etc
        • 코딩 챌린지
        • 개발 성장 일지
        • 코딩테스트
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    코테
    백준브론즈
    코딩테스트
    코딩테스트입문
    자바문자열
    리액트
    mysql
    백준코딩테스트
    백준
    자바반복문
    프로그래밍
    자바기초
    Java
    jsp
    자바배열
    백준단계별문제
    코테기초
    자바스크립트
    스프링
    자바조건문
    jquery
    javascript
    백준문제풀이
    코딩기초
    자바
    html
    CharAt함수
    코딩입문
    제이쿼리
    React
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
시녜's
Java 차량 관리 프로그램 리뷰 - 클래스 생성하기(필드, 생성자, 메서드 오버로딩)
상단으로

티스토리툴바