210709 금
객체
Chap4. 생성자(Constructor)
<오버로딩>
: 한 클래스 내에 동일한 이름의 메소드를 여러 개 작성하는 기법
package com.kh.chap07_method.part01_overloadingTest;
public class OverloadingTest {
public void test() {}
public void test(int a) {}
public void test(int a, String b) {}
public void test(String a, int b) {}
public void test(int a, int b) {}
//public void test(int c, int d) {}
// 에러 발생 : 매개변수명과 무관. 자료형의 개수와 순서가 다르게 작성되어야만 구분 가능.
public void test(int a, int b, String str) {}
//public int test(int a, int b, String str) {
// return 0;
//}
// => 에러 발생 ; 반환형이 다르다고 오버로딩이 적용되지 않음.
//private void test(int a, int b, String str) {}
// => 에러 발생 : 접근 제한자가 다르다고 오버로딩이 적용되지 않음.
chap05 메소드
1. 메소드
: 수학의 함수와 비슷하며 호출을 통해 사용, 전달 값이 없는 상태로 호출을 하거나 어떤 값을 전달하여 호출을 하며 함수 내에 작선된 연산 수행. 즉, 클래스 안에 정의된 기능.
-수행 후 반환 값 / 결과 값은 있거나 없을 수 있음
2. 메소드 접근 제한자
*특별한 경우가 아니면 public을 사용한다.
3. 메소드 예약어
*return
해당 메소드를 종료하고 자신을 호출한 메소드로 돌아가는 예약어.
반환 값이 있다면 반환 값을 가지고 자신을 호출한 메소드로 돌아감.
Method Test 1>
package com.kh.chap07_method.part02_methodTest.controller;
import com.kh.chap06_constructor.model.vo.User;
public class NonStaticMethod {
//매개변수 유무와 반환값 유무에 따른 구분
//1. 매개변수 없고 반환값 없는 메소드
public void method1() {
// 아무 값도 반환하지 않고 메소드 내용만 수행 후 메소드 종료
System.out.println("매개변수와 반환값이 둘 다 없는 메소드입니다.");
//return; => 모든 메소드에 생략 되어 있음(JVM이 자동 생성)
}
//2. 매개변수 없고 반환값 있는 메소드
public String method2() {
String str = "매개변수가 없지만 반환 값이 있는 메소드입니다";
return str;
}
//3. 매개변수가 있고 반환값이 없는 메소드
public void method3(int num1, int num2) {
//이 메소드를 호출하는 곳에서 전달한 값을 전달받기 위해 선언하는 것이 메개변수
System.out.println(num1 - num2);
}
// 4. 매개변수 있고 반환값도 있는 메소드
public int method4(int num1, int num2) {
num1++;
num2++;
System.out.println("num1 : " + num1 + " num2 : " + num2);
return num1 + num2;
}
//5. 매개변수와 반환형이 배열인 경우
public int[] method5(int[] arr) {
arr[2] = 99;
return arr;
}
//6. 매개변수와 반환형이 클래스인 경우
public User method6(User user) {
user.setAge(30);
return user;
}
//7. 가변 매개변수
public int method7(int ... num) {
int sum = 0;
for(int i = 0 ; i <num.length ;i++) {
sum += num[i];
}
return sum;
}
}
package com.kh.chap07_method.part02_methodTest.run;
import java.util.Arrays;
import com.kh.chap06_constructor.model.vo.User;
import com.kh.chap07_method.part02_methodTest.controller.NonStaticMethod;
import com.kh.chap07_method.part02_methodTest.controller.StaticMethod;
public class Run {
public static void main(String[] args) {
//NonstaticMethod
NonStaticMethod test = new NonStaticMethod();
//1. 매개변수와 반환값이 없는 메소드 호출
test.method1();
//2. 매개변수가 없고 반환값이 있는 메소드 호출
// 그 반환형과 일치하는 자료형의 변수에 메소드 수행 후의 반환 값을 담아서 사용
String str = test.method2();
System.out.println(str);
//3. 매개변수가 있고 반환값이 없는 메소드 호출
//반드시 전달값은 매개변수의 타입과 순서, 개수가 일치하는 값을 넘겨줘야 함
test.method3(10, 20);
//4. 매개변수가 있고 반환값이 있는 메소드 호출
int num1 = 3;
int num2 = 5;
int result = test.method4(num1, num2);
System.out.println("num1 : " + num1 + " num2 : " + num2);
System.out.println("result : " + result);
//5. 매개변수와 반환 값이 배열인 경우
int[] arr = {1, 2, 3, 4, 5};
int[] returnArr = test.method5(arr);
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(returnArr));
//6. 매개변수와 반환값이 클래스인 경우
User user = new User("user03", "pass03", "부승관", 20, 'F');
User returnUser = test.method6(user);
System.out.println(user.information());
System.out.println(returnUser.information());
//7. 가변 매개변수
System.out.println(test.method7(1));
System.out.println(test.method7(1, 2));
System.out.println(test.method7(1, 2, 3));
System.out.println(test.method7(1, 2, 3, 4));
System.out.println(test.method7(1, 2, 3, 4 ,5));
/*매개변수와 반환값이 둘 다 없는 메소드입니다.
매개변수가 없지만 반환 값이 있는 메소드입니다
-10
num1 : 4 num2 : 6
num1 : 3 num2 : 5
result : 10
[1, 2, 99, 4, 5]
[1, 2, 99, 4, 5]
[userId=user03, userPwd=pass03, useName=부승관, age=30, gender=F]
[userId=user03, userPwd=pass03, useName=부승관, age=30, gender=F]
1
3
6
10
15
*/
Method Test 2>
package com.kh.chap07_method.part02_methodTest.controller;
public class StaticMethod {
//static 메소드는 프로그램 실행시 static 영역에 할당
// 또한 프로그램 종료 시 메모리 영역에서 삭제
public static void method1() {
int num1 = 10;
int num2 = 20;
System.out.println(num1 + "과 " + num2 + "의 합은 " + (num1 + num2) + "입니다.");
}
public static int method2() {
int num1 = 10;
int num2 = 20;
return num1 + num2;
}
public static void method3(String name) {
System.out.println(name + "님의 방문을 환영합니다.");
}
public static String method4(String name) {
return name + "님의 방문을 환영합니다.";
}
}
//StaticMethod
//객체 생성하지 않고 호출
//이미 프로그램 시작시에 static 영역에 메소드가 저장되어 있기 때문
//사용법은 클래스명.메소드명()
StaticMethod.method1();
System.out.println("10과 20의 합은 " + StaticMethod.method2() + "입니다.");
StaticMethod.method3("부승관");
System.out.println(StaticMethod.method4("조이"));
}
}
/*
10과 20의 합은 30입니다.
10과 20의 합은 30입니다.
부승관님의 방문을 환영합니다.
조이님의 방문을 환영합니다.*/
객체 배열
1. 객체배열
2. 객체배열 선언과 할당
1) 선언
클래스명[] 배열명;
클래스명 배열명[]
2) 할당
배열명 = new 클래스명[배열크기];
3) 선언과 동시에 할당 및 초기화
클래스명 배열명[] = new 클래스명[배열크기];
3. 객체배열 초기화
1) 인덱스를 이용한 초기화
2) 선언과 동시에 할당 및 초기화
4. 객체배열 구조
-Example arr[] = new Example[2]; => Academy라고 하는 객체가 만들어지는 단계가 아님. 0*123이라는 참조 변수가 만들어진 것 뿐.
-arr[0] = new Example(); => 이때 객체가 만들어진다.
package com.kh.object_vs_objectArray.model.vo;
public class Book {
private String title;
private String author;
private int price;
private String publisher;
public Book() {}
//우클릭 Source > (Alt + Shift + s)
//생성자 : Generate C'o'nstructor using Fields 클릭 (Alt + Shift + s + o)
//getters/setters : Gone'r'ate Getters and Setters 클릭 (Alt + Shift + s + r)
public Book(String title, String author, int price, String publisher) {
super();
this.title = title;
this.author = author;
this.price = price;
this.publisher = publisher;
}
public String getTitle() {
return title;
}
public String getAuthor() {
return author;
}
public int getPrice() {
return price;
}
public String getPublisher() {
return publisher;
}
public void setTitle(String title) {
this.title = title;
}
public void setAuthor(String author) {
this.author = author;
}
public void setPrice(int price) {
this.price = price;
}
public void setPublisher(String publisher) {
this.publisher = publisher;
}
public String information() {
return "제목 : " + title + ", 저자 : " + author + ", 가격 : " + price +
", 출판사 : " + publisher;
}
}
1> 객체 실행ver
package com.kh.object_vs_objectArray.run;
import java.util.Scanner;
import com.kh.object_vs_objectArray.model.vo.Book;
public class ObjectTest {
public static void main(String[] args) {
Book bk1 = null;
Book bk2 = null;
Book bk3 = null;
Scanner sc = new Scanner(System.in);
//도서 정보 입력
for(int i = 0; i < 3 ; i++) {
System.out.println(i + 1 + "번째 도서 정보 입력");
System.out.print("제목 : ");
String title = sc.nextLine();
System.out.print("저자 : ");
String author = sc.nextLine();
System.out.print("가격 : ");
int price = sc.nextInt();
sc.nextLine();
System.out.print("출판사 : ");
String publisher = sc.nextLine();
if(i == 0) {
bk1 = new Book(title, author, price, publisher);
}else if(i==1) {
bk2 = new Book(title, author, price, publisher);
}else {
bk3 = new Book(title, author, price, publisher);
}
}
//도서 정보 출력
System.out.println(bk1.information());
System.out.println(bk2.information());
System.out.println(bk3.information());
//도서 제목 검색
System.out.print("검색할 책 제목 : ");
String search = sc.nextLine();
if(search.equals(bk1.getTitle())) {
System.out.println(bk1.information());
}else if(search.equals(bk2.getTitle())) {
System.out.println(bk2.information());
}else if(search.equals(bk3.getTitle())) {
System.out.println(bk3.information());
}else {
System.out.println("검색 되는 도서가 없습니다");
}
/*
* 1번째 도서 정보 입력
제목 : 해리
저자 : 조앤
가격 : 200
출판사 : 사랑
2번째 도서 정보 입력
제목 : 자바
저자 : 잡자
가격 : 2000
출판사 : 사사
3번째 도서 정보 입력
제목 : 부승관
저자 : 세븐틴
가격 : 200
출판사 : 사리
제목 : 해리, 저자 : 조앤, 가격 : 200, 출판사 : 사랑
제목 : 자바, 저자 : 잡자, 가격 : 2000, 출판사 : 사사
제목 : 부승관, 저자 : 세븐틴, 가격 : 200, 출판사 : 사리
검색할 책 제목 : 해리
제목 : 해리, 저자 : 조앤, 가격 : 200, 출판사 : 사랑
*/
//관리해야 할 도서가 3권이 아니라 훨씬 많다면?
//출력문, 조건문을 해당 도서 개수만큼 사용할 수는 없으므로
// => 객체를 배열로 만들어서 수정
}
}
2> 객체 배열 방식ver
package com.kh.object_vs_objectArray.run;
import java.util.Scanner;
import com.kh.object_vs_objectArray.model.vo.Book;
public class ObjectArrayTest {
public static void main(String[] args) {
//1. 기본 자료형 배열
int[] arr = new int[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
System.out.println(arr);
System.out.println(arr[0]);
//arr의 자료형 : int[] => 레퍼런스 == 주소값을 가지는 변수
//arr[index]의 자료형 : int => 기본 자료형 == 실제 값을 가지는 변수
//2. 객체 배열 사용
Book[] bk = new Book[3];
bk[0] = new Book();
bk[1] = new Book();
bk[2] = new Book();
System.out.println(bk);
System.out.println(bk[0]);
System.out.println(bk[0].getPrice());
//bk의 자료형 : Book[]=> 레퍼런스
//bk[index]의 자료형 : Book => 레퍼런스
//bk[index].getPrice()의 자료형 : int => 변수
//도서 정보 입력
Scanner sc = new Scanner(System.in);
for(int i = 0 ; i < bk.length ; i++) {
System.out.println(i + 1 + "번째 도서 정보 입력");
System.out.print("제목 : ");
String title = sc.nextLine();
System.out.print("저자 : ");
String author = sc.nextLine();
System.out.print("가격 : ");
int price = sc.nextInt();
sc.nextLine();
System.out.print("출판사 : ");
String publisher = sc.nextLine();
bk[i] = new Book(title, author, price, publisher);
}
//도서 정보 출력
for(int i = 0 ; i < bk.length ; i++) {
System.out.println(bk[i].information());
}
//도서 검색
System.out.print("검색할 도서 제목 : ");
String search = sc.nextLine();
for(int i = 0 ; i < bk.length ; i++) {
if(bk[i].getTitle().equals(search)) {
System.out.println(bk[i].information());
}
}
/*1번째 도서 정보 입력
제목 : 해리포터
저자 : 조앤롤링
가격 : 20000
출판사 : 사랑출판
2번째 도서 정보 입력
제목 : 성과문화
저자 : 배정원
가격 : 20000
출판사 : 세종대학교
3번째 도서 정보 입력
제목 : 자바스크립트
저자 : 하귀싫
가격 : 20000
출판사 : 다다출판
제목 : 해리포터, 저자 : 조앤롤링, 가격 : 20000, 출판사 : 사랑출판
제목 : 성과문화, 저자 : 배정원, 가격 : 20000, 출판사 : 세종대학교
제목 : 자바스크립트, 저자 : 하귀싫, 가격 : 20000, 출판사 : 다다출판
검색할 도서 제목 : 성과문화
제목 : 성과문화, 저자 : 배정원, 가격 : 20000, 출판사 : 세종대학교*/
// ---------------------------------------------------------------
// 객체 배열 초기화
Book[] bArr = {new Book("제목1", "저자1", 30000, "출판사1"),
new Book("제목2", "저자2", 40000, "출판사2"),
new Book("제목3", "저자3", 50000, "출판사3")};
Book[] bArr2 = new Book[]{new Book("제목1", "저자1", 30000, "출판사1"),
new Book("제목2", "저자2", 40000, "출판사2"),
new Book("제목3", "저자3", 50000, "출판사3")};
}
}
'웹개발 수업 > JAVA' 카테고리의 다른 글
[Day +15]상속, 다형성 / 오버라이딩, toString, equals, hashcode, instanceof, 캐스팅, 바인딩 (0) | 2021.07.13 |
---|---|
[Day +14]상속 / 오버라이딩, 오버로딩, for each문 (0) | 2021.07.12 |
[Day +12]객체 / 필드, 전역변수, 지역변수, 매개변수, 예약어(static, final), 생성자, 오버로딩 (0) | 2021.07.11 |
[Day +11]객체 / 객체지향언어, 클래스, 캡슐화, 추상화, 접근 제한자, 필드 (0) | 2021.07.11 |
[Day +9]배열2 (0) | 2021.07.11 |