package com.mywork.ex; // 패키지 : 최소 3수준 유지
public class Ex01_Hellojava { // 클래스 (소스파일의 이름과 같다!)
public static void main(String[] args) { // main 메소드
System.out.println("Hello Java");
// 주석 : C와 같은 방법으로 처리(// , /* */)
// 실행 : Ctrl + F11
}
}
package com.mywork.ex;
public class Ex02_literal {
public static void main(String[] args) {
// 자동 완성
// Ctrl + SpaceBar
// sysout 을 입력한 뒤 Ctrl + SpaceBar를 누르면 System.out.println() 자동 완성
// 1. 문자는 홑따옴표('')
System.out.println('A');
System.out.println('한');
// 2. 문자열은 쌍따옴표("")
System.out.println("Hello Java");
// 3. 정수나 실수
System.out.println(100);
System.out.println(3.141592);
// 4. 논리값
System.out.println(true);
System.out.println(false);
}
}
package com.mywork.ex;
public class Ex03_sysout {
public static void main(String[] args) {
// 1. 줄바꿈
System.out.println();
// 2. 숫자끼리 + 연산자 : 산술 연산자
System.out.println(1+1);
System.out.println(1.5 + 1);
// 3. 문자열끼리 + 연산자 : 연결 연산자
System.out.println("Hello" + "Java");
// 4. 숫자와 문자열의 + 연산 : 연결 연산자
System.out.println(100 + "원");
System.out.println(100 + 100 + "원");
System.out.println("$" + 100);
System.out.println("$" + 100 + 100);
// 5. 이스케이프 문자
// 1) 줄 바꿈 : \n
// 2) 간격(탭) : \t
// 3) ' 출력 : '\
// 4) " 출력 : "\
}
}
package com.mywork.ex;
public class Ex04_PrimitiveType {
public static void main(String[] args) {
/*
* 기본자료형(primitive type)
* 1. 정수형
* 1) byte
* (1) 크기 : 1바이트(8비트)
* (2) 개수 : 2의 8제곱(256개)
* (3) 범위 : -128 ~ 127 (-2의 7제곱 ~ 2의 7제곱 - 1)
* 2) short
* (1) 크기 : 2바이트
* (2) 개수 : 2의 16제곱 (65,636개)
* (3) 범위 : -32,768 ~ 32,767
* 3) int
* (1) 크기 : 4바이트
* (2) 개수 : 2의 32제곱 (4,294,967,296개)
* (3) 범위 : -2,147,483,648 ~ 2,147,483,647
* 4) long
* (1) 크기 : 8바이트
* (2) 개수 : 2의 64제곱 (18,446,744,073,709,551,616개)
* (3) 범위 : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
* 5) 100억 : 10000000000 처리를 정상적으로 하려면
* 10000000000L 이라고 표기해야 한다. (int 범위를 벗어나는 값은 접미사 L 표기)
* 6) 만약 long형으로 처리가 안 되는 숫자는 BigInteger 클래스를 이용해서 처리한다.
*/
/*
* 변수 선언
* 1. 아무데서나 선언할 수 있다.
* 2. 변수명은 첫 글자를 소문자로 하고, camel case 방식을 따른다.
* (각 단어의 첫 글자만 대문자로 하고, 나머지는 소문자로 한다.)
* 예 : myAge
* 3. 영문, 숫자, 밑줄(_), 한글이 가능하다.
*/
// 코드 복사 : 커서를 두고 Ctrl + Alt + ↓
// 코드 삭제 : 커서를 두고 Ctrl + d
byte var1 = 127;
short var2 = 32767;
int var3 = 210000;
long var4 = 10000000000L;
System.out.println(var1);
System.out.println(var2);
System.out.println(var3);
System.out.println(var4);
/*
* 2. 실수형
* 1) float
* (1) 크기 : 4바이트
* (2) 구성 : 부호 + 지수 + 소수
* (3) 범위 : -1.4E-45 ~ (부호:-, 지수E-45 10의 -45제곱)
* 2) double
* (1) 크기 : 8바이트
* (2) 범위 : -4.0E-324 ~
* 3) 모든 실수형은 오차가 있다.
*/
float var5 = 3.14F; // 굳이 float을 사용하려면 숫자 뒤에 접미사 F 표시
double var6 = 3.14;
System.out.println(var5);
System.out.println(var6);
/*
* 3. 문자형
* 1) char
* (1) 크기 : 2바이트 (C의 char는 1바이트)
* (2) 문자의 크기
* - 영문 : 1바이트
* - 한글 : 2바이트 // 한글이 사용가능하기 때문에 2바이트로.
* 2) 코드
* (1) ASCII : 1바이트 영문 표준 코드 (C언어)
* (2) UNICODE : 2바이트 국제 표준 코드 (JAVA언어)
*/
char ch1 = 'A';
char ch2 = '한';
System.out.println(ch1 + ch2); // char 문자는 코드 연산 시 숫자로 인식.
System.out.println("" + ch1 + ch2); // 문자열을 섞어서 출력하면 된다.
/*
* 4. 논리형
* 1) boolean
* (1) 참 : true
* (2) 거짓 : false
* (3) 관계 연산자, 논리 연산자의 결과
* (4) 변수명 : is 로 시작하는 것이 일반적
*/
boolean isPositive;
isPositive = true;
if(isPositive) {
System.out.println("양수이다");
}
/*
* 5. 문자열
* 1) String
* (1) 참조 자료형이다.
* (2) 값을 저장하지 않고, 주소(참조)를 저장하는 자료형이다.
* (3) 사용 방법
* String str1 = "Hello";
* String str2 = new String("Java"); C언어의 포인터 개념과 동일
*/
String str = "Hello";
System.out.println(str);
}
}
package com.mywork.ex;
public class Ex05_Variable {
public static void main(String[] args) {
// 1. 변수 선언 (선언과 초기화 동시에 진행)
int num1 = 0;
float num2 = 0F;
double num3 = 0;
char ch = 0;
//String str = 0; // 에러
String str1 = null; // null : 0번지 (0x00000000)
String str2 = ""; // "" : 빈 문자열
// 2. 값 대입
num1 = 100;
num2 = 1.5F;
num3 = 1.5;
ch = '한';
str1 = "Hello";
str2 = "Java";
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
System.out.println(ch);
System.out.println(str1);
System.out.println(str2);
// 3. 변수의 스코프 (scope : 범위)
// 1) 지역변수 : 코드블록(중괄호{}) 내에서만 접근이 가능, 벗어나면 소멸
// 2) 전역변수 : 모든 지역에서 사용
{
int a = 10;
System.out.println("코드 블록 내의 a = " + a);
}
// 37라인에서 이미 a 변수가 소멸되었기 때문에 아래처럼 접근이 불가!
// System.out.println("코드 블록 밖의 a = " + a);
}
}
package com.mywork.ex;
public class Ex06_casting {
public static void main(String[] args) {
/*
* 형 변환 (casting)
*
* 1. 자동 형 변환
* 1) Java 스스로 형 변환
* 2) 타입이 섞인 경우 작은 크기의 타입을 큰 크기의 타입으로 통일시키는 방향으로 형 변환
* 예) short 과 int 의 연산 -> 둘 다 int 로 변환된 뒤에 연산
* 3) 정수와 실수가 섞인 경우 정수를 실수로 변환
*
* 2. 강제 형 변환 (명시적 형 변환)
* 1) 개발자가 직접 형 변환
* 2) 타입 상관없이 원하는 타입으로 변환
* 3) (자료형)변수, (자료형)값
* 예) int num = 10;
* (double)num : 실수로 처리
*/
// 1. 자동 형 변환
System.out.println(1 + 1.5);
// Java 스스로 System.out.println(1.0 + 1.5); 로 변환 후 처리
double a = 10;
// Java 스스로 double a = 10.0; 로 변환 후 처리
System.out.println(a);
// 2. 강제 형 변환
int b = (int)20.9;
System.out.println(b);
int c = 1;
int d = 2;
double e = (double)c / d; // 강제 형 변환(c) + 자동 형 변환(d)
System.out.println(e);
}
}
package com.mywork.ex;
public class Ex07_parsing {
public static void main(String[] args) {
/*
* 문자열 반환은 형 변환(casting)이 아니고, 구문 분석(parsing)이다.
*
* 1. 문자열 -> 정수 (String -> int)
* Integer.pasrseInt("10") -> 10
*
* 2. 문자열 -> 실수 (String -> double)
* Double.pasrseDouble("3.14") -> 3.14
*
* 3. 정수 / 실수 -> 문자열 (int/double -> String)
* String.valueOf(10) -> "10"
* String.valueOf(3.14) -> "3.14"
*/
String strAge = "20";
String strHeight = "180.5";
int age = Integer.parseInt(strAge);
double height = Double.parseDouble(strHeight);
System.out.println("나이 : " + age + "살, 키 : " + height + "cm");
// 문자열의 비교는 "=="로 진행하지 않습니다.
// equals 메소드를 이용해서 비교합니다.
if(String.valueOf(age) == strAge) {
System.out.println("같다!");
}else{
System.out.println("다르다!");
}
}
}
package com.mywork.ex;
public class Ex08_operator01 {
public static void main(String[] args) {
/*
* 1. 산술 연산자
* 정수 실수
* + 덧셈 덧셈
* - 뺄셈 뺄셈
* * 곱셈 곱셈
* / 몫 나누기
* % 나머지 X
*
* 2. 대입 연산자
* = : 대입
* += : 더해서 대입
* -= : 빼서 대입
* *= : 곱해서 대입
* /= : 몫으로 대입, 나눠서 대입
* %= : 나머지를 구해서 대입
*/
// 문제. 카프리카 수를 구하기 위해 2자리 정수를 앞뒤로 분리, 4자리 정수를 앞뒤로 분리하는 방법
// 앞뒤로 분리해서 (앞+뒤)*(앞+뒤) == 자신
// 81 : (8 + 1) * (8 + 1) == 81
int num1 = 81;
int front1;
int end1;
front1 = num1 / 10;
end1 = num1 % 10;
System.out.println(front1 + ", " + end1);
int num2 = 3025;
int front2;
int end2;
front2 = num2 / 100;
end2 = num2 % 100;
System.out.println(front2 + ", " + end2);
}
}
package com.mywork.ex;
public class Ex09_operator02 {
public static void main(String[] args) {
/*
* 3. 증감 연산자
*
* 1) 증가
* (1) a++ : a를 사용하고 증가
* (2) ++a : a를 중가하고 사용
* 2) 감소
* (1) a-- : a를 사용하고 감소
* (2) --a : a를 감소하고 사용
*
* 4. 시프트 연산자
*
* 1) 왼쪽 시프트
* (1) <<
* (2) 왼쪽으로 한 자리씩 밀어낸다.
* (3) 비트 연산
* (4) 2를 곱하는 효과가 있다.
*
* 2) 오른쪽 시프트
* (1) >>
* (2) 오른쪽으로 한 자리씩 밀어낸다.
* (3) 비트 연산
* (4) 2로 나누는 효과가 있다.
*/
int num = 8;
System.out.println("왼쪽 시프트 : " + (num << 1));
System.out.println("오른쪽 시프트 : " + (num >> 1));
}
}
package com.mywork.ex;
public class Ex10_operator03 {
public static void main(String[] args) {
/*
* 5. 관계 연산자
*
* 1) >= : 이상, 크거나 같다
* 2) > : 초과, 크다
* 3) <= : 이하, 작거나 같다
* 4) < : 미만, 작다
* 5) == : 같다 (기본 자료형)
* equals : 같다 (문자열)
* 6) != : 같지 않다
*
* 6. 논리 연산자
*
* 1) && : and 연산
* 2) || : or 연산
* 3) ! : not 연산
* 4) short evaluate 를 지원
* - && : false 가 나오면 그 이후는 처리하지 않음 (어차피 false니까)
* - || : true 가 나오면 그 이후는 처리하지 않음 (어차피 true니까)
*
* 7. 조건 연산자
* 1) (조건식) ? 조건식이 true인 경우 : 조건식이 false인 경우
* 2) if else문의 대용
*
*/
int a = 10;
System.out.println(a == 10 && a < 100); // true
System.out.println(a != 10 || a == 10); // true
System.out.println(!(a == 10)); // false
int b = 10;
boolean result = (a == 100) && (++b > 10);
// result : false
// b: 10 // 짧은 연산을 지원한다. 앞의 조건이 false이므로 뒤의 조건은 실행하지 않는다.
System.out.println("result : " + result + ", b : " + b);
int age = 18;
boolean isAdult = (age >= 20) ? true : false;
int fee = isAdult ? 4000 : 2000;
System.out.println("요금 : " + fee);
String id = "admin";
String auth = id.equals("admin") ? "인증성공" : "인증실패";
// String auth = id.equals(id) ? "인증성공" : "인증실패"; +상관 없이 동작하지만 비추!
System.out.println(auth);
}
}