스포츠마케터의 초보 개발자 도전기
JAVA study 10 본문
1. Class
- 동일한 스펙의 객체를 대량 생산을 위한 설계도
- 설계도만을 위한 Class에는 main method를 만들지 않는다
//1) 속성, 변수, 멤버, ... 등 다양한 이름으로 불림
//2) 메서드, 함수, 기능, ...
//접근제한자의 종류
//1. public : 같은 프로젝트의 모든 클래스에서 사용을 허가
//2. private : 현재 클래스에서만 사용을 허가 -> private 변수는 어떤 객체에서도 변경할 수 없다
//3. protected : 상속관계의 클래스에서 사용을 허가
//4. default : 같은 패키지의 클래스에서 사용을 허가
package ex1_class;
public class Computer {
//클래스의 구성요소
//1) 속성, 변수, 멤버, ... 등 다양한 이름으로 불림
//2) 메서드, 함수, 기능, ...
//Computer를 만들기 위한 설계도
private String brand = "samsung";
public int ssd = 256;
public int ram = 512;
public float cpu = 2.4f;
String color = "white";
//컴퓨터의 속성을 출력하기 위한 메서드
//메서드 : 어떤 작업을 수행하기 위한 명령문들의 집합
//접근제한자 반환형 메서드명(인자, 파라미터) {메서드의 실행 영역} //인자, 파라미터는 매개변수 등으로 불리기도 함
//public void getInfo() {}
public void getInfo( ) {
System.out.println("brand :" + brand);
System.out.println("ssd : " + ssd + "GB");
System.out.println("ram : " + ram + "MB");
System.out.println("cpu : " + ssd + "GHz");
System.out.println("color : " + color);
System.out.println("-------------------------");
}//getInfo
//접근제한자의 종류
//1. public : 같은 프로젝트의 모든 클래스에서 사용을 허가
//2. private : 현재 클래스에서만 사용을 허가 -> private 변수는 어떤 객체에서도 변경할 수 없다
//3. protected : 상속관계의 클래스에서 사용을 허가
//4. default : 같은 패키지의 클래스에서 사용을 허가
}
package ex1_class;
public class ComMain {
public static void main(String[] args) {
Computer com1 = new Computer(); //설계도에서 가져올 수 있음
System.out.println(com1.ssd);
System.out.println(com1.ram);
System.out.println(com1.cpu);
System.out.println(com1.color);
System.out.println("----------------------");
Computer com2 = new Computer(); //카피도 한줄로 쉽게 가능
com2.ssd = 512; //com2의 ssd값만 변경
com3.getInfo(); //윗줄처럼 하나씩 시스템 아웃하지 않고, Class에 만들어 놓은 method를 사용하여 코드 줄임
Computer com3 = new Computer();
com3.getInfo();
}//main
}
heap 메모리 생성↓
Stack | heap |
com1 | ssd:256 ram:512 cpu:2.4 color:whtie |
com2 | ssd:512 ram:512 cpu:2.4 color:whtie |
com3 | ssd:256 ram:512 cpu:2.4 color:whtie |
Class를 사용하여 쉽게 복사하고, 필요한 속성만 값을 변경할 수 있음
com1과 com2, com3는 다른 stack영역이라 heap메모리 부분을 변경 서로의 값에 영향을 미치지 않음
Method
1. 같은 이름의 메소드는 만들 수 없음
2. 파라미터로 값을 보내는 것이 일반적이고, 반환형으로 값을 줌
3. 어떤 타입이든 파라미터의 형태, 수에는 제약이 없다.
package ex2_method;
public class MethodTest {
public void test() { // 반환형이 void면 빈손으로 돌아감
System.out.println("test메서드가 호출됨");
return; // void 타입의 return은 생략해도 되나 아무것도 쓸 수 없음
}
// 반환형이 void가 아닐땐 return값이 필요
// 반환형이 int 면 return값도 int 형태여야한다.
// 반환값은 무조건 1개이며, 동시에 여러개의 return을 호출할 수 없다.
// return을 여러개 호출하거나, 한번에 여러개를 보낼 수 없다.
public int test2(int n) {
n += 100;
System.out.println("n:" + n);
return n;
}
public String getMe(String hobby, String gender) {
String str = "나는 취미가 " + hobby + "인 " + gender + "야";
return str;
}
public char test3(int a) {
if (a == 1) {
return 'A';
} else if (a == 2) {
return 'B';
} else {
return 'F';
}
}
}
package ex2_method;
public class MethodMain {
public static void main(String[] args) {
MethodTest m1 = new MethodTest();
int su = 100;
su = m1.test2(su);
System.out.println("su :" + su);
System.out.println("------------------");
String gender = "여자";
String hobby = "독서";
String ss = m1.getMe(hobby, gender);
System.out.println(ss);
System.out.println("--------------");
int num = 2;
char res = m1.test3(num);
System.out.println(res);
}// main
}
예제) 구구단 만들기
package ex3_gugudan;
public class Gugu {
public void getResult(int num) {
for (int i = 1; i <= 9; i++) {
System.out.printf("%d * %d = %d\n", num, i, num * i);
} // for
}//getResult()
}
package ex3_gugudan;
import java.util.Scanner;
public class GuguMain {
public static void main(String[] args) {
//키보드에서 정수값 하나를 받아서
//getResult()를 호툴했을 때, 구구단을 출력
Scanner sc = new Scanner(System.in);
System.out.println("정수를 입력하세요.");
int num = sc.nextInt();
Gugu g = new Gugu();
g.getResult(num); //입력값을 getResult에 전달
}
}
예제) 계산기 만들기
package ex4_calculator;
public class Cal {
public int getResult(int su1, int su2, String op) {
switch (op) {
case "+":
return su1 + su2;
case "-":
return su1 - su2;
case "*":
return su1 * su2;
case "/":
return su1 / su2;
}
return -1;
}
}
package ex4_calculator;
import java.util.Scanner;
public class CalMain {
public static void main(String[] args) {
//수 1 : 5
//수 2: 10
//연산자 : +
//15
//잘못된 연산자의 경우 -1 return
Scanner sc = new Scanner(System.in);
System.out.print("첫번째 숫자를 입력하세요 : ");
int su1 = sc.nextInt();
System.out.print("두번째 숫자를 입력하세요 : ");
int su2 = sc.nextInt();
System.out.print("연산자를 입력하세요 : ");
String op = sc.next();
Cal s1 = new Cal();
int res = s1.getResult(su1, su2, op);
System.out.printf("%d %s %d = %d", su1, op, su2, res);
}//main
}
2. 파라미터
파라미터로 배열 객체가 넘어가면 그 배열의 heap주소값을 그대로 받는다.
파라미터 타입은 어떤 형태든 가능하고 그 수에도 제약이 없다.
package Ex5_method_param;
public class ParamTest {
public void setArr(int a) {
System.out.println("결과 : " + ++a);
}// setArr()
public void realArr(int[] a) {
// 파라미터로 객체타입이 넘어오면 복사본이 heap의 주소값을 그대로 받는다
a[0] = 0;
a[1] = 0;
System.out.print("서브에서 출력한 a : ");
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
System.out.println();
}
}
package Ex5_method_param;
public class ParamMain {
public static void main(String[] args) {
ParamTest pt = new ParamTest();
int num = 10;
pt.setArr(num);
System.out.println("num : " + num);
int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
pt.realArr(arr);
System.out.print("메인에서 출력한 arr : ");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}// main
}
Variable Arguments (가변인자) ...
package ex6_var_args;
public class VarArgs {
// ...<- variable arguments(가변인자)
// 같은 타입의 파라미터를 갯수 제한없이
// 배열 구조로 받을 수 있도록 하는 개념
public void setData(String... name) {
for (String s : name) {
System.out.print(s + " ");
}
}
}
package ex6_var_args;
public class VarMain {
public static void main(String[] args) {
VarArgs va = new VarArgs();
va.setData("홍길동", "김길동", "박길동");
}// main
}
3. 반환형
반환형에도 어떠한 제약이 없다. 배열형태든 일반형태든 다 가능
package ex6_var_args;
public class VarArgs {
// ...<- variable arguments(가변인자)
// 같은 타입의 파라미터를 갯수 제한없이
// 배열 구조로 받을 수 있도록 하는 개념
public String[] setData(String... name) { // 배열타입으로도 가능
String[] str = new String[2];
for ( int i = 0; i < name.length; i++ ) {
System.out.print(name[i] + " ");
str[i] = name[i];
}//for
return str;
}
}
package ex6_var_args;
public class VarMain {
public static void main(String[] args) {
VarArgs va = new VarArgs();
va.setData("홍길동", "김길동", "박길동");
}// main
}
예제) Palindrome (회문)
package ex8_work;
public class Palindrome {
public void palindrome(String in) {
for (int i = 0; i < in.length()/2; i++) {
if (in.charAt(i) != in.charAt(in.length() - i - 1)) {
System.out.println("회문이 아닙니다.");
return;
}
} // for
System.out.println("회문입니다.");
}
}
package ex8_work;
import java.util.Scanner;
public class WorkMain {
public static void main(String[] args) {
// 키보드에서 입력받은 값이 '회문'인지 판단하시오
// 회문 : 앞으로, 뒤로 읽어도 똑같은 문장
Scanner sc = new Scanner(System.in);
System.out.print("입력 : ");
String in = sc.next();
Palindrome input = new Palindrome();
input.palindrome(in);
}// main
}
'develop > JAVA' 카테고리의 다른 글
JAVA study 12 (0) | 2024.03.13 |
---|---|
JAVA study 11 (1) | 2024.03.12 |
JAVA study 09 (0) | 2024.03.08 |
JAVA study 08 (0) | 2024.03.07 |
JAVA study 07 (0) | 2024.03.06 |