기초 문법 (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이 저장되면 객체의 연결이 끊기며, 더 이상 객체를 이용할 수 없음.
'JAVA > Study' 카테고리의 다른 글
상속 및 클래스 (2) & 마무리 (1) | 2021.07.26 |
---|---|
객체 (2) & 상속 및 클래스 (1) (0) | 2021.07.18 |
Java 개발 환경 구축 & 기초 문법 (1) (1) | 2021.07.01 |