Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
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
Archives
Today
Total
관리 메뉴

스포츠마케터의 초보 개발자 도전기

JAVA study 10 본문

develop/JAVA

JAVA study 10

teammate brothers 2024. 3. 11. 13:55

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