[day08]

클래스 : 변수 + 메서드

1. 메서드 method

1) 메서드 : 함수

어떠한 작업을 수행하기 위한 명령문들의 집합. manin()도 메서드
메서드 -> 연산을 처리하는 곳
변수 -> 그 결과를 저장하는 곳
메서드는 어떤 값을 입력 받아 처리하고
그 결과(하나만)를 돌려준다. (입력값, 리턴값 유/무)

목적, 장점 : 재사용 : 반복적인 코드를 줄이고 코드 관리가 용이함.
System.out.println(); 출력해주는 메소드

2) 메서드의 정의와 사용

#1. 입력값 x , 리턴값 x
#정의
리턴타입 메서드명(){
실행할 코드들
}

#사용(호출)
메서드명();


#2. 입력값 o , 리턴값 o
#정의
리턴타입 메서드명(타입 파라미터명, 타입 파라미터명,....){
실행할 코드들...
return 값;
}
#사용
메서드명(인자, 인자,....); 
#3. 

3) 용어 정리
리턴타입 : 메서드의 작성된 코드를 실행하고 리턴해주는 결과의 타입.
모든 타입이 될 수 있고, 리턴해줄것이 없다면 void 라고 작성.

메서드명 : 변수명명규칙 참고 (소문자) , 무슨 작업을 하는지 유추 가능한 이름으로 만들기
파라미터 : 매개변수, arguments
메서드를 실행할때(부를떄) 외부에서 던져주는 데이터를 받아주는 변수
메서드에 입력받을 값을 담아주는 변수
외부에서 던져주는 값이 없다면 괄호안 비워두기

return   : 함수를 호출한 곳으로 값을 돌려주는 키워드
1) 메서드를 종료시킴
2) 뒤에 작성한 값을 호출한 곳으로 
리턴타입이 void가 이 아닌 이상 반드시 return 값이 있어야한다.
리턴타입과 return 뒤에 기입할 데이터의 타입이 동일해야함.
void 타입에서도 어떤 조건에 의해 메서드가 중간에 강제종료하고 싶을때는
return; 값없이 키워드만 사용가능
인자     : 매게변수, 인수, 인자값, 인수값, 파라니처, arguments
메서드 호출시, 메서드에게 던져줄 데이터를 말함.
인자 -> 파라미터

주의!! 인자와 파라미터의 개수/순서/데이터타입은 반드시 일치해야함.

4) 메서드의 종류
#1. 클래스 메서드   : static이 붙은 메서드
객체 생성안하고 바로 사용가능
#2. 인스턴스 메서드 : 일반메서드
객체 생성한 후 사용가능
(같은 클래스안에 있는 애들을 부를때는 객체생성 안해도 됨)
-> 메모리 생성 시기가 같아서 가능함.


5) main() 메서드
public static void main(String[] args){
}

2. 메서드 인자 전달 방식

자바의 인자 전달 방식은 "값의 의한 호출 : Call-by-value" 이다.
호출하는 곳에서의 인자값이 복사되어 파라미터에게 전달된다.

1) 기본형 값 전달 : read only : 값만 복사해줌. 원본 훼손 x
2) 참조형 값 전달 : read & write : 객체의 레퍼런스(주소값)이 전달된다.

3. JVM 메모리 구조

RAM OS가 관리
JVM이 OS로 부터 메모리 할당 받음 (Runtime Data Area)
5개 영역, Class Area (= Method Area), Call Stack, Heap, Native Method Stack Area, Pcredgister

1) Method Area : static 이 붙어있는 것들의 영역. 
2) Call Stack : 현재 실행중인 메서드들이 차지하는 메모리 영역.
3) Heap : new ~~~ 로 생성되는 모든것들
4) Native : c/c++과 연동하는 작업을 함.

 

package day08;
class Test{
	
	int a= 10 ; // 인스턴스 변수
	static String str; // 클래스 참조형 변수
	Test 63 te; //인스턴스 참조형 변수
	static Tv t; //클래스 참조형 변수
	Person p ; //인스턴스 참조형 변수
	
	int test() {
		int abc; //지역변수 (메서드 안)
		Test test; //지역변수 (메서드 안)
		Tv tvtv; //지역변수
	}
	Stringahahahahaha(String a)// 인스턴스{
		int b ; //지역변수
		static Tv t2; // 불가능함 
	}
	
	static int[][] bbb; // 클래스 변수
	
}

public class Test63 {
	boolean b; //인스턴스 
	in [] arr; // 인스턴스 
	static String[] //클래스
	Scanner sc; //인스턴스
	
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		test55 t; //지역변수	
	}
}
package day08;
/* 클래스 기본형 변수   : 클래스명.변수명 : static 키워드. 메서드 밖
 * 클래스 참조형 변수   : 
 * 
 * 인스턴스 기본형 변수 : new 객체생성 후 참조변수명.변수명. 메서드 밖
 * 인스턴스 참조형 변수
 * 
 * 지역 기본형 변수      : 변수명 : 메서드 안 : 메서드 끝나면 값 소멸
 * 지역 참조형 변수      :
 */
class TvTest {
	
	boolean power = false;
	int ch = 1, vol =4;
	
}

public class Test64 {
	static int a;      // 클래스 기본형 Test64.a   자동 초기화 0
	static String s;   // 클래스 참조형 Test64.s   자동 초기화 null
	static Test64 t;   // 클래스 참조형 Test64.t   자동 초기화 null
	static TvTest tv; // 클래스 참조형 Test64.tv   자동 초기화 null
	
	int x;				// 인스턴스 기본형      자동 초기화 0
	TvTest t1;			// 인스턴스 참조형		자동 초기화 null
	
	//Test64 test64 ;		// 인스턴스 참조형 		자동 초기화 null
	//내 클래스 안에 내 타입으로 인스턴스 객체 생성하여 선언하면 안된다 !! (무한반복)
	//Test64 test64 ;		선언까지는 괜찮은데
	// Test64 test64 = new Test64();		// 객체를 생성하면 안됨
		
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(Test64.a);  // 값 없이 선언만해도 0으로 값 넣어줌 
		
		int b;
	//	System.out.println(b);  // 지역변수는 안됨 (클래스, 인스턴스는 선언하면 자동 초기값)
		
		//값넣기 
	/*	Test64.a = 100;
		System.out.println(Test64.s);
		
		Test64.s = "hello";  // new String("hello")
		System.out.println(Test64.t);
		
		Test64.tv = new TvTest(); // 기본형 아니라 객체 생성하고 넣어줌
		System.out.println(Test64.tv); //주소가 나옴
		System.out.println(Test64.tv.ch );
		System.out.println(Test64.tv.vol );
		
		Test64.t = new Test64();
		System.out.println(Test64.t);
		
		
		Test64 test = new Test64();
				System.out.println(test.x);
		Test64 test1 = new Test64();
				System.out.println(test2.t1);
		
	*/	

				

	//	Test64 test2 = new Test64();		
	//	System.out.println(test2.s);		
				
		Test64 test3 = new Test64();
		
		test3.t1 = new TvTest();
		
		
		System.out.println(test3.t1.vol);
		
	//	Test64 test4 = new Test64(); // test 64 값을 넣고 싶어서 객체생성
	//	test4.test64 = new Test64(); // test 64값 대입
	//	System.out.println(test4.test64);
		
	}
}

 

 

package day08;
/*
 *  리턴타입 메서드명(타입 파라미터,000){
 		실행할 코드들
 		return 값;
 *  }
 */


class Hello{
	// 입력 x, 리턴 x
	void printHello() {
		System.out.println("hello method");
		System.out.println("hello method");
	}
	
	
	// 입력 o, 리턴 x
	void helloName(String name) {
		System.out.println(name+"님 안녕하세요");
	}
	
	
	// 입력 x, 리턴 o
	int getTen() {
		return 10;
	}
	
	
	// 입력 o, 리턴 o
	int sum(int a, int b) {
		int c = a + b;
		return c;
	}
}


public class Test65 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Hello h = new Hello();
	//	h.printHello();
		
	//	h.helloName("피카츄");
		int result = h.getTen();
		System.out.println(h.getTen());
		System.out.println(result);
		int resultsum = h.sum(10, 10);
		System.out.println(h.sum(10, 10));
		System.out.println(resultsum);
	}
}

 

package day08;

class Calc{
	double mySum(double a, double b){
		double c = a + b;
		return c;
	}
	double mySub(double a, double b){
		double c = a - b;
		return c;
	}
	double myMul(double a,double b){
		double c = a * b;
		return c;
	}
	double myDiv(double a, double b){
		double c = a / b;
		return c;
	}
}	
	
public class Test66 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		// Calc라는 클래스를 만들고,
		//덧셈 mySum, 뺄쎔 mySub, 곱셈 myMul, 나눗셈 myDiv 메서드 4개를 만들어보고
		//main에서 각각 호출
		
		Calc h = new Calc();
		double sum = h.mySum(10, 0);
		System.out.println(sum);
		
		double sub = h.mySub(0, 1);
		System.out.println(sub);
		
		double Mul = h.myMul(5, 4);
		System.out.println(Mul);
		
		double Div = h.myDiv(6, 3);
		System.out.println(Div);	
	}
}

 

package day08;



//Tv 클래스
//변수 : 채널, 볼륨, 전원,
//메서드 : 전원 on/off, 채널변경, 볼륨조정, 채널입력해서 변경
class Tv {
	int ch = 1, vol = 0;
	boolean power = false;
	
	void powerOnOff() {
		power = !power;
	}
	
	void chUp() {
		ch++;
	}
	
	
	void chDown() {
		ch--;
	}
	void volup() {
		vol++;
	}
	void volDown(){
		vol--;
	}
	void chChange(int num){
		
		ch = num; 
	}
}


public class Test67 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		
		Tv tv = new Tv();
		System.out.println(tv.power);
		tv.powerOnOff();
		System.out.println(tv.power);
		tv.volup();
		tv.volup();
		tv.volup();
		tv.volup();
		System.out.println(tv.vol);
		tv.chChange(4);
		System.out.println(tv.ch);
	}
}
package day08;
// 인자 전달 방식
class Circle{
	int radius = 30;
	int numm = 0;
	int num = 10;
	
}
public class Test68 {

	int tot = 0;
// 편의를 위해 static 붙힘 다른 의도 없음!!	
static void plus(int num) {
	num ++ ;
	}
	static void biggerPizza(Circle pizza) {
		pizza.radius++;
	}
	
	static void increase(int[]arr) {
		for(int i = 0; i <arr.length; i++) {
			arr[i]++;  // arr[i] = arr[i] + 1
		}
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
	
		// #1. 기본형
		int num = 10 ;
		Circle num2 = new Circle();
		System.out.println("222"+num);
		plus(num);
	
	
		System.out.println(num);
		
	//	Circle h = new Circle();
	//	h.plus(10);
	// .out.println(h.numm);
		
		// #2. 참조형 (객체)
		Circle pizza = new Circle();
		System.out.println("pizza: " +pizza.radius);
		biggerPizza(pizza);
		System.out.println("pizza: " +pizza.radius);
		
		// #3. 배열
		int [] arr = {1,2,3,4,5};
		increase(arr);
		for(int a :arr)System.out.println(a);
		
	}
}

 

 

package day08;
class MyCard{
int num = 0;
boolean isBonus ;
}


class Student{
	String name;
	int age;
	void name(String whois) {
		name = whois;
		System.out.println(name);
	}
	
	void age(int num){
	  age = num; 
	  System.out.println(age);
	}
}

class MobilePhone{
	double width;
	double height;
	double depth;
	String color;
	String brand;
	
	void width(double num) {
		width = num;
		System.out.println(width);
	}
	void height(double num) {
		height = num;
		System.out.println(height);
	}
	void depth(double num) {
		depth = num;
		System.out.println(depth);
	}
	void color(String blabla) {
		System.out.println("색상은" + blabla);
	}
	void brand (String blabla) {
		System.out.println("브랜드는" + blabla);
	}
	
}
class  TheJoeunStudent {
	
	public static String[] Members() {
		String[] members = {"홍길동","가나다","잘모르겠따"};
		return members;
	}
}

public class Test69 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	/*	[ 객체 생성 + 변수 문제 ] 
				1. 아래와 같은 멤버변수를 갖는 MyCard 클래스를 정의 하세요. 
				   (MyCard 클래스는 카드 한장 만들수 있는 클래스) 
				   - 1 ~ 10 사이 카드의 숫자(정수)를 저장할 num이라는 변수 
				   - 카드가 보너스 카드인지 판단할 isBonus 라는 이름의 변수 (보너스카드면 true, 아니면 false저장) 
				2. 1번에서 만들 MyCard 클래스를 이용하여 카드 한장을 만들고 
				   해당 카드가 몇번이며, 보너스인지 아닌지 지정하고 
				   출력해서 확인해보세요. 

				3. 학생의 이름과 나이를 저장할 Student 클래스를 만들어보세요. 

				4. 3번에서 만든 Student 클래스를 이용하여 학생 한명을 만들고,
				   이름과 나이를 저장한 후 출력해서 확인해 보세요. 
				 Student some =new Student();   
				   some.age(5);
				   some.name("name");
	
				
				  5. 아래와 같은 속성을 저장할 수 있는 멤버변수를 갖는 MobilePhone 클래스를 정의하세요. 
*/
		MobilePhone handy = new MobilePhone();
		handy.width(4);
		handy.height(7);
		handy.depth(9);
		handy.color("파란색");
		handy.brand("삼성");
		//handy.width = 5.7;
		//handy.height = 5.7;
		
		
/*
				   - 가로사이즈 (실수 ex: 7.5) 
				   - 세로사이즈 (실수)
				   - 두께    (실수) 
				   - 폰색상
				   - 폰 브랜드 이름
				
	
				6. 5번에서 만든 MobilePhone 클래스를 이용하여 폰을 하나만들고, 
				   모든 속성을 변경하고 출력해보세요. 

				7. 학생의 이름과 옷색상을 저장할 TheJoeunStudent 클래스를 정의하세요. 
				 
				8. 7번에서 만든 클래스를 이용하여, 우리반 같은 분단에 앉은 학생들을 모두 만들고,
				   각 학생에 맞는 이름과 옷색상을 저장하고, 출력해보세요. 
*/
		
	}
}

 

 

 

package day08;
class Test{
	
	static int x = y;   //y가 아직 만들어 지기전에 x를 만들고있다
	 int y = 0;
}


class Test1{
	// 순서는 중요하지 않다 static이 먼저 로딩된다
	int y = x;
	static int x =100;	 // 
}

public class Test70 {
	static int a = 100;
	int i = 20;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//x출력 -> x는 클래스변수
		System.out.println(Test.x);  //클래스명 .변수명
		
		//y출력 -> y는 인스턴스
		// 객체 생성해야함
		Test t = new Test();
		System.out.println(t.y);
		
		//a	출력 -> a는 test70의 클래스변수	
		System.out.println(Test70.a);
		
		//i 출력 -> 객체생성
		Test70 test = new Test70();
		System.out.println(test.i);  //참조변수.변수명
		
		
		// 1회용으로 변수 출력만 하고 말것이다~
		System.out.println(new Test().i);
		
	}
}

 

+ Recent posts