반응형
반응형
package constructor;

public class Car {
	String model; // this.model임
	int speed;
	
	//생성자
	Car(String model){
		this.model = model; // model은 매개변수
       // Car 클래스 형태를 가진 model과 클래스안에 model 과 구분짓기위해
	}
	
	void setSpeed(int speed) {
		this.speed = speed;
	}
	
	void run() {
		for (int i = 10 ; i <= 50 ; i = i + 10) {
			//this.setSpeed(i);
			setSpeed(i);
			System.out.println(this.model + "가 달립니다. (시속 : " 
			+ this.speed + "km/h)");
		}
	}
}
package constructor;

public class CarExample {

	public static void main(String[] args) {
		
		Car car = new Car("포르쉐"); 
        // 생성자가 있으면 반드시 그 양식에 맞게 매개변수 넣어야 함
		
		car.run();

	}

}

 

저번 시간에 이어서 이번엔 함수 만드는 방법에 대해서 알아봅시다

 

클래스에 변수도 들어갈 수 있지만 함수도 들어갈 수 있습니다.

 

함수는 원래 있던 걸 써도 되지만 자기가 만들어서 사용도 가능합니다.

 

void setSpeed(int speed) {
     this.speed = speed;
}

 

함수를 만들 때는 위나 아래쪽에 한쪽에 몰아서 써주세요 

 

void(반환타입) setSpeed(메소드명) int speed (매개변수)

반환타입에는 void, int , long..  다양하게 선언이 가능합니다.

반환타입이 무엇이냐면 이 메소드를 실행 시켰을 때 결과 값을 주는 겁니다. void는 아무것도 반환해주지 않고

 

예를들어서 정수를 더하는 함수를 제가 만들어보겠습니다.

 

int sum (int A , int B){

   int total = A + B;

   return total;

}

------------------------------------------------------------


System.out.print(sum(3,4));

int hab = sum(3,4);
System.out.println(hab);

 

이런식으로 A와 B를 받아서 더하고 그걸 반환하는 함수를 만들겠습니다.

 

return 하는 값과 함수선언시 반환타입은 동일해야합니다.

 

합친 값을 줘서 그걸 출력해야하기 때문에

 

1.

    System.out.print(sum(3,4));

    반환값을 그냥 출력해버리기

2.

    int hab = sum(3,4);
    System.out.println(hab);

    hab이라는 int형에 담아서(return값과 동일해야함) 출력해버리기

 

이러한 거 때문에 return값이 필요합니다. 모든 자료형을 쓸 수 있기 때문에 필요할 때 적재적소로 활용하면 됩니다.

 

메소드명은 자기가 짓고 싶은대로 지으면 되고

매개변수를 뭐로 받을지에 대한 인자값도 자기가 원하는 만큼 설정해주시면 됩니다.

 

 

다시 돌아와서

 

void run() {
     for (int i = 10 ; i <= 50 ; i = i + 10) {
     //this.setSpeed(i);
     setSpeed(i);
     System.out.println(this.model + "가 달립니다. (시속 : "+ this.speed + "km/h)");
     }
}

 

만들어둔 setSpeed 함수를 이용해서 속도를 설정해주고 그것을 출력하고 반복문으로 50까지 올라가도록 합니다.

그리고 메인 클래스에서 car.run()으로 실행해줍니다.

 

함수도 접근법은 동일합니다.

 

https://github.com/SungJLee/My_Java_World.git

 

SungJLee/My_Java_World

Contribute to SungJLee/My_Java_World development by creating an account on GitHub.

github.com

 

반응형
반응형
package constructor;

public class Car {
	String model; // this.model임
	int speed;
	
	//생성자
	Car(String model){
		this.model = model; // model은 매개변수
       // Car 클래스 형태를 가진 model과 클래스안에 model 과 구분짓기위해
	}
	
	void setSpeed(int speed) {
		this.speed = speed;
	}
	
	void run() {
		for (int i = 10 ; i <= 50 ; i = i + 10) {
			//this.setSpeed(i);
			setSpeed(i);
			System.out.println(this.model + "가 달립니다. (시속 : " 
			+ this.speed + "km/h)");
		}
	}
}
package constructor;

public class CarExample {

	public static void main(String[] args) {
		
		Car car = new Car("포르쉐"); 
        // 생성자가 있으면 반드시 그 양식에 맞게 매개변수 넣어야 함
		
		car.run();

	}

}

 

저번에 클래스를 공부했는데 이번엔 클래스의 생성자를 공부해보겠습니다.

 

저번에 차를 선언할 때 Car car = new Car(); 이런식으로 선언했는데 이렇게 선언하면

 

값이 다를 때 마다 car.compnay ="Google"; 이런식으로 계속 설정해줘야해서 번거롭습니다.

 

그래서 생성과 동시에 안에 특징 즉 변수에 값까지 넣어주는 과정이 생성자라고 생각하시면 됩니다.

 

생성자의 형태는 이렇습니다.

 


Car(String model){
   this.model = model;
}

 

Car[클래스명] String model[인자값]

이렇게 String형을 매개변수로 받는 함수를 만드는거 와 비슷합니다.

여기서 this란 자기 자신 즉 만들어진 객체 자기 자신을 가르키는 말입니다.

자기 자신의 model이라는 변수에 매개변수로 받은 model을 쓰겠다.

 

https://github.com/SungJLee/My_Java_World.git

 

SungJLee/My_Java_World

Contribute to SungJLee/My_Java_World development by creating an account on GitHub.

github.com

 

반응형
반응형

객체지향이라고 불리는 것 중에 클래스 입니다.

 

클래스란 붕어빵틀을 가장 많이 이용해 설명하는데요

 

붕어빵 틀이 있고 거기에 반죽을 부어서 만들잖아요 이렇게 하나하나씩 손으로 붕어빵을 빚어서 만들 수 있지만

틀에 넣고 굽고 빼고 하면 대량으로 생산이 가능하죠 시간도 절약되고 효율적입니다.

이러한 역할을 하는게 클래스입니다.

 

클래스가 붕어빵 틀인거죠 거기에서 클래스를 이용해 만들어지는 걸 객체(붕어빵)라고 합니다.

 

객체지향이라는 말이 이렇게 만들어지는 겁니다. 객체를 지향한다. 말 그대로 클래스를 이용한다는 의미입니다.

 

클래스 파일을 만들 때void main생성표시를 체크 안하고 만듭니다.

main에서는 프로그램이 직접 돌아가는 부분을 의미하죠

 

 

package class_exam;

public class Car {
	String company = "현대자동차";
	String model ="그랜저";
	String color = "검정";
	int maxspeed = 350;
	int speed;
}
package class_exam;

public class CarExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Car car = new Car(); // 클래스 변수명은 다 소문자
		
		System.out.println("제작회사 : " + car.company);
		System.out.println("모델명 : " + car.model);
		System.out.println("색깔 : " + car.color);
		System.out.println("최고속도 : " + car.maxspeed);
		System.out.println("현재속도 : " + car.speed);
	
		//필드값 변경
		car.speed = 60;
		System.out.println("수정된 속도 : " + car.speed);
	}

}

실행하면 이러한 결과가 나옵니다.

코드를 설명하자면 Car car = new Car();

 

가 나옵니다 CarClass 명을 의미합니다.(붕어빵 틀) Car라고 만들어줬죠?

car붕어빵틀로 만들 붕어빵 이름입니다. 원래 붕어빵에 이름은 안 주지만 여기선 만들어줘야합니다.

new Car();는 기본 문법입니다 new 클래스명(Car) () 입니다. 쉽게 붕어빵을 만드는 과정이라고 생각하시면 됩니다.

 

Car라는 붕어빵 틀로 car라는 붕어빵이름을 new Car();을 통해 만듭니다.

 

그리고 붕어빵만의 특징을 클래스 안에 적습니다. 여기에선

 

String company = "현대자동차";
String model ="그랜저";
String color = "검정";
int maxspeed = 350;
int speed;

 

이러한 거죠 

 

이렇게 만든 car라는 붕어빵에 특징을 사용하려면 .이라는 접근자를 사용합니다.

car.company .... 이런식으로 접근할 수 있습니다. 

 

class에서 값을 이미 적어둔 채로 만들 수도 있고 나중에 값을 넣을 수도 있습니다.

 

https://github.com/SungJLee/My_Java_World.git

 

SungJLee/My_Java_World

Contribute to SungJLee/My_Java_World development by creating an account on GitHub.

github.com

 

반응형
반응형
package local_variable_global_variable;

public class GlobalVariable {
	
	static int Global2 = 4;
	
	
	public static void main(String[] args) {
	
		System.out.println("Global : " + Global2); // 4
	
		for (int i = 0 ; i < 4 ; i++) {
			System.out.println("Global : " + Global2); // 4
		}
	}

}

전역변수란 어느 곳에도 쓸 수 있는 것입니다. static을 붙히면 되는 건데 웬만해서

static은 쓰지 말라고 하셨어요 다른 파일에도 영향을 끼칠 수 있을 수 있기 때문에 그렇다네요

이와같이 for안에 있는 곳과 main에서도 다 사용이 가능합니다.

 

package local_variable_global_variable;

public class LocalVariable {

	public static void main(String[] args) {
		
		
		for (int i = 0 ; i < 4 ; i++) {
			int local = 4;
			System.out.println("Local " + local); // 4
		}
		System.out.println("Local " + local); // 에러

	}

}

지역변수는 그 한정된 지역에서만 쓸 수 있는 것으로 for문에서 정의된 local은 밖에서 쓸 수 없죠

 

https://github.com/SungJLee/My_Java_World.git

 

SungJLee/My_Java_World

Contribute to SungJLee/My_Java_World development by creating an account on GitHub.

github.com

 

반응형
반응형
package array;

public class ForEach {

	public static void main(String[] args) {

		int[] scores = {95,70,40,50,20};
		
		int sum = 0;
		int count = 0;
		
		for (int score : scores) { // 배열 전체를 받는다
			sum += score;
			count ++;
		}
		System.out.println(sum);
		System.out.println(count);
		
	}

}

 

지금까지 배워온 내용하고 크게 다를거 없는데 for문이 좀 특이하게 생겼습니다.

scores의 인덱스 하나씩 받아가지고 score에 넣고 그 score를 이용해 사용가능합니다.

 

코드를 설명하자면 scores[0] 이 score에 들어가게되고 그게 scores의 배열 크기만큼 반복하게 됩니다.

 

https://github.com/SungJLee/My_Java_World.git

 

SungJLee/My_Java_World

Contribute to SungJLee/My_Java_World development by creating an account on GitHub.

github.com

 

반응형
반응형

 

package scanner;

import java.util.Scanner;

public class ScannerExample {

	public static void main(String[] args) {
		
		Scanner Scanf = new Scanner (System.in); // 한번만 선언해서 쓰면 된다.
		float num2 ;
		int num;
		String str;
		
		do {
			System.out.println(">");
			num2 = Scanf.nextFloat(); // float형 입력하기
			System.out.println(num2);
		}while(num2 != 1.5);
		
		do {
			System.out.println(">");
			num = Scanf.nextInt(); // int형 입력하기
			System.out.println(num);
		}while(num != 0);
		
		do {
			System.out.println(">");
			str = Scanf.nextLine(); // 문자열 입력하기
			
		}while(!str.equals("q"));
		
		System.out.println("시스템을 종료합니다");

	}

}

따라치시는 분들한텐 에러가 날 수 있는데 빨간 줄이 나옵니다. 저 기능을 쓰려면 import라는 작업을 해줘야합니다.

 

import란 무엇이냐면 과자코너에 가면 과자 종류들이 여러개 있잖아요?

그런 거 처럼 비슷하거나 자주쓰이는 것이나 연관 있는 걸 모아 놓은 걸 쓰겠다고 선언한 겁니다.

 

java.util의 경우 사람들이 되게 자주이용하는 것들이 많이 들어있습니다.

자세한 건 진행하면서 배우는 걸로 하죠

 

이렇게 가져다대면 import해라 라고 설명까지 해줍니다. 단축키로는 Scanner에 가져다대고 Ctrl + Shift + o 를 누르면

자동으로 import됩니다.

 

이제 Scanner에 대해서 알아봅시다 Scanner란 직접 입력을 할 수 있는 것을 의미합니다.

먼저 Scanf라는 객체를 선언후 어떤 자료형으로 입력을 할지를 정해야 합니다.

 

num2의 경우 float형이죠? Scanf.nextFloat(); 라는 걸로 float형을 입력할 수 있습니다.

 

nextInt의 경우는 int형을 입력할 수 있게 합니다.

nextLine문자열을 입력할 수 있게 합니다.

 

뭔가 공통점이 있죠? Line빼고 뒤에 자료형이 대문자로 들어가는 것 이 점 참고해서 다른 자료형으로도 쓸 수 있습니다.

 

https://github.com/SungJLee/My_Java_World.git

 

SungJLee/My_Java_World

Contribute to SungJLee/My_Java_World development by creating an account on GitHub.

github.com

 

반응형

'[Java] > [Java]' 카테고리의 다른 글

[Java] 자바 전역변수 지역변수  (0) 2021.07.02
[Java] 자바 반복문 (for - each문)  (0) 2021.06.14
[Java] 자바 2차원 배열 (Array)  (0) 2021.06.14
[Java] 자바 배열 (Array)  (0) 2021.06.13
[Java] 자바 String 문자열 객체  (0) 2021.06.13
반응형
package array;

public class TwoDemensionalArray {

	public static void main(String[] args) {
		
		int [][] arr = new int [2][3];
		
		for (int i = 0 ; i < arr.length ; i++) {
			for (int j = 0 ; j < arr[i].length; j++) {
				System.out.println("arr["+i+"]["+j+"] " + arr[i][j]);
			}
		}
		/*
		        arr[0][0] 0
			arr[0][1] 0
			arr[0][2] 0
			arr[1][0] 0
			arr[1][1] 0
			arr[1][2] 0
		 */

	}

}

2차원 배열이란 말 그대로 2차원형태입니다 

 

1차원은 이러한 형태이고

           

2차원은 이러한 형태입니다. 

     
     


지금 보여준 2행 3열 형태는 위에 자바코드에 있는 걸 그림으로 도식화한 것입니다.

선언방식 전에 배열과 아주 유사합니다 그냥 [] 하나 더 추가된 거밖에 없습니다.

 

 int     [][]  arr     = new   int        [2]      [3]

자료형 [][] 배열명 = new 자료형 [배열행][배열열]

 

arr[i].length를 보면 i가 처음에 0이기 때문 arr[0].length의 갯수 즉 3개입니다.

 

 

반응형
반응형

 

package array;

public class Array {

	public static void main(String[] args) {
		
		// ---------------------------- 방법 1 --------------------------
		
		int[] score = { 90 , 80 , 70 };
		
		// score[3]= 100; // 에러

		System.out.println("score[0]" + score[0]); // 90
		System.out.println("score[1]" + score[1]); // 80
		System.out.println("score[2]" + score[2]); // 70
		// System.out.println("score[3]" + score[3]); // 100
		
		
		int sum = 0;
		for (int i = 0 ; i < 3 ; i++)
		{
			sum = sum + score[i];
		}
		System.out.println(sum); //  240
		
		double avg = (double)sum / 3;
		System.out.println(avg); // 80.0

		// ---------------------------- 방법 2 ----------------------------
		
		int[] arr = new int[3];
		for (int i = 0 ; i < arr.length ; i++) {
			System.out.println("arr[" + i + "]" + " = "+arr[i]); // 0 0 0
		}
		arr[0] = 10;
		arr[1] = 20;
		arr[2] = 30;
		
		for (int i = 0; i < arr.length ; i++) {
			System.out.println("arr[" + i + "]"+ " = "+arr[i]); // 10 20 30
		}

	}

}

 

배열이란 같은 자료형의 값들을 여러개 받을 수 있는 구조입니다

 

어떠한 구조인지 대충 그림으로 표현한다면 이러합니다.

 

    score[0]       score[1]       score[2]

90 80 70 ....

 

또한 배열은 객체입니다. 그래서 Heap영역에 저장되고 그걸 참조하는 형식이죠

[0] , [1] ... 이러한 것들로 그 값에 접근합니다. [0], [1] 이러한 걸 인덱스라고 합니다.

참고로 String도 char의 배열입니다.


선언 방식은 크게 2가지입니다.

 

1. 선언과 동시에 값 넣기

 int []    score   = { 90 , 80 , 70 };

자료형  배열명  = 값들


1번의 특징은 배열의 크기를 안 정해줍니다. 하지만 값에 갯수에 따라 배열의 크기가 정해집니다.

하지만 뒤늦게 값을 추가할 순 없습니다.

 

2. 선언후 뒤에 값을 넣기

 

int[] arr = new int[3];

 int []    arr      = new int[3];

자료형  배열명  = new 배열 크기

 

arr[0] = 10;
arr[1] = 20;

arr[2] = 30;

 

2번의 특징은 3자리의 크기만큼 정해줍니다. 그리고 값을 나중에 추가할 수 있습니다.

 

저같은 경우는 2번같은 방법을 많이 썼습니다. 

arr.length배열의 크기를 구하는 메소드 입니다.

메소드가 뭐냐면 많이 썼던 것이 System.out.println("score[2]" + score[2]); 인데 무슨 동작을 해주는 역할을 해줍니다.

 

이거같은 경우는 출력해주는 역할을 해주죠 안에는 복잡한 구조로 돌아가지만

이러한 메소드(함수)를 만든 사람이 편하게 사용하라고 만든 것입니다. 복잡하게 출력하는 내용을 적을 필요 없이

System.out.println이라는 것만 쓰면 됩니다. 

 

https://github.com/SungJLee/My_Java_World.git

 

SungJLee/My_Java_World

Contribute to SungJLee/My_Java_World development by creating an account on GitHub.

github.com

 

반응형
반응형

 

package string;

public class StringExample {

	public static void main(String[] args) {
		
		String str1 = "박은서"; 
        	// stack에 str1이 저장되고 heap 에 string형태 박은서가 저장
		String str2 = "박은서";
		
		if (str1 == str2) { // heap영역에 박은서가 1개이고 공유함
			System.out.println("참조주소값이 같다");
		}else {
			System.out.println("참조주소값이 다르다");
		}
		
		String str3 = new String("박은서"); // 나중에 값이 정해지는 경우
		String str4 = new String("박은서"); 
		
		if (str3 == str4) {
			System.out.println("참조주소값이 같다");
		}else {
			System.out.println("참조주소값이 다르다"); //heap영역에 박은서가 2개임
		}
		
		if (str3.equals(str4)) { // 문자열값은 같음
		System.out.println("str3 과 str4 는 문자열이 같음");
		}

	}

}

Char이라는 문자 하나만 받는 자료형이 있었죠? 그러면 문장으로 받을 수 있는 자료형은 없을까요?

만약 없다면 char를 + 로 붙혀가면서 해야하는 엄청 불편이 있습니다.

네 정답은 있습니다. String이라는 것입니다.

 

여기서 str1 str2를 변수라고 하지 않습니다. 객체라고 부릅니다. 그 이유는 나중에 클래스를 공부하면서 알아봅시다

 

객체라고 불리는 것들의 값을 비교하려면 .equals를 써야합니다. ==는 그 참조 주소값을 비교하는 걸 의미합니다.

그림으로 str1 , str2의 관계 str3 , str4의 관계를 보여드리겠습니다.

 

 

str1 과 str2는 똑같은 걸 참조하지만 str3과 str4는 다릅니다. 하지만 str3과 str4의 문자열은 같은 거죠

Heap 영역과 Stack 영역에 대해선 나중에 알려드리겠습니다.

 

https://github.com/SungJLee/My_Java_World.git

 

SungJLee/My_Java_World

Contribute to SungJLee/My_Java_World development by creating an account on GitHub.

github.com

 

반응형