JAVA Web#7 Day 7 자바의 클래스
day7
190226 금일은 자바의 클래스에 대해서 배웠습니다.
클래스에 대해 배우고 나니, 이제 좀 뭔가 드디어 프로그래밍 다운걸 하는 느낌이 드는 것 같습니다.
<클래스>
--객체지향프로그래밍(OOP)
: 재사용성이 증가하고, 확장성이 증가한다.
--객체 : 설계도(클래스)에 의해 메모리안에 생성되어 있는 것.
--속성 : 객체가 가지고 있는 객체를 구분할 수 있는 고유한 성질.
--동작 : 객체가 가지고 있는 고유한 기능
(같은 설계도로 만들어진 객체들은 동작은 같을 수 있어도, 속성은 다름)
[설계도] [객체]
필드 ----->속성
메소드 --->동작
new키워드
*설계도명 변수명 = new 설계도명(); <-- 객체 선언 형식.
Car c = new Car();
--필드 : 클래스 안에 바로 만들어지는 변수
1 2 3 4 5 6 7 | public class Car { // 필드 정의 객체의 해당 기능을 실행하기 위한 String modelName; // 모델명을 담을 수 있는 그릇이 객체안에 만들어지게 함 String maker; int price; int makeYear; } | cs |
(Car라는 클래스 소스와, Car클래스를 이용한 CarApp 소스입니다. 클래스를 다루는 이 시점부터는 여러 자바소스파일을
연동시켜서 코딩을 하게될 것입니다.)
위 소스를 보시면, 메인함수가 없습니다. 이 소스는 Car라는 객체를 만들기 위한 클래스입니다. 즉, 설계도 도면이죠.
Car라는 클래스 안에 있는 3,4,5,6행의 변수들은 필드라고 불리게 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | public class CarApp { public static void main (String[] args) { // Car 설계도로 객체 생성하기 // new Car(); // Car 설계도로 객체 생성하고, 생성된 객체의 주소값을 참조변수(리모콘)에 대입하기 // Car c1 =new Car(); Car c1 = new Car(); Car c2 = new Car(); // 생성된 객체의 속성(필드)에 값 담기 c1.modelName = "제네시스"; c1.maker = "현대자동차"; c1.price = 70000000; c1.makeYear = 2019; c2.modelName = "XC40"; c2.maker = "볼보자동차"; c2.price = 54000000; c2.makeYear = 2018; //생성된 객체의 속성 사용하기 System.out.println("1자동차이름 : " +c1.modelName); System.out.println("1자동차회사 : " +c1.maker); System.out.println("2자동차이름 : " +c2.modelName); System.out.println("2자동차회사 : " +c2.maker); } } | cs |
위에서 만든 Car클래스를 사용하기 위해9,10 행과 같이 Car클래스의 객체를 생성해줍니다. ( 이때 두 파일은 같은 디렉토리에 있어야합니다.)
9,10행으로 만들어진 c1, c2객체들은 Car클래스가 가진 필드(modelName~등등) 을 가지게 됩니다. 해서, 따로 변수 선언을 하지 않아도
12~21행처럼 각각의 객체들에게 있는 필드를 초기화할 수 있게 됩니다.
초기화 후, 24행 c1.modelName처럼 사용하게되면 c1이라는 객체의 modelName필드를 불러오는 뜻이 되게 되서, 제네시스라는 말이 출력됩니다.
아래는, 클래스를 이용하여 기존에 만들던 프로그램을 좀더 직관적으로 만든 소스입니다.
1 2 3 4 5 | public class Item { // Item이라는 객체를 만들 클래스. String name; int price; int amount; } | cs |
만들어서 쓸 Item이라는 클래스를 만들고,
Item의 필드를 입력받고, 출력받고, 종료하는 프로그램을 구현했습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | import java.util.Scanner; public class ItemApp { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Item[] cart = new Item[3]; for (;;) { System.out.println("------------------------------------"); System.out.println("1.입력 | 2.출력 | 0.종료"); System.out.println("------------------------------------"); System.out.print("선택> "); int selectNo = scanner.nextInt(); if (selectNo == 1) { for (int i=0; i<3; i++) { System.out.print("상품명 입력> "); String productName = scanner.next(); System.out.print("상품 수량 입력> "); int productNum = scanner.nextInt(); System.out.print("구매 가격 입력> "); int productPrice = scanner.nextInt(); Item item = new Item(); // 상품정보 저장용 Item객체 생성 item.name = productName; item.amount = productNum; item.price = productPrice; cart[i] = item; // for문안에서 item객체에 입력받은 값을 cart배열에 저장하는 작업을 반복. } // (for문 후, item객체는 소멸=>값들은 cart배열에 저장되어 나온다.) } else if (selectNo == 2) { System.out.println("================출력================"); System.out.println("상품명\t\t상품수량\t상품가격"); for (Item x : cart) { // cart배열의 타입에 맞춰서 반복되는 x인덱스의 타입역시 Item타입으로 한다. System.out.println(x.name + "\t\t" + x.amount + "\t\t" + x.price + "원"); } } else if (selectNo == 0) { System.out.println("프로그램 종료"); break; } } } } | cs |
우선, 7행에서 Item객체를 사용하기 위한 선언을 해줍니다. 이때, 여러가지의 Item객체를 사용하기 위해서, 객체 배열로 만들어줍니다.
즉, Item객체를 사용할 cart라는 배열을 3개의 크기로 선언한 것입니다.
9~15행으로 입력,출력,종료 폼을 만들고 메뉴숫자 선택을 만들고, 본격적으로 아래를 보시겠습니다.
18행은 3개의 크기로 선언했으므로 3번 반복해야 해서 있는 것이고,
19~24행에서 상품명,수량,가격 등을 입력받을 변수를 만들어 입력받습니다.
26행은 위의 입력받은 변수들을 저장할 객체를 만들어줍니다.
27~29행 26행의 객체에 앞서 입력받은것들을 저장해주고, 30행, cart객체배열 i번째에 그 객체를 저장합니다.
3번 반복을 하고나면, cart[0], cart[1], cart[2]에 입력받은 각각의 객체들이 저장되겠죠.
36행을 보시면, enhanced-for문으로 cart객체배열을 크기만큼 반복해줍니다. 이때, 배열의 구성요소인 item객체 타입으로
반복이 되겠죠. 이 뜻은, 첫번째 반복때 x.name은 cart[0].name이 되고 이는, cart[0]에 담긴 item객체가 됩니다.
위의 클래스 응용 소스들을 몇가지 첨부해뒀습니다. 주석에 간단한 설명을 달아두었으니 참고하셔서 공부하시고,
혹 질문 사항있으시면 질문 해주세요.
연휴가 끼다보니 포스팅이 하루씩 밀려서 늦어졌습니다...내일 저녁에는 메소드와, 오버로딩, 생성자 강의 내용으로 찾아뵙겠습니다.