강의 : https://www.youtube.com/watch?v=18HU7_kyubY&list=PL52K_8WQO5oWz_LYm3xg23m5q9qJXoE4n
자료 : http://alg.pknu.ac.kr/t/2016-2017-java/342
0. 프로젝트 세팅
JDK : 자바 컴파일러를 다운로드한다.
Eclipse : IDE를 설치한다. workspace를 설정한다.
자바 프로젝트 세팅 : Eclipse를 실행한다. -> File -> new-> project -> java -> project
-> 프로젝트 이름과 경로를 설정하고 생성한다.
-> 생성된 프로젝트의 src에 class를 생성하고 psvm을 포함해 생성한다.
1. 변수, 배열, 반복문
- 클래스 이름과 파일 이름은 일치해야 한다. 관습적으로 클래스 이름은 대문자로 시작한다.
- 클래스 이름을 변경하고 싶은 경우 Refactor를 통해 모든 클래스와 변수와 파일 이름 모두 변경할 수 있다.
- C언어가 함수의 집합인 반면 Java는 클래스의 집합이다. 하나의 클래스 안에는 여러 개의 함수가 들어간다. 위의 프로그램은 하나의 Hello 클래스로 이루어져 있다.
- 자바의 클래스는 관습적으로 대문자로 시작하고 여러 단어로 구성된 경우 각 단어를 대문자로 시작한다.
- public static void main은 psvm이라고 하며 프로그램을 실행하는 메인 메서드이다.
- System.out.println()은 C언어의 printf()와 같다. 출력하고자 하는 문자열은 겹따옴표("")로 묶으며 String 데이터이다.
- Eclipse의 자동완성 기능은 Ctrl-Space이다.
- 들여 쓰기(Indentation)을 체계적으로 하는 것은 중요하다. 이때 코드 블록을 선택하고 Ctrl-i를 누르면 자동으로 들여 쓰기를 정리해준다. 또한 저장 시 자동 들여쓰기를 설정할 수 있다. [Windows] -> [Preferences] -> [Java] -> [Editor] -> [Save Actions] -> Perform the selected actions on save 체크, Format source code의 Format all lines 체크
- 저장 시 자동 정렬은 편리하지만 긴 줄의 코드의 경우 가독성을 해친다. 이 경우 [Window] -> [Preferences] -> [Java] -> [Code Style] -> [Formatter]에 들어가 보면 새로운 포맷을 생성하고 Line Wrapping의 Maximum line width를 150 이상으로 지정해 주면 자동 정렬 시 줄 바꿈을 해결할 수 있다. 또한 Comments에서 Enable line comment formatting을 적용해 주석의 경우에도 적용한다.
- System.out.println()과 같은 자주 쓰지만 귀찮은 함수는 단축키 지정을 통해 편리하게 사용할 수 있다. [Window]->[Preferences]->[Java] ->[Editor]->[Templates]-> New 버튼 클릭 후 Name에 sout(단축키 이름)과 Pattern에 System.out.println(${cursor});를 작성
- Ctrl+Space를 일일이 치기 귀찮고 단축키를 바로 보고 싶다면 Auto activation triggers for java를 설정해 주면 편리하다. [Windows] -> [Preference] -> [Java] -> [Editor] -> [Content assist] -> [Auto activation triggers for java]에
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.
를 입력하고 Insertion에 Completion inserts 체크, 모든 체크박스를 체크해주면 엔터키를 입력했을 경우에만 해당 단축키가 입력이 된다.
Code1
- 자바 이클립스에서는 한 프로젝트 안에 새로운 클래스를 생성함으로써 여러 프로그램을 실행할 수 있다. 각가에 메인 함수를 가지고 있더라도 무관하며 실행 시 실행시킬 클래스를 지정하면 된다.
- 자바의 모든 변수와 메서드는 클래스 안에서 선언해야 한다.
- 메서드 밖에 있는 변수를 전역변수라고 한다. static 키워드를 사용한다. 메서드 내부에서 선언된 변수는 지역변수라고 하며 해당 메서드 내에서만 사용이 가능하다.
- 같은 + 연산자임에도 불구하고 피연산자가 문자열인 경우 정수 타입이 문자열로 변환된다.
- 같은 연산자가 여럿인 경우 왼쪽을 먼저 연산을 한다. 이를 Left Associativity라고 한다. 동일한 우선순위를 가진 연산자가 연속적으로 나올 때 덧셈의 경우 왼쪽 순서대로 연산을 하기 때문에 int + int + string 인 경우 int + int를 먼저 계산을 하고 나면 int + string 형이 됨으로 int -> string 형 변환을 하고 문자열을 출력하게 된다.
-
- 변수의 타입 : (Primitive 타입, 기본 타입) byte, short, int, long, float, double, char, boolean (문자열 타입) String, (그 밖의 타입들)...
- 변수의 데이터는 메모리(Memory)에 저장된ㄷ다.
- 변수는 사용되기 전에 선언이 되어야 한다. 변수의 선언이란 이름과 타입을 정해주는 것이다.
- 변수는 적용범위(scope)를 가진다. 메서드(블록) 내부에 선언된 변수는 그 메서드(블록) 내부에서만 사용이 가능하다. 메서드 외부 (단 클래스 내부)에 선언된 변수는 클래스 내에서 사용 가능하다.
Code2
- C와 마찬가지로 자바에서는 입력 방법(binary, text)에 따라 여러 입력을 받아 볼 수 있다. 가장 기본적인 방법은 Scanner를 선언함으로써 입력을 받을 수 있다.
- Scanner는 표준 입출력 라이브러리인 java.util.Scanner를 임포트 해야 한다. 하지만 어떤 라이브러리를 선언해야 하는지 일일이 기억하기 어렵기 때문에 이클립스에서 제공하는 Organize import를 활용하는 것이 좋다. [Source] -> [Organize Import], Ctrl+Shift+O 단축키, 혹은 해당 클래스에 Ctrl+Space를 눌러 임포트 할 라이브러리를 선택한다.
- System.in은 표준 입력으로서 키보드를 의미한다.
- 이클립스에서 빨간색은 오류이다. 스캐너의 라이브러리가 임포트 되지 않은 경우 표시되는 것을 확인해 볼 수 있다.
- 이클립스에서 노란색은 경고이다. 위 예시의 경우 스캐너를 닫아 주지 않아 경고가 발생했다. keyboard.close()로 스캐너를 닫아주는 것을 권장한다.
Code3
package lesson1;
import java.util.Scanner;
public class Code3 {
public static void main(String[] args) {
String str = "Hello, world";
String input = null;
Scanner sc = new Scanner(System.in);
System.out.print("Please type a string : ");
input = sc.next(); // 공백문자를 기준으로 가장 먼저 오는 문자열을 입력 받는다.
if (str == input) { // 문자열의 주소값 일치 여부를 확인할 뿐 데이터의 동일성을 확인할 수 없다.
System.out.println("String matched! :)");
} else {
System.out.println("String unmatched :(");
}
System.out.println("입력받은 문자열 : " + input);
sc.close();
}
}
출력결과 :
Please type a string : Hello, world
String unmatched :(
입력받은 문자열 : Hello,
- 정수 입력을 받았던 Code2와 달리 Code3는 문자열을 입력받는다. 때문에 input의 타입은 String으로 선언한다.
- String 타입에 아무런 데이터를 넣어주지 않을 경우 자동으로 null 타입으로 초기화되지만 명시적으로 초기화를 해주는 것이 좋다.
- next 함수의 경우 공백문자를 기준으로 잘라 입력을 받는다. nextLine을 사용해야 전체 줄을 입력받을 수 있다.
- 문자열의 일치 여부를 확인할 때 == 연산자로는 할 수 없고 input.equals(str)를 사용해야 한다. 아래에 올바른 문자열 입력 코드를 작성했다.
package lesson1;
import java.util.Scanner;
public class Code3 {
public static void main(String[] args) {
String str = "Hello, world";
String input = null;
Scanner sc = new Scanner(System.in);
System.out.print("Please type a string : ");
input = sc.nextLine();
if (str.equals(input)) {
System.out.println("String matched! :)");
} else {
System.out.println("String unmatched :(");
}
System.out.println("입력받은 문자열 : " + input);
sc.close();
}
}
출력결과 :
Please type a string : Hello, world
String matched! :)
입력받은 문자열 : Hello, world
Code4
package lesson1;
import java.util.Scanner;
public class Code4 {
public static void main(String[] args) {
String name = null;
int age;
String gender;
Scanner sc = new Scanner(System.in);
System.out.print("Please type your name, age and gender : ");
name = sc.next();
age = sc.nextInt();
gender = sc.next().toLowerCase();
if (gender.equals("male")) {
System.out.println(name + ", you're " + age + " years old man.");
} else if (gender.equals("female")) {
System.out.println(name + " you're " + age + " years old woman.");
} else {
System.out.println("Hmm... interesting");
}
sc.close();
}
}
출력결과 :
Please type your name, age and gender : myb 27 male
myb, you're 27 years old man.
- 여러 타입의 입력을 받는 예시이다.
- 문자열을 입력할 땐 next를 정수일 땐 nextInt를 사용하며 if - else if- else 문을 통해 비교를 한다. 문자열의 비교의 경우 equals() 안에 겹따옴표로 둘러싸인 스트링 리터럴과 비교해 진행한다. 마지막으로 스캐너는 사용이 마친 경우 close를 해준다.
Code5
package lesson1;
public class Code5 {
public static void main(String[] args) {
int[] grades; // 선언
grades = new int[5]; // 인스턴스 생성
grades[0] = 100;
grades[1] = 76;
grades[2] = 10;
grades[3] = 95;
grades[4] = 62;
System.out.println(grades[0]);
System.out.println(grades[1]);
System.out.println(grades[2]);
System.out.println(grades[3]);
System.out.println(grades[4]);
}
}
- 자바에서 배열은 위와 같이 선언한다. 선언된 배열은 반드시 new 키워드를 통해 인스턴스를 생성해야 사용할 수 있다. int 대신 다른 자료형을 변경함으로써 다양한 자료형의 배열을 선언 및 생성할 수 있다. 배열의 인덱스는 0에서부터 크기 - 1까지이며 각각에 값을 넣고 출력할 수 있다.
Code6
package lesson1;
public class Code6 {
public static void main(String[] args) {
int[] grades = new int[5];
grades[0] = 100;
grades[1] = 76;
grades[2] = 10;
grades[3] = 95;
grades[4] = 62;
for (int i = 0; i < grades.length; i++) {
System.out.println("Grade " + (i + 1) + " : " + grades[i]);
}
}
}
Grade 1 : 100
Grade 2 : 76
Grade 3 : 10
Grade 4 : 95
Grade 5 : 62
'프로그래밍언어 > Java' 카테고리의 다른 글
가변객체와 불변객체 (0) | 2023.05.23 |
---|---|
자바 어노테이션 (0) | 2023.05.21 |
[Java] Optional이 모길래??? (0) | 2023.04.13 |
[자바 기초] 자바 클래스 (0) | 2023.03.28 |
프로그래머스 LV.0 (0) | 2023.02.17 |