KEEP GOING
[프로그래머스] 자바 입문 PART1~5 정리 본문
https://programmers.co.kr/learn/courses/5/
자바 입문
자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금
programmers.co.kr
[파트1. 자바 시작하기]
- cmd 컴파일 명령어 javac
- cmd 실행 명령어 java
이클립스 워크스페이스 경로 C:\Users\dkwlw\Desktop\JAVA
프로젝트 생성 file>new>Java Project
- 폰트 크기 조정 Windows > Preference > fonts 검색
- Ctrl + S : 저장시 바로 컴파일 처리됨
- 워크스페이스 경로인 JAVA 디렉토리로 들어가면 bin 폴더에 class 파일, src 폴더에 java 파일 생성
- 파일 실행 경로 *.java > Run AS > Java Application
[파트2. 변수와 계산]
[상수]
- 변수 앞에 final 이라는 키워드를 붙이면 상수이다.
- 상수란 변하지 않는 수로, 선언과 동시에 바로 초기화를 해야 한다.
- 상수는 대문자로 시작한다는 명명 규칙이 존재함
- 여러 단어로 이루어진 경우 '_'로 구분한다.
ex) final int PI = 3.1415; // PI - 상수, 3.1415 - 리터럴(값)
[비교 연산자]
i += 10;
System.out.println(i); //10
System.out.println(i -=5); //5
System.out.println(i); //5
[연산자 우선순위 - 증감 연산자]
- 증감 연산자는 전위 연산자인지 후위 연산자 인지에 따라서 우선 순위가 바꾼다.
- 전위 증감 연산자는 실행문에서 값이 먼저 증가/감소해서 적용된다 ex) ++a
- 후위 증감 연산자는 실행문에서 값이 후에 증가/감소해서 적용된다. ex) a++
int a = 5;
System.out.println(++a - 5); //1
System.out.println(a); // 6
int a = 5;
System.out.println(a++ - 5); //0
System.out.println(a); //6
[파트3. 제어문]
[if - else if - else문]
if(조건식1){
실행문; //조건식1이 true일때 실행
}else if(조건식2){
실행문; //조건식1이 false이고 조건식2가 true일때 실행
}else{
실행문; //조건식1과 2가 false일때 실행
}
[삼항 연산자]
- 조건식 ? 피연산자1 : 피연산자2
- 조건식의 연산결과가 true 이면, 결과는 피연산자 1이고, false 이면 결과는 피연산자2
int b = (5>4) ? 50 : 40; //50
[switch-case]
- switch문은 어떤 변수의 값에 따라서 문장을 실행할 수 있도록 하는 제어문
- switch문에서 사용하는 키워드는 switch, case, default, break
- switch 다음 괄호 안에 정수 타입의 변수만 올 수 있었지만, JDK7부터는 문자열 타입의 변수도 올 수 있음
String grade = "A";
switch(grade){
case "A":
System.out.println("1등급");
case "B":
System.out.println("2등급");
case "C" :
System.out.println("3등급");
default :
System.out.println("fail");
}
+ 예제) 다음 코드의 출력값은?
public class SwitchExam {
public static void main(String[] args) {
int a = 100;
switch(a/10) {
case 10:
System.out.print('A');
case 5:
System.out.print('B');
default:
System.out.print('C');
}
}
}
답: ABC
*switch문의 제약 조건
switch문에서 조건식에 a/10.0이 올 수 있을까? 답은 올 수 없다.
a/10.0 = 100/10.0으로 자동형 변환되어 값은 10.0이 되는데, switch 문의 조건식의 값은 반드시 정수 타입만 가능하다.
그리고 이 조건식의 값이 case문으로 이동하기 때문에 case 문 값 역시 정수여야 한다.
즉, 실수나 변수는 조건식 그리고 case문의 값이 될 수 없다.
1. switch문의 조건식의 값은 반드시 정수 또는 문자열이어야 한다. (Java 1.7부터 문자열 허용)
2. case문의 값은 정수 혹은 상수만 가능하며 중복되어서는 안된다. (실수 x, 변수 x)
int result, num;
final int ONE = 1;
switch(result){
case '1': //문자 가능(정수 49와 같음)
...
case "cash": //문자열 가능
...
case ONE : //정수인 상수 가능
...
case num: //변수 불가능
...
case 1.7: //실수 불가능
...
}
[파트4. 배열]
- 배열의 길이 arr.length ※ 문자열의 길이는 str.length()
[2차원 배열]
int[][] array = new int[3][4];
- 정수 4개씩 담을 수 있는 배열 3개 생성
- array[1]은 또 다른 1차원 배열을 가리키는 참조형 변수이므로 값을 담을 수는 없다 array[1] = 10; (X)
[가변 크기의 2차원 배열 생성하기]
int[][] array = new int[3][];
//array는 3개짜리 배열을 참조함. 3개짜리 배열은 아직 참조하는 배열이 없다.
array[0] = new int[1]; //정수를 하나 담을 수 있는 배열을 생성하여 array의 0 번째 인덱스가 참조.
array[1] = new int[2]; //정수를 두개 담을 수 있는 배열을 생성하여 array의 1 번째 인덱스가 참조.
array[2] = new int[3]; //정수를 세개 담을 수 있는 배열을 생성하여 array의 2 번째 인덱스가 참조.
[배열 선언 및 초기화]
// 크기할당 및 초기화 없이 배열만 선언
int[] arr1; // -- (1)
int arr2[];
// 선언과 동시에 배열 크기 저장
int[] arr3 = new int[5];
String[] arr4= new String[3];
// 기존 배열 초기화하기
arr1 = new int[5]; // (1) 참고
// 선언과 동시에 배열 크기 지정 및 값 초기화
int[] arr5 = {1,2,3,4};
int[] arr6 = new int[] {1,3,3,3};
String[] weeks = {"월","화","수","목","금","토","일"};
// 2차원 배열 생성
int[][] arr7 = new int[4][3];
int[][] arr8 = {{1,5,3}, {7,4,5}, {4,1,9}, {9,4,4}};
- for each 구문 (향상된 for문)
for (int val:arr){
System.out.println(val);
}
+)
String names = {"suzy", "nabi", "jeongsoo"};
for (String str:names){
System.out.println(str);
}
//suzy
//nabi
//jeongsoo
[파트5. 클래스와 객체]
String 클래스를 이용하여 문자열을 생성할 때
String str1 = "hello";
String str2 = "hello";
=> hello는 상수값으로 상수가 저장되는 영역에 저장된다. 따라서 str1, str2 두 변수는 같은 인스턴스를 참조한다.
String str1 = new String("hello");
String str2 = new String("hello");
=> new 연산자를 이용할 경우 무조건 인스턴스가 새로 생성된다. 따라서 두 변수는 다른 인스턴스를 참조한다.
- String은 불변 클래스이다. 불변이란 String이 인스턴스가 될때 가지고 있던 값을 나중에 수정할 수 없다.
- String은 문자열과 관련된 다양한 메소드를 가지고 있다. 메소드를 호출한다 하더라도 String은 내부의 값이 변하지 않는다.
- String이 가지고 있는 메소드중 String을 반환하는 메소드는 모두 새로운 String을 생성해서 반환한다.
[String이 불변 클래스임을 보여주는 예제]
public class StringExaml {
public static void main(String[] args) {
String s = "hello";
System.out.println(s);
System.out.println(s.substring(3));
System.out.println(s);
}
}
[주소값 비교(==)와 값 비교(equals)]
public class StringExaml {
public static void main(String[] args) {
String s1 = new String("hello");
String s2 = new String("hello");
if (s1.equals(s2)) {
System.out.println("두 변수는 같은 문자열을 포함하고 있음");
}
else{
System.out.println("두 변수는 다른 문자열을 포함하고 있음");
}
if (s1 != s2) {
System.out.println("두 변수의 참조값은 다름");
}
else{
System.out.println("두 변수의 참조값은 같음");
}
}
}
[String 클래스의 메소드]
String str = "hello";
System.out.println(str.charAt(0));
System.out.println(str.concat("world"));
System.out.println(str.length());
System.out.println(str.substring(2));
System.out.println(str.substring(1,3));
[변수의 scope와 static]
- 모든 클래스는 인스턴스화하지 않은 채로 실행할 수 없다
- static 키워드를 붙이면 클래스가 인스턴스화하지 않아도 static 필드, static 메소드 실행 가능
- 스코프 : 프로그램 상에서 사용되는 변수들의 사용 가능한 범위
[메인 메소드에서 변수 사용하기]
public class VariableScopeExam {
int globalScope = 10; //인스턴스 변수
public void scopeTest(int value){
int localScope = 20;
System.out.println(globalScope);
System.out.println(localScope);
System.out.println(value);
}
public static void main(String[] args) {
System.out.println(globalScope); //오류
System.out.println(localScope); //오류
System.out.println(value); //오류
}
}
- main 메소드는 static한 메소드이기 때문에 globalScope라는 Non static한 필드를 사용 할 수 없다.
- 매개변수로 선언된 int value 는 메서드 선언부에 존재하므로 해당 메소드 블럭 내에서만 사용할 수 있다.
- 메소드 블럭내에서 선언된 localScope 변수의 scopeTest 메소드 블럭 내에서만 사용 가능하다.
[인스턴스 변수와 클래스 변수 비교]
- golbalScope같은 변수(필드)는 인스턴스가 생성될때 생성되기 때문에 인스턴스 변수라고 한다.
- staticVal같은 static한 필드를 클래스 변수라고 한다.
ValableScopeExam v1 = new ValableScopeExam();
ValableScopeExam v2 = new ValableScopeExam();
v1.golbalScope = 20;
v2.golbalScope = 30;
System.out.println(v1.golbalScope); //20 이 출력된다.
System.out.println(v2.golbalScope); //30이 출력된다.
v1.staticVal = 10;
v2.staticVal = 20;
System.out.println(v1.staticVal); //20 이 출력된다.
System.out.println(v2.staticVal); //20 이 출력된다.
System.out.println(VariableScopeExam.staticVal); //20 이 출력된다.
- static한 변수는 공유된다
- static하게 선언된 변수는 값을 저장할 수 있는 공간이 하나만 생성된다. 그러므로, 인스턴스가 여러개 생성되어도 static한 변수는 하나다.
- 클래스 변수는 레퍼런스.변수명 하고 사용하기 보다는 클래스명.변수명 으로 사용하는것이 더 바람직하다.
'language > java' 카테고리의 다른 글
[JAVA] 자주 사용하는 문법 정리 (형변환, Scanner, 구분자 지정) (0) | 2022.06.06 |
---|---|
[JAVA] 추상화 : 추상 클래스와 인터페이스 (0) | 2022.05.31 |
[JAVA] 웹(WEB) CS 정리 (0) | 2022.05.24 |
[프로그래머스] 자바 중급 PART1~8 정리 (0) | 2022.05.14 |
[프로그래머스] 자바 입문 PART6~9 정리 (0) | 2022.05.04 |