[Java] 이클립스 자바 코딩 연습(기본 문법,데이터 형,최대,최소,연산자)

 

프로그램 구조

 

 

*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

 

*관계연산자

-,소 비교  : 결과가 boolean( true, false )으로 나온다. (>, <, >=, <=, ==, !=)

 

*논리연산자

 -일반논리 : 여러 개의 관계연산자를 붙여서 비교할 때.

  && ( 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는(은)음수