*Java 코딩 순서
1. 소스코드작성
2. 컴파일(javac.exe)
3. 실행 (java.exe)
1.Source Code 작성
- 메모장, 범용에디터, IDE
구성)
class 클래스명{
코딩
}
2.저장
파일명.java
3.컴파일 ( Compiler 사용 )
사람의 언어를 Computer의 언어로 변환
사용법) : PATH확인
javac –옵션 소스파일명.java
javac Hello.java
성공 => bytecode 생성
4.실행( java.exe )
=> bytecode를 사용하여 컴퓨터에게
일을 시킨다.
사용법)
java –옵션 패키지명.bytecode명
java Hello
*자바 표준 출력 ( console 출력)
- System.out
- debug용으로 사용.
사용법)
System.out.print( 값 ); // 출력 후 줄 변경을 하지 않습니다.
System.out.println( 값 ); //출력 후 줄 변경.
*문자열에 +기호는 붙여라!
System.out.println(“1+13=”+1+13 );// 1+13=113
package day0113;
class ConsolePrint{
public static void main(String[] args){
/*
tem.out.println("안녕자바");
System.out.println("오늘은 월요일 입니다.");
System.out.print("안녕자바");
System.out.print("오늘은 월요일 입니다.");
*/
//상수 출력
System.out.println(2025); //정수상수
System.out.println(1.13); //실수상수
System.out.println('A'); //문자상수 'A', '0', '가'
System.out.println(false); //불린상수
System.out.println("안녕하세요?"); //문자열상수 String
System.out.println(); //공백생성
// System.out.print(); //API에서 제공하지 않는 method는 사용불가
//변수 출력
int i=13;
System.out.println( i ); //기본 데이터형은 변수의 값이 출력
ConsolePrint cp=new ConsolePrint();
System.out.println( cp ); //참조 데이터형은 주소가 출력
//연산식 : 연산된 결과만 출력된다.
System.out.println( 1+13);
System.out.println("붙"+"여라"); //문자열의 +는 붙임
System.out.println("1+13=" + 1+13);
System.out.println("1+13=" +(1+13));
System.out.println("정수상수 : " + 2025);
System.out.println("변수 : " + i );
System.out.println("참조 데이터형 : " + cp);
System.out.println();
}//main
}//class
콘솔 출력
2025
1.13
A
false
안녕하세요?
13
day0113.ConsolePrint@1f32e575
14
붙여라
1+13=113
1+13=14
정수상수 : 2025
변수 : 13
참조 데이터형 : day0113.ConsolePrint@1f32e575
데이터형종류 데이터 형 크기(byte) 범위(range) 사용예
정수 |
byte | 1 | -128 ~ +127 | byte b=14; byte b=128;//error |
short | 2 | -32768 ~ +32767 | short s=14; short s=32768; //error |
|
int | 4 | -2147483648~ +2147483647 | int i=14; int i=2147483648;//error |
|
long | 8 | -9223372036854775808~ +9223372036854775807 |
long l=14; long l= 2147483648L;//리터럴의 크기를 변경 |
|
문자 | char | 2 | ‘로 감싸진 영문자 한자, 한글 한자, 숫자 한자의 Unicode 값을 저장 |
char c=‘A’; char c=‘0’; char c=‘가’; 저장되는 값은 unicode값이 저장된다. \u0000~\uFFFF범위( unsignd value 저장) char c=‘A’; char c=65; unicode가 할당되고, unicode에 해당하는 문자가 출력된다. 16진수로 할당가능 char c=‘\0000’ ~ ‘\uFFFF’ |
실수 | float | 4 | 6~7자리 유효 숫자 | 정확도가 낮음 float f=1.14F; |
double | 8 | 15~16자리 유효숫자 | 정확도가 높다. 세밀한 계산을 해야 할 때. | |
불린 | boolean | 1 | true / false 저장 | boolean b=true; boolean b=false; |
*literal
- 코딩창에서 상수를 사용하면, 상수가 저장되는 메모리 공간을 의미.
int i=10;
-literal은 이름이 없고 , 상수는 literal에 저장되고 그 값이 변수로 할당된다.
-정수 literal의 4byte이고, 실수 literal은 8byte가 이다.
package day0114;
/**
자바에서 제공하는 primitive type의 사용
*/
class DataType{
public static void main(String[] args) {
System.out.println("정수 상수를 값을 저장할 수 있는 데이터형");
byte byteValue; //signed value : -128 ~ +127
byteValue=127;
System.out.println("byte : " + byteValue);
short shortValue=32757;
System.out.println("short : " + shortValue);
int intValue=214748364;
System.out.println("int : " + intValue);
long longValue=14;
System.out.println("long : " + longValue);
//내가 모으고싶은 자산을 변수를 선언하고 할당한 후 출령
long Asset=9223372036854775807L;//literal의 크기를 변경해야 저장가능
System.out.println("내가 모으고 싶은 최종 자산은 " + Asset + "입니다");
byte num1=10;//demotion 동작
byte num2=20;//demotion 동작
byte result=0;
/*연산결과 30은 byte범위에 포함되지만 연산결과가 int형으로 저장되기 때문에
byte데이터형에 할당하면 error가 할당된다*/
System.out.println(num1 + " + " + num2+ " = " + result);
System.out.println("문자 상수 값을 저장할 수 있는 데이터형");
//char upperCase='A'; // '로 감싸진 영문자 한자 : 할당되는 값은 unicode가 저장
char upperCase=65;//unicode 코드값을 직접 할당할 수 있다
char lowerCase='a';
char number='0';// '로 감싸진 숫자 한자
//char hangul='가';
char hangul=44032;
char temp='\uFFFF';//0~65535 unsigned value
System.out.println("char" + upperCase+ ", "+ lowerCase + ", "+ number
+", " +hangul+", [" + temp +"]");
System.out.println("실수 상수 값을 저장할 수 있는 데이터형");
float floatValue;
//floatValue=1.14;//literall의 크기는 8byte고 float 데이터 형은 4byte
//형명시 필수!
floatValue=1.14F;
System.out.println("float : " + floatValue);
double doubleValue;
doubleValue=1.14D;
System.out.println("double : " + doubleValue);
System.out.println(Math.random()); //15~16
System.out.println("불린 상수 값을 저장할 수 있는 데이터형");
boolean flag=true;
boolean flag2=false;
System.out.println("boolean : " + flag +", "+ flag2);
//byte b=10;
//byte b2=20;
//byte c=b+b2;
}//main
}//class
콘솔 출력
정수 상수를 값을 저장할 수 있는 데이터형
byte : 127
short : 32757
int : 214748364
long : 14
내가 모으고 싶은 최종 자산은 9223372036854775807입니다
10 + 20 = 0
문자 상수 값을 저장할 수 있는 데이터형
charA, a, 0, 가, []
실수 상수 값을 저장할 수 있는 데이터형
float : 1.14
double : 1.14
0.13663211534452746
불린 상수 값을 저장할 수 있는 데이터형
boolean : true, false
*Promotion ( 자동 형 변환 )
- JVM이 상황에 따라 데이터 형의 크기를 자동으로 변경해주는 것.
- 변수에 값을 할당하거나, 연산할 때 자동형 변환이 발생한다.
- promotion, demotion이 지원
변수 할당)
byte b=10; //4byte의 literal이 1byte로 줄어들어서 할당 (demotion)
short s=10; //4byte의 literal이 2byte로 줄어들어서 할당 (demotion)
연산)
int의 하위 데이터형이 연산되면 결과는 int로 발생한다. ( promotion )
*LocalVariable
package day0114;
/**각주석
지역변수를 사용하기위한 클래스
*/
class LocalVariable{
int dayOfMonth; //instance(member) variable : class field 영역
/**
Java Application을 생성하기 위한 method (main method)
*/
public static void main(String[] args) { //local
//1.선언) 데이터형 변수명; //초기화값이 들어가지않는다.
int nowYear;
//현재월을 저장할 수 있는 변수를 선언하고
int nowMonth;
//하나의 영역에서는 같은 이름의 변수 선언(데이터형 변수명)을 하나만 할 수 있다.
//int nowYear; // error
/*영역이 다르면 같은 이름의 변수를 선언할 수 있다.
(class field와 local은 영역이 다르므로 dayOfMonth변수 선언 가능 */
int dayOfMonth;
//2.값할당) 변수명=값;
nowYear=2025;
//현재월을 할당하고
nowMonth=1;
dayOfMonth=14;
//3.값사용) 출력,연산,재할당
/*지역변수는 자동초기화 되지 않고, 개발자가 초기화를 수동으로 해줘야함
초기화 값을 설정하지 않은 변수를 사용하면 에러 발생*/
//출력
System.out.println(nowYear+"년");
System.out.println(nowMonth+"월");
System.out.println(dayOfMonth+"일");
System.out.println(nowYear+"년"+nowMonth+"월"+dayOfMonth+"일");
//내일을 출력하고 싶다. 14 -> 15일 출력 : 변수는 변하는 수 (바뀜)
//변수는 값할당을 여러번 할 수 있다
dayOfMonth=15;
System.out.println(dayOfMonth+"일");
//같은 이름의 변수지만 다른 값이 출력
//변수명은 한글로도 가능 (근데 안함)
int 내나이=25;
System.out.println("나의 나이는 "+내나이+"살");
}//main
}//class
콘솔 출력
2025년
1월
14일
2025년1월14일
15일
나의 나이는 25살
*casting( 강제 형 변환)
- 개발자가 필요한 데이터 형으로 일시적인 변환을 하는 것.
- 값 손실이 발생할 수 있다.
- 기본형 에서 참조형으로, 참조형에 기본형으로는 강제형변환이 되지 않는다.
- boolean형에 강제 형 변환이 되지 않는다. (동일 형으로만 변환가능)
문법)
(변환할 데이터형)값;
상수앞에 casting)
float f=(float)1.14;
package day0114;
/**
강제 형 변환
-개발자가 필요한 데이터형으로 일시적인 변화를 하는 것
-값 손실이 발생할 수 있다
*/
class Casting {
public static void main(String[] args) {
//실수 상수 앞에 casting
float floatValue;
floatValue=(float)1.14;//리터럴은 8byte이고 casting하여 값을 4byte로 변경
System.out.println( floatValue );
//변수 앞에 casting
double doubleValue=1.14;
//int i=doubleValue; //데이터 형과 크기가 다르므로 할당되지않는다
int i=(int)doubleValue; //값 중에 정수부만 잘라서 할당(값 손실) > 1할당
System.out.println(i);
char c='A';
//i=c;
//System.out.println(i);
System.out.println( c+"문자의 unicode 값 : " + (int)c);
c='\u0000';
System.out.println("["+(int)c+"]");
byte num=10;
byte num2=20;
byte result=(byte)(num+num2);
System.out.println( num + " + " + num2+ " = " + result);
//casting이 되지 않는 상황
//boolean 형은 다른 데이터형으로 casting 안됨
//boolean flag=true;
//i=(int)flag; //에러 발생
//boolean flag2=flag;
//기본형 데이터형이 참조형 데이터형으로 변환되지 않는다. (그 반대도 안됨)
//String str="10"; //문자열의 10
//i=10;//정수의 10
//i=str; //문자열(참조형)은 기본형에 할당되지 않는다
//i=(int)str; //casting되지 않는다
//str=i//기본형(int)는 문자열(참조형)으로 할당 할 수 없다
//str=(String)i; //casting되지 않음
}//main
}//class
콘솔 출력
1.14
1
A문자의 unicode 값 : 65
[0]
10 + 20 = 30
*Constant
- 변수를 상수처럼 사용할 때 도입.(가독성을 향상시키면서, 값을 변경하지 못하도록 만들기 )
- class field에만 정의할 수 있다.
- Constant는 정의한 클래스 또는 외부 클래스에서도 사용할 수 있다.
- 프로그램에서 기준 값을 저장하고 사용할 때 사용.
문법)
public static final 데이터형 Constant명=값;
-API에서는 field로
Constant를 검색한다.
package day0114;
class Constant{
public static final int MAX_SCORE=100;
public static void main(String[] args) {
//System.out.println(100-85);//상수만 사용하면 가독성이 개같음
//int maxScore=100; //최고 점수 > 가독성은 유지하고 싶고, 값은 변경되면 안됨 => Constant
int myScore=85; //획득 점수
//값 변경이 되지 않는다
//MAX_SCORE=99;
//System.out.println( MAX_SCORE - myScore );
System.out.println("최고 점수 : "+ MAX_SCORE+ ", 획득한 점수 : "+ myScore+
", 최고점수에서 획득한 점수 차 : " + (Constant.MAX_SCORE - myScore));
}//main
}//class
package day0114;
/**
다른 클래스가 가지고 있는 Constant를 사용하는 클래스
클래스명.Constant명의 문법으로 사용한다
*/
class UseConstant{
public static void main(String[] args) {
System.out.println(Constant.MAX_SCORE);
}//main
}//class
콘솔 출력
100
*Wrapper class
- 기본형 데이터형 과 이름이 같거나 유사한 클래스 들.
- 기본형 데이터형을 감싸서 객체로 생성한 후 객체가 제공하는 다양한 기능을
사용하기 위해서 만들어진 클래스들.
byte : 기본형 데이터 형
- 변수를 선언하고, 값을 저장하고, 사용하는 일.
byte b=15;
System.out.println( b );
Byte : 참조형 데이터 형 ( 클래스 )- Wrapper class.
객체를 생성하고, 객체가 가진 다양한 기능(method)
을 사용할 때
-Java SE 8 => 주로 생성자를 사용.
byte b=15;
Byte bObj=new Byte( b );
기능(method를 호출하여 다양한 기능을 사용)
double d=bObj.doubleValue();
int i= bObj.intValue();
String s=bObj.toString();
-Java SE 9 이후 사용법이 다르다. ( valueOf method사용)
byte b=15;
Byte bObj=Byte.valueOf( b );
기능 사용
double d=bObj.doubleValue();
int i= bObj.intValue();
String s=bObj.toString();
package day0114;
/**
기본형 데이터형을 객체로 감싸서 다양한 기능을 사용할 수 있도록 제공하는 클래스들
*/
class UseWrapperClass{
public static void main(String[] args) {
/*Wrapper class에서 제공하는 Constant를 사용하여
기본형 데이터형의 최소값 ~ 최대값을 Console에 출력*/
System.out.println("byte의 최소값 : "+ Byte.MIN_VALUE+
", 최대값 : "+ Byte.MAX_VALUE); // API 찾는 연습
}//main
}//class
콘솔 출력
byte의 최소값 : -128, 최대값 : 127
*Operator ( 연산자 )
- 연산에 사용되는 예약된 부호들.
- 연산자에는 우선순위가 존재.
- 문자열은 연산이 되지 않는다.( “10” - 문자열의 10, 10 – 정수의 10 )
*연산자의 우선 순위.
최 단산쉬 관리 삼대 콤마
package day0115;
public class Operator {
public static void main(String[] args) {
//초기값을 설정하여 변수 선언
int i=15;
int j=-14;
System.out.println(" ~ "+i+" = " + ~i); //부호변경 1증가
System.out.println(" ~ "+j+" = " + ~j); //부호변경 1감소
i=3;
j=4;
System.out.println("!("+ i+" > "+ j+ ") = " + !(i > j) );
boolean flag=true;
//blooean 변수 앞에 사용
System.out.println("!" + flag + " = " + !flag);
//형식적인 제공
i=15;
j=15;
System.out.println("+" + i + " = " + +i );
System.out.println("+" + j + " = " + +j );
//-2의 보수연산 (부호 변경연산)
System.out.println("+" + i + " = " + -i );
System.out.println("+" + j + " = " + -j );
//++ : 대상체의 값을 1씩 증가, -- : 대상체의 값을 1씩 감소
//전위 연산: 연산자 대상체
//후위 연산: 대상체 연산자
++i; //15 ->16
i++; //16 ->17
System.out.println(i);
--i;
i--;
System.out.println(i);
//전위연산 : 내것 먼저 ( 증가, 감소 연산 후 대입을 수행 )
i=15;
int result=0;
result = ++i;
System.out.println("전위 연산 후 result :" + result+", i : "+ i); //같은 값
//후위 연산 : 남의 것 먼저 ( 대입 연산 후 증가, 감소연산 수행)
i=15;
result=0;
result = i++;
System.out.println("후위 연산 후 result :" + result+", i : "+ i); //다른 값
//method 매개변수로 전달할 때
i=15;
test("전위 ", ++i);
i=15;
test("후위 ", i++);
i=10;
j=15;
System.out.println("i는 "+ ++i + ", j는 " + j++); // i는 11, j는 15
}//main
public static void test(String msg,int param ) {
System.out.println(msg + "test method 안에 전달된 parameter 값 : " + param );
int year=2025;
System.out.println(year+"는 0,1,2,3 4가지 중 " + year%4 + "에 해당됩니다.");
int num=10;
System.out.println(num+"는(은) 0,1 2가지 중 " + num%2 + "에 해당됩니다.");
int birth=2000;
System.out.println(birth+"는 0,1,2,3,4,5,6,7,8,9,10,11 중 " +
birth%12 + "에 해당됩니다.");
//0원숭이1닭2개3돼지4쥐5소6호랑이7토끼8용9뱀10말11양
int i=25; // 0001 1001
System.out.println(i+ " << 2 =" + (i << 2)); //0110 0100 = 64+32+4 = 100
i=27; // 0001 1011
System.out.println(i+ " >> 3 =" + (i >> 3)); //000 0011 = 3
i=31; // 0001 1111
System.out.println(i+ " >>> 4 =" + (i >>> 4)); //0000 0001 = 1
// i=Integer.MAX_VALUE;
i = -1; // 1111 1111 1111 1111 1111 1111 1111 1111
System.out.println(i+ " >> 100 =" + (i >> 100)); // -1
System.out.println(i+ " >>> 1 =" + (i >>> 1)); //0111 1111 1~
}
}
콘솔 출력
~ 15 = -16
~ -14 = 13
!(3 > 4) = true
!true = false
+15 = 15
+15 = 15
+15 = -15
+15 = -15
17
15
전위 연산 후 result :16, i : 16
후위 연산 후 result :15, i : 16
전위 test method 안에 전달된 parameter 값 : 16
2025는 0,1,2,3 4가지 중 1에 해당됩니다.
10는(은) 0,1 2가지 중 0에 해당됩니다.
2000는 0,1,2,3,4,5,6,7,8,9,10,11 중 8에 해당됩니다.
25 << 2 =100
27 >> 3 =3
31 >>> 4 =1
-1 >> 100 =-1
-1 >>> 1 =2147483647
후위 test method 안에 전달된 parameter 값 : 15
2025는 0,1,2,3 4가지 중 1에 해당됩니다.
10는(은) 0,1 2가지 중 0에 해당됩니다.
2000는 0,1,2,3,4,5,6,7,8,9,10,11 중 8에 해당됩니다.
25 << 2 =100
27 >> 3 =3
31 >>> 4 =1
-1 >> 100 =-1
-1 >>> 1 =2147483647
i는 11, j는 15
*관계연산자
*논리연산자
-일반논리 : 여러 개의 관계연산자를 붙여서 비교할 때.
&& ( AND ) : 전항과 후항이 모두 true일 때에만 true 반환.
|| ( OR ) : 전항과 후항이 모두 false 일때에만 false 반환.
사용법)
관계연산자 일반논리 관계연산자
-비트논리연산자 : 비트의 연산 ( 비트를 합치거나, 비트를 분리할 때 사용 )
& ( AND ) : 상위비트와 하위비트 모두 1일 때만 1내림.
| (OR) : 상위비트와 하위비트 모두 0일 때만 0내림.
^ ( XOR ): 상위비트와 하위비트 둘 중 하나만 1일 때 1내림.
package day0116;
/**
* 관계연산자의 사용법<br>
* >, >=, <, <=, ==, =!
*/
public class Operator2 {
public static void main(String[] args) {
int i=1, j=16, k=1;
System.out.println(i+ " == "+ j + " = " + (i == j));
System.out.println(i+ " == "+ k + " = " + (i == k));//같음 true
System.out.println(i+ " != "+ j + " = " + (i != j));//다름 true
System.out.println(i+ " != "+ k + " = " + (i != k));
boolean flag=true, flag2=false, flag3=true, flag4=false;
System.out.println(flag+" && " + flag3 + " = " + ( flag && flag3));//true
System.out.println(flag+" && " + flag2 + " = " + ( flag && flag2));//false
System.out.println(flag2+" && " + flag + " = " + ( flag2 && flag));//false
System.out.println(flag2+" && " + flag4 + " = " + ( flag2 && flag4));//false
System.out.println(flag+" || " + flag3 + " = " + ( flag || flag3));//true
System.out.println(flag+" || " + flag2 + " = " + ( flag || flag2));//true
System.out.println(flag2+" || " + flag + " = " + ( flag2 || flag));//true
System.out.println(flag2+" || " + flag4 + " = " + ( flag2 || flag4));//false
flag=false;
flag2=false;
flag3=false;
//후항을 연상하지 않는 예제 코드
flag3=(flag=3>4) && (flag2=5<6);
System.out.println(flag + " && " + flag2+ " = " + flag3);
System.out.println("--------------------비트논리연산자--------------------");
i=25;
j=15;
System.out.println(i + " & " + j + " = " + (i & j)); //?
i=33;
j=17;
System.out.println(i + " | " + j + " = " + (i | j)); //?
i=7;
j=17;
System.out.println(i + " ^ " + j + " = " + (i ^ j)); //?
int number=-1;
System.out.println(number+"는(은)"+ (number >= 0?"양수":"음수") );
number=-1;
System.out.println(number+"는(은)"+ (number >= 0?"양수":"음수") );
}//main
}//class
콘솔 출력
1 == 16 = false
1 == 1 = true
1 != 16 = true
1 != 1 = false
true && true = true
true && false = false
false && true = false
false && false = false
true || true = true
true || false = true
false || true = true
false || false = false
false && false = false
--------------------비트논리연산자--------------------
25 & 15 = 9
33 | 17 = 49
7 ^ 17 = 22
-1는(은)음수
-1는(은)음수
'Java' 카테고리의 다른 글
[Java] Array,Variable Array (0) | 2025.03.16 |
---|---|
[Java] Method Overroad, this (0) | 2025.03.14 |
[Java] Method - Instance ,Static,Variable 및 4가지 형태 (0) | 2025.03.13 |
[Java] 제어문( if, switch~case, for, while, do, continue, return,break),Variable (0) | 2025.03.12 |
근성 개발자 성장 스토리 (0) | 2025.01.29 |