DINGA DINGA
article thumbnail
Published 2021. 7. 11. 16:31
기초 문법 (2) & 객체 (1) JAVA/Study
728x90

기초 문법 (2)

배열

- 배열: 인덱스를 이용해 자료형이 같은 데이터를 관리하는 것

자료형[] 배열이름 = new 자료형[배열크기];

자료형[] 배열이름 = {데이터1, 데이터2, 데이터3, ...};

 

- 배열 활용 예시

package pjtTest;
import java.util.Scanner;

public class MainClass {
	public static void main(String[] args) {
		// 배열을 이용한 학사관리
		String[] name = {"박찬호", "이승엽", "박병호", "이병규", "류현진"};
		int[] score = new int[5];
		Scanner scanner = new Scanner(System.in);
		System.out.printf("%s의 점수를 입력하시오. : ", name[0]);
		score[0] = scanner.nextInt();
		System.out.printf("%s의 점수를 입력하시오. : ", name[1]);
		score[1] = scanner.nextInt();
		System.out.printf("%s의 점수를 입력하시오. : ", name[2]);
		score[2] = scanner.nextInt();
		System.out.printf("%s의 점수를 입력하시오. : ", name[3]);
		score[3] = scanner.nextInt();
		System.out.printf("%s의 점수를 입력하시오. : ", name[4]);
		score[4] = scanner.nextInt();
		System.out.printf("%s 점수 : \t%.2f\n", name[0], (double)score[0]);
		System.out.printf("%s 점수 : \t%.2f\n", name[1], (double)score[1]);
		System.out.printf("%s 점수 : \t%.2f\n", name[2], (double)score[2]);
		System.out.printf("%s 점수 : \t%.2f\n", name[3], (double)score[3]);
		System.out.printf("%s 점수 : \t%.2f\n", name[4], (double)score[4]);
		double ave = (double)(score[0] + score[1] + score[2] + score[3] + score[4]) / 5;
		System.out.printf("-----------------------\n평 점 : \t%.2f", ave);
		scanner.close();
	}
}

 

* scanner 클래스로 사용자에게 키보드 입력을 받아올 수 있음.

import java.util.Scanner; // import

Scanner 변수이름 = new Scanner(System.in);

scanner.next(); // 문자열 (공백 기준)
scanner.nextLine(); // 문자열 (개행 기준)
scanner.nextInt(); // 정수
scanner.nextDouble(); // 실수

 

배열과 메모리

- 배열의 메모리 크기

배열을 구성하는 데이터의 자료형에 따라 배열의 메모리 크기가 결정됨.

 

- 배열을 가리키는 배열 이름

배열 변수는 배열 데이터 자체가 아닌 배열 데이터의 주소를 담고 있음.

 

- 배열 기본 속성

package pjtTest;
import java.util.Arrays;

public class MainClass {
	public static void main(String[] args) {
		// 배열 기본속성
		int[] arrAtt1 = {10, 20, 30, 40, 50, 60};
		int[] arrAtt2 = null;
		int[] arrAtt3 = null;
		
		// 배열 길이
		System.out.println("arrAtt1.length : " + arrAtt1.length);
		
		// 배열 요소 출력
		System.out.println("arrAtt1 : " + Arrays.toString(arrAtt1));
		
		// 배열 요소 복사
		arrAtt3 = Arrays.copyOf(arrAtt1, arrAtt1.length);
		System.out.println("arrAtt3 : " + Arrays.toString(arrAtt3));
		
		// 배열 레퍼런스
		arrAtt2 = arrAtt1;
		System.out.println("arrAtt1 : " + arrAtt1);
		System.out.println("arrAtt2 : " + arrAtt2);
		System.out.println("arrAtt3 : " + arrAtt3);
	}
}

배열 요소를 복사하는 것은 배열 요소들을 그대로 다른 배열로 옮겨오는 것이므로 요소는 같지만 주소는 다름.

배열 레퍼런스는 배열의 메모리 주소를 다른 배열에 대입하는 것이므로 같은 배열을 가리키게 됨.

 

- 다차원 배열

 

조건문

- if문

package pjtTest;

public class MainClass {
	public static void main(String[] args) {
		int num1 = 10;
		int num2 = 20;
        
		// if(조건식)
		if
		(num1 < num2) {
		System.out.println("num1는 num2보다 작다.");
		}
        
		System.out.println();
        
		// if(조건식) else
		if
		(num1 < num2) {
		System.out.println("num1는 num2보다 작다.");
		} else {
		System.out.println("num1는 num2보다 크거나 같다.");
		}
		
		System.out.println();
		
		// if(조건식) else if(조건식)
		if
		(num1 < num2) {
		System.out.println("num1는 num2보다 작다.");
		} else if (num1 > num2){
		System.out.println("num1는 num2보다 크다.");
		} else {
		System.out.println("num1과 num2는 같다.");
		}
	}
}

 

- switch문

package pjtTest;
import java.util.Scanner;

public class MainClass {
	public static void main(String[] args) {
		// switch문
		System.out.print("점수를 입력하세요. : ");
		Scanner inputNum = new Scanner(System.in);
		int score = inputNum.nextInt();
		
		switch (score) {
		case 100:
		case 90:
		System.out.println("수");
		break;
		
		case 80:
		System.out.println("우");
		break;
		
		case 70:
		System.out.println("미");
		break;
		
		default:
		System.out.println("try again!!");
		break;
		}
		
		inputNum.close();
	}
}

 

반복문

- for문

package pjtTest;
import java.util.Scanner;

public class MainClass {
	public static void main(String[] args) {
		// for문
		System.out.print("INPUT NUMBER : ");
		Scanner scanner = new Scanner(System.in);
		int inputNum = scanner.nextInt();
		for (int i = 1; i < 10; i++) {
			System.out.printf("%d * %d = %d\n", inputNum, i, (inputNum * i));
		}
	}
}

 

- while문

package pjtTest;
import java.util.Scanner;

public class MainClass {
	public static void main(String[] args) {
		// while문
		System.out.print("INPUT NUMBER : ");
		Scanner scanner = new Scanner(System.in);
		int num = scanner.nextInt();
		int i = 1;
		while (i < 10) {
			System.out.printf("%d * %d = %d\n", num, i, (num * i));
			i++;
		}
	}
}

 

- do-while문

package pjtTest;

public class MainClass {
	public static void main(String[] args) {
		// do ~ while문
		int i = 1;
		do {
			System.out.println("무조건 1번은 실행합니다.");
			i++;
		} while (i < 3);
	}
}

 

객체 (1)

객체지향 프로그래밍

- 객체: 속성과 기능을 가지는 프로그램 단위

 

- 클래스

객체를 생성하기 위한 틀.

모든 객체는 클래스로부터 생성됨.

속성(멤버 변수)과 기능(메서드)으로 구성됨.

 

클래스 제작과 객체 생성

- 클래스 제작

package lec11Pjt001;

public class Grandeur { // 클래스 이름: 일반적으로 대문자로 시작

	public String color; // 멤버 변수 (속성)
	public String gear;
	public int price;

	public Grandeur() { // 생성자
		System.out.println("Grandeur constructor");
	}

	public String run() { // 메서드 (기능)
		System.out.println("-- run --");
        	return "Hello";
	}

	public void stop() { // 메서드 (기능)
		System.out.println("-- stop --");
	}
}

 

- 객체 생성

// Grandeur.java

public class Grandeur {
	public String color; 
	public String gear;
	public int price;

	public Grandeur() {
		System.out.println("Grandeur constructor");
	}

	public void run() {
		System.out.println("-- run() --");
	}

	public void stop() {
		System.out.println("-- stop() --");
	}
	public void info() {
		System.out.println("-- info() --");
		System.out.println("color : " + color);
		System.out.println("gear : " + gear);
		System.out.println("price : " + price);
	}
}
// MainClass.java

public class MainClass {
	public static void main(String[] args) {
		Grandeur myCar1 = new Grandeur();
		myCar1.color = "red";
		myCar1.gear = "auto";
		myCar1.price = 30000000;
		myCar1.run();
		myCar1.stop();
		myCar1.info();
		System.out.println();
		
		Grandeur myCar2 = new Grandeur();
		myCar2.color = "blue";
		myCar2.gear = "manual";
		myCar2.price = 25000000;
		myCar2.run();
		myCar2.stop();
		myCar2.info();
	}
}

 

메서드

- 메서드 선언

접근자 반환형 메서드이름(매개변수){ // 메서드 선언
	// 메서드 정의
}

 

- 메서드 호출

ChildClass childClass = new ChildClass();
childClass.getInfo();

 

- 매개변수

// ChildClass.java

public class ChildClass {
	public String name;
	public String gender;
	public int age;
	
	public ChildClass() {
		System.out.println("-- ChildClass constructor --");
	}
	
	public void setInfo(String n, String g, int a) {
		System.out.println("-- setInfo() START --");
		
		name = n;
		gender = g;
		age = a;
	}
	
	public void getInfo() {
		System.out.println("-- getInfo() START --");
		
		System.out.println("name : " + name);
		System.out.println("gender : " + gender);
		System.out.println("age : " + age);
	}
}
// MainClass.java

public class MainClass {
	public static void main(String[] args) {
		ChildClass child1 = new ChildClass();
		
		child1.setInfo("Hong Gil Dong", "M", 20);
		
		child1.getInfo();
	}
}

 

- 중복 메서드 (overloading): 이름은 같고, 매개변수의 개수 또는 타입이 다른 메서드를 만들 수 있음.

 

- 접근자: 메서드를 호출할 때 접근자에 따라서 호출이 불가할 수 있음.

메서드 호출부(외부) -> private 메서드 (x)

메서드 호출부(외부) -> public 메서드 (o)

private 메서드 <-> public 메서드 (o)

 

객체와 메모리

- 동적 생성 (메모리에서 객체 생성)

객체는 메모리에서 동적으로 생성되며, 객체가 더 이상 불필요하면 GC에 의해 제거됨.

 

- 레퍼런스: 생성한 객체의 주소를 변수에 저장하는 것.

 

* 자료형이 같아도 다른 공간에 존재하면 다른 객체임.

* 레퍼런스에 null이 저장되면 객체의 연결이 끊기며, 더 이상 객체를 이용할 수 없음.

728x90

'JAVA > Study' 카테고리의 다른 글

상속 및 클래스 (2) & 마무리  (1) 2021.07.26
객체 (2) & 상속 및 클래스 (1)  (0) 2021.07.18
Java 개발 환경 구축 & 기초 문법 (1)  (1) 2021.07.01