[Java] 2020.10.22. day 2_EditPlus 사용 / 상수와 변수 / 형변환

2020. 10. 22. 12:03Web_Back-end/Java SE

editplus.co.kr/

 

EditPlus - Text editor with FTP, FTPS and sftp capabilities

EditPlus - Text editor with FTP, FTPS and sftp capabilities Welcome to EditPlus home page! ● Click here to Buy Now ● Download EditPlus 5.3 (2020-01-08) New! --> ● Latest Bug Patch File - 5.3 patch build 3278 (2020-10-20) New! EditPlus is a text edito

editplus.co.kr

◎ Editplus 5.3 다운로드

  • 자식창과 부모창
    • 자식창이 동작했을 때 부모창이 선택되지 않는 것 - 비모달(modal)
    • 자식창이 동작했을 때 부모창이 선택되는 것 - 모달(modal)
  • 컴파일러 지정하기
    • 도구 - 사용자도구구성 - 추가
      • 메뉴제목 : compiler 
      • 명령 : C:\dev\java-14-openjdk-14.0.2-1\bin
      • javac.exe 선택
      • 인수 : 파일이름
      • 디렉토리 : 파일 디렉토리
  • 실행run 지정하기
    • 도구 - 사용자도구구성 - 추가
      • 메뉴제목 : run

Java 의 표준 출력

  • System.out.print(); //을 출력한 후에 줄 변경 X
  • System.out.println(); //값을 출력한 후에 줄 변경
  • JDK 1.5 에서는가변인자형 (Variable Arguments)이 지원되고 V.A가 도입되어 만들어진
    • System.out.printf();
    • System.out.format();

 

의 종류

  • 상수 : 바뀌지 않는 수 
    • 정수상수 2020, 10, 22
    • 실수상수 2020.21, 3.14
    • 문자상수 'A' , '1' , '가', '@' , 'AB'-->error
    • 문자열상수 "ABCD", "1"
    • 불린상수 true, false
  • 변수 : 값이 바뀌는 수
    • 기본형 데이터형 byte, short, int, long, char, float, double, boolean
    • 참조형데이터형 class, String, Array
  • 연산식 : 연산자를 사용한 연산식은 연산의 결과만 출력된다

 

주석(Comment)

  • 소스코드에 부연설명 작성할 때
  • 소스코드의 실행을 막을 때'
  • Compiler (javac.exe) 가 해석하지 않는다 (bytecode 에는 주석이 들어가지 않는다)
  • 종류_3가지 주석 제공
    1.   /**              API주석 (or Java Doc주석)           */
      • 클래스(class), 필드(field), 메소드(method) 위에 정의
      • class에 대한 사용설명서를 만들 때
    2.   /*                여러 줄 주석               */
      • 주석의 내용이 많거나, 코드의 여러 줄을 한꺼번에 주석으로 설정할 때
    3.   // 한줄 주석
      • 주석의 내용이 적거나, 코드의 한 줄을 주석으로 설정할 때
/*

자바에서 제공하는 표준 출력 method의 사용
System.out.print(); 값을 출력한 후에 줄 변경 X
System.out.println(); 값을 출력한 후에 줄 변경

*/
class UsePrint{
	public static void main(String[] args) {
		/*
		System.out.println("Hello World!");
		System.out.println("Hello java");
		*/
		
		//값에 대한 출력 - 상수
		System.out.println("------------상수출력-------------"); 
		System.out.println(2020); //정수상수 출력
		System.out.println(2020.22); //실수상수 출력
		System.out.println('ㅁ'); //문자상수(_한글자) 출력
		System.out.println("오늘은 목요일입니다."); //문자열상수 출력
		System.out.println(true); //불린(boolean)상수 출력
		
		//값에 대한 출력 - 변수	
		int i=10; //1. 기본형 데이터형_값이 출력
		UsePrint up=new UsePrint(); //2. 참조형 데이터형_변수가 가르키는 주소가 출력
		System.out.println("------------변수출력-------------");
		System.out.println(i); //기본형 데이터형 : 값이 출력
		System.out.println(up); //참조형 데이터형 : 주소가 출력

		System.out.println("------------연산식출력-------------");
		System.out.println(10 + 22); //연산식의 결과값만 출력
		System.out.println("10+22 연산결과= " + (10+22)  + " 괄호로 묶지않으면: " + 10 + 22);
		//문자열에 +기호를 사용하면 덧붙임의 의미

		//System.out.println(); ==> 값을 넣지 않으면 줄바꿈출력
		//System.out.print(); ==> 값을 넣지 않으면 error
		System.out.println("---------A---------");
		System.out.println();
		//System.out.print(); ===>이렇게 사용하면 error 
		System.out.println("---------B---------");
        
                byte b = -19;
		short s = 1235;
		int j = 2100000000;

		long l = 2147483648L;
		
        //--------------------------------------------------------------------
        /*정수상수의 저장 literal의 크기를 (일시적으로) 늘릴 때 "형명시"를 사용한다
		@ 형명시 : 상수 뒤에만 붙일 수 있다
		  - 리터럴의 크기를 일시적으로 변경할 때 사용
		  - 정수리터럴 : L, l ==> 4byte의 literal을 8byte로 "크게" 변환
		  - 실수리터럴 : F. f ==> 8byte의 literal을 4byte로 "작게" 변환 
					  D, d ==> 크기변환 없음(8byte->8byte)
		*/
        
		
		//자동 형변환 : int의 하위데이터형 (byte, short)으로 변수를 선언하고,...
		//
		byte c = 1;
		short t = 1; //4byte의 리터럴이 2byte로 변환되어 t변수에 할당됨
		System.out.println(c + "," + t);

		
		//연산의 자동형변환 : int의 하위데이터형이 연산되면 결과가 int로 나온다
		byte b1 = 10;
		byte b2 = 20;

		//byte result=0; -> error
		int result = 0;
		result = b1+b2; 
		
		//b1 (1byte) 과 b2 (1byte) 를 더하면 결과 4byte(int)로 발생
		//result값이 (int의 하위데이터형 연산결과이기 때문에) int, 즉 4byte이다 따라서 오류발생
		System.out.println(result);

		char ch = 'A'; //문자 A에 대한 unicode값이 할당
		char ch2 = 65; //위와 같은 결과 출력됨-직접 unicode값 입력
		System.out.println(ch); //저장된 unicode값에 해당하는 문자를 출력

		//float f = 3.14; //8byte의 리터럴이 4byte로 할당 될 수 없다
		//형명시 F -> 8byte의 리터럴을 4byte의 리터럴로 축소변환
		float f = 3.14F;
		System.out.println(f);
	}
}

 

데이터형 (DataType) 

  • 값을 저장하기 위해 미리 예약한 공간의 이름
  • 변수를 만들 때 사용
    1. 기본형 데이터형(PrimitiveType)
      • 값을 그대로 저장
      • 상수 값을 저장하기 위한 데이터형
    2. 참조형 데이터형
      • 값의 주소가 저장
값의 종류 데이터명 크기(byte) 범위(range) 사용 예
정수상수 byte 1 -128 ~ +127 byte b = 1;
short 2 -32768 ~ +32767 short s = 1;
int 4 -2147483648 ~ +2147483647 int i = 1;
long 8 -2⁶³ ~ +2⁶³-1 long l = 1;
long l = 300000000000L; ==> 형명시
문자상수 char
(unsigned value)
2 ''로 감싼 영문자,숫자,한글 한글자 저장, 값이 할당되면 Unicode값이 할당된다 (음수 저장 x) char c = 'A';
char c = '1';
char c = '가';
실수상수 float 4 유효연산 6자리  float f=3.15; ==> 형명시
double 8 유효연산 15자리 double d=3.15;
불린상수 boolean 1 true 또는 false 저장  

 

  • signed value (_java 의 데이터형) : 음수범위와 양수범위 모두 저장
    • - ~ +
  • unsigned value : 양수의 범위만 저장 
    • 0 ~ +
  • literal : 상수가 저장되는 메모리 공간
    • 이미 정해져있음
    • 정수상수: 4byte , 문자상수: 2byte, 실수상수: 8byte,  
    • 정수상수의 저장 literal의 크기를 (일시적으로) 늘릴 때 "형명시"를 사용한다
    • 형명시 : 상수 뒤에만 붙일 수 있다 
      • 리터럴의 크기를 일시적으로 변경할 때 사용 
      • 정수리터럴 : L, l ==> 4byte의 literal을 8byte로 "크게" 변환 
      • long l = 2147483648L; //정수상수의 범위 4byte를 넘겨서, 형명시를 사용해 리터럴을 늘려줌
      • 실수리터럴 : F. f ==> 8byte의 literal을 4byte로 "작게" 변환 
      •                   D, d ==> 크기변환 없음(8byte->8byte)
  • 자동 형변환 (Promotion)
    • 리터럴의 크기보다 작은 데이터형을 사용하면 리터럴의 크기가 자동으로 줄어들어 할당됨
    • 변수에 값 할당하거나, 연산될 때 발생
    • JVM동작 - 개발자가 막을 수 없다//자동
    • byte가 short에 값을 할당할 때
  • 강제 형변환 (Casting)
    • 개발자가 원하는 데이터형으로 변환하는 것
    • 기본형끼리만 가능하거나 참조형끼리만 가능
    • 기본형에서 참조형으로 또는 그 반대로는 형변환 불가능
    • boolean 형은 다른 형으로 변환되지 않는다
      • 문법)      
      • (변경할 데이터형)상수
      • (변경할 데이터형)변수명
    • 값 손실이 발생할 수 있다
      • 예)
      • float f = 3.123f;
      • int i  = 0;
      • i = f; 
      • 따라서,  i = (int)f;
  • char
    • char c = 'A';
    • A문자의 Unicode 값이 할당됨 (A가 바로 들어가는 것이 아님)
    • --> c에는 'A' 에 해당하는 값인 
    • 사람이 사용하는 문자를 코드표(Charset)로 정의하여 컴퓨터에 저장
    • Charset : ASCII Code = 1byte charset, Unicode = 2byte charset
    • Unicode는 최대 0~65535자의 문자를 표현
코드값 대응문자 코드값 대응문자 코드값 대응문자 ......
1 ? 2 ? 3 ?  
48 0 49 1 50 2 ...
65 A 66 B 67 C  
97 a 98 b 99 c ...
             
          255 ?

 

  • float f=0.1234567;
  • float f1=0.1234567;
  • f+f1

< 기본형 데이터형을 이용한 변수의 선언과 사용 , 자동형변환 , 형명시 >

/*
기본형 데이터형을 이용한 변수의 선언과 사용
자동 형변환, 형명시
*/

class DataType {
	public static void main(String[] args) {
		//정수를 저장할 수 있는 데이터형 - byte short int long
		System.out.println("----정수형----");
		byte a = 10; //자동형변환
		short b = 20;
		int c = 30;
		long d = 40;
		long e = 2149483648L; //형명시 필요(_리터럴의 크기보다 큰 값이 사용)
		System.out.println("byte: " + a + "\nshort: " + b + "\nint: "+ c + "\nlong: " + d + ", " + e);
		
		System.out.println("\n----문자형----");
		char f = 'A'; //Unicode 값 65 할당
		char g = 'a'; //Unicode 값 97 할당
		char h = '0'; //Unicode 값 48 할당
		System.out.println("char: " + f + ", " + g + ", " + h); //코드값에 해당하는 문자를 출력

		System.out.println("\n----실수형----");
		float i = 2020.22F; //형명시 필수(_8byte의 리터럴을 4byte 로 축소시켜야함)
		double j = 2020.22; //형명시 생략 가능
		System.out.println("float: " + i + "\ndouble: " + j);

		System.out.println("\n----불린형----");
		boolean k = true;
		boolean l = false;
		System.out.println("boolean: " + k + ", " + l);

		System.out.println("\n----자동형변환----");
		//int의 하위데이터형이 연산되면 결과가 int로 나온다
		byte num1 = 3;
		short num2 = 4;
		//short result = num1 + num2; //이것은 오류
		int result = num1 + num2; 
		System.out.println(num1 + "+" + num2 + "=" + result);
		//이렇게 int로 바꿔줘야함
		//이유: byte가 short로 변환된 후 short끼리 연산되어 결과가 int로 발생하여 
		//		short데이터형에 할당될 수 없다 == error

	}//main
}//class

< 강제형변환에 대한 예 >

/*
강제형변환에 대한 예
*/

class Casting{

	public static void main(String[] args) {

		//형명시 : 리터럴의 크기 자체를 축소하여 값 넣고 변수에 할당
		float f = 3.1415f; 
		int i = 0;

		//i=f; byte 크기는 같지만 값의 종류가 다르므로 할당되지 않는다
		i=(int)f; //.1415 값 손실이 일어난다 _ 강제형변환 부분에서만 손실됨(본 데이터는 f에 남아있음)
		System.out.println("float: " + f + "\nint형으로 f 강제형변환: " + i);

		//강제형변환 : 리터럴의 크기 자체는 유지되고, 변수에 할당할 때 값을 float로 변경하여 할당
		float f1 = (float)3.14; 
		System.out.println("float: " + f1);

		byte num1 = 4;
		byte num2 = 26;
		byte result =0;

		result = (byte)(num1 + num2); //자동 형변환 
		System.out.println(num1 + " + " + num2 + "=" + result);

		char c = 'A'; //Unicode값 저장
		System.out.println(c + "의 Unicode 값: " + (int)c);

		/*
		@ casting 이 되지 않는경우
			기본형 데이터형을 참조형데이터형으로 변환
			int temp = 4;
			String s = (String)temp;
			참조형데이터형(주소저장)을 기본형 데이터형(값저장)으로 변환
			String s = "4";
			int temp = (int)s;
		*/
		

	}
}

 

◎ 변수 (Variable)

  • 상수에 대한 별명부여
  • 코드에 대한 가독성 향상
  • 기본형데이터형, 참조형데이터형을 사용하여 변수를 선언할 수 있다
    • 3가지 변수를 제공한다
    • instance variable(=member variable)
    • static variable(=class variable)
    • local variable(지역변수)
      • 메소드 안에서 선언되고 사용되는 변수
      • 메소드 밖에서 사용할 수 없음
      • 자동초기화가 되지 않는다 (개발자가 코드를 작성하여 초기화 해야한다)
      • 초기화되지 않은 변수를 사용하면 error가 발생한다
  • 지역변수
  •  문법
    1. 선언)  데이터형 변수명;  //같은 이름의 변수 명은 선언할 수 없다
    2. 값 할당) 변수명 = 값;  //여러번 가능
    3. 값 사용) - 출력, 연산, 재할당 //여러번 가능
  • 선언 // int i;
  • 값 할당 // i = 20;
  • 값 사용 // System.out.println( i );
  • 지역 변수의 초기화 : 변수를 선언하면서 값을 할당하는 문법
    • 에러를 방지하기 위해 
    • 데이터형 변수명=초기화값;
    • 초기화값은 연산이 되더라도 연산에 영향을 끼치지 않을 값으로 설정
  • method가 호출되면 memory에 생성되고, method의 호출이 끝나면 memory에서 사라진다

 

class Test{

//이곳에 만든변수 : instance variable , static variable

	public static void main(String[] args){
    
    //이곳에 만든변수 : local variable
   
   }
}

/*
method안에서 정의하고, method안에서만 사용되는 지역변수의 사용법
- 자동초기화 되지 않는 변수 (개발자가 반드시 수동으로 초기화해야함)
- method가 호출되면 memory에 생성되고, 호출이 끝나면 사라진다
	(자바에서 제공하는 변수 중에 생명이 가장 짧다)
*/

class LocalVariable{
	public static void main(String[] args) {
		//1.변수의 선언
		int i;
		//2.값 할당(변수에 값을 넣는 것)_이전 할당값은 사라짐, 여러번 가능
		i = 5;
		//3.값 사용
		System.out.println(i);

		//2.값 할당(재설정)
		i = 200;
		System.out.println(i);

		int j = 0; //이전에 선언된 변수명과 다른 이름으로 몇개든 선언할 수 있다
		System.out.println(j);

		//같은 이름의 변수가 선언되면 error
		//int i = 100;


	}
}

 

2020.10.23_ p. 86~133

constant(변수를 상수처럼 사용하기), 진수, 연산자