비트교육센터/자바

[비트교육센터] 자바 11일차, 이클립스설치, 연산자

달의요정루나 2023. 6. 15. 19:09

1. 설치하기

1) JDK 설치

[1]

- 아마존사이트에 들어간다.

https://aws.amazon.com/ko/corretto/?filtered-posts.sort-by=item.additionalFields.createdDate&filtered-posts.sort-order=desc 

 

Amazon Corretto 프로덕션용 OpenJDK 배포

Amazon Corretto를 사용하여 클라우드, 온프레미스 및 로컬 머신에서 동일한 환경을 실행할 수 있습니다. Corretto 17은 Linux(x64 및 aarch64), Windows(x64), macOS(x64 및 M1), Alpine Linux(x64) 및 Amazon Linux 2(x64 및 aarch

aws.amazon.com

[2]

- Amazon Corretto 17 다운로드를 클릭한다.

[3]

- 자신의 운영체제에 맞는 .msi파일을 다운로드한다. 그리고 해당 파일을 열어 다운로드를 진행해 준다.

[4]

- 터미널을 열고 java -version을 입력해 jdk 버전을 확인한다.

- javac -version을 입력해 자바 컴파일러 버전을 확인한다.

[5]

- 파이썬을 작업했었던 폴더에서 java 폴더를 생성해준다.(다른 경로의 다른 폴더여도 상관없다.)

[6]

- 이곳에서 새로운 텍스트 파일을 생성하고 명칭을 Hello.java라고 바꾸어준다.

[7]

public class Hello{
	public static void main(String[] args){
		System.out.println("Hello, world!");
	}
}

- Hello.java를 Notepad++로 열고 해당코드를 입력해준다.

[8]

- 자신의 java폴더 경로로 이동해준다.

- 그리고 javac Hello.java를 입력해 컴파일 해준다.

- 컴파일에 성공하면 Hello.class가 생성된다.

[9]

- java Hello를 입력해 해당 코드문을 실행한다.

 

2) IDE

- IDE: Integrated Development Environment, 통합 개발 환경

ex) Ecplise, Intellij, Visual Source Code

[1]

- 구글에서 eclipse를 검색해 해당 사이트로 들어간다.

[2]

- Download Packages로 들어간다.

[3]

- Eclipse IDE for Enterprise Java and Web Develops에서 자신의 운영체제에 맞는 곳으로 들어간다.

[4]

- 해당 zip 파일을 다운로드 한다.

[5]

- 다운로드를 완료하면 자신이 작업할 환경으로 옮겨온다.

[6]

- 7-Zip으로 '여기에 압축풀기'를 실행한다.

[7]

- 압축풀기가 완료된면 eclipse폴더에 들어가 eclipse.exe에 오른쪽마우스를 클릭하고 '시작 화면에 고정'을 누른다.

- 시작화면에 떴다는 것을 알 수 있다.

3) eclipse 환경세팅하기

[1]

- 먼저 이클립스를 들어간다. 아직 Launch를 누르지 말고 Browse로 들어간다.

- Browse로 들어가서 자신의 작업환경 폴더를 설정한다.

- 자신의 작업폴더를 선택하고 경로 뒤에 \eclipse-workspace를 입력해주고 Launch를 한다.

 

[2]

- 상단에 Window->Preferences를 들어간다.

[3]

- Java->Installed JREs에 들어가서 해당 JRE하나를 클릭하고 Edit을 클릭한다.

- Directory로 들어간다.

- c드라이브의 Amazon Corretto로 들어가 jdk폴더를 클릭을 하고 폴더 선택을 누른다.

- 완료되면 우측 아래에 있는 Apply를 누른다.

---

- General -> Workspace로 들어가 Text file encoding에서 UTF-8로 설정되어 있는지 확인한다.

- 만약 UTF-8로 안되어 있으면 설정을 해주고 Apply를 눌러준다.

---

- Web->HTML Files로 들어가 Encoding 형식을 확인한다.

- 만약 UTF-8로 안되어 있으면 사진처럼 설정해주고 우측 하단의 Apply를 눌러준다.

---

- Web -> JSP Files로 들어가서 똑같은 설정을 해준다.

- UTF-8로 설정해주고 Apply를 눌러준다.

---

- General->Appearance를 들어가서 Theme에서 테마 색을 정할 수 있다. 만약 테마를 바꾸게 되면 이클립스를 재가동 해야 하므로 Apply and Close를 눌러준다.

---

- General -> Colors and Fonts에서 Basic을 들어간다.

- Basic에서 Text Font를 찾는다.

- 글꼴을 바꾸기를 원하면 이곳에서 수정해주면 된다.

- 필자는 D2Coding글꼴에 크기를 14로 정했다.

- 바꾸후 apply를 눌러준다.

---

- 위에 검색창에 tree를 검색해 Tree and Table font for views로 들어가 Package Exploer에 들어가는 글꼴을 수정할 수 있다.

- 완료가 돠면 apply를 눌러준다.

---

- Java->Compiler로 들어가 컴파일러 버전 정보를 본다. 필자는 jdk 17버전을 깔아서 상관없지만 만약 본인이 다른 버전을 깔았다면 해당 버전을 바꾸어 주어야 한다.

 

--> 만약 원하는 것을 다 설정했으면 Apply and Close를 누른다.

 

2. 코딩하기

1) eclipse 프로젝트 생성하기

[1]

- 상단메뉴에서 File->Other... 로 들어간다.

[2]

- Java Project를 누르고 Next를 누른다.

[3]

- 프로젝트 이름을 지어주고(맨앞글자는 소문자로 해준다.) 만약 Create module-info.java file이 체크되어 있으면 삭제한다.

- 그 다음 Next >를 누른다.

 

[4]

- Open Perspective를 눌러주고 Finish를 눌러 프로젝트를 생성한다.

 

[5]

- 생성된 프로젝트이다.

[6]

- src폴더에 오른쪽마우스를 클릭하고 New->Package로 들어간다.

- Package를 생성하는 이유는 Class파일의 이름중복을 막기 위해서이다.

 

[7]

- 패키지 이름을 지어준다. 쓰니는 com.julian5383.test로 썼다.

- com.julian5383.test로 한 이유는 패키지 이름의 중복을 막기 위해서이다.

- 대문자를 사용하지않고 소스파일들을 각각의 그룹으로 구별하기 위해 (.)으로 구분한다.

[8]

- 새로운 클래스를 만든다.

- Hello.java를 만들었다.

[9]

public class Hello{
	public static void main(String[] args){
		System.out.println("Hello, world!");
	}
}

- Hello.java를 만들고 아까 NotePad++상에서 코딩한 것을 진행한다.

- 상단부에 녹색 Run As 버튼을 누르거나 Run As -> Java Application을 눌러 컴파일을하고 실행한다.

--> 결과

3. 실습하기

https://docs.oracle.com/en/java/javase/17/docs/api/index.html

 

Overview (Java SE 17 & JDK 17)

This document is divided into two sections: Java SE The Java Platform, Standard Edition (Java SE) APIs define the core Java platform for general-purpose computing. These APIs are in modules whose names start with java. JDK The Java Development Kit (JDK) AP

docs.oracle.com

- 실습시 사용하는 자바함수에 대해 알수 있는 사이트이다.

 

1) BitOperator.java

package com.julian5383.test;

public class BitOperator {
	public static void main(String[] args) {
		int v1 = 10;
		System.out.println(v1+"==>"+toBinaryString(v1));
        //정수 10의 이진수를 출력한다.
		
		int v2 = ~v1;
		System.out.println(v2+"==>"+toBinaryString(v2));
        // ~는 1의 보수를 의미한다.
		//이진수를 뒤집는다.
        
		int v3 = ~v1+1;
		System.out.println(v3+"==>"+toBinaryString(v3));
		//뒤집은 이진수에 1을 더한다.
        //그러면 10에 대한 2의보수가 출력된다.
        
		System.out.println("------------");
		
		System.out.println(Integer.MAX_VALUE);
        //정수의 최대값을 출력한다.
		System.out.println(Integer.MIN_VALUE);
		//정수의 최소값을 출력한다.
        
		System.out.println("------------");
		int v4=2147483647;
		System.out.println(v4+"==>"+toBinaryString(v4));
        //정수 최댓값의 이진수를 출력한다.
		
		int v5= v4+1;
		System.out.println(v5+"==>"+toBinaryString(v5));
        //정수 최댓값 이진수에 1을 더한다.
		//오버플로우가 일어난다.
		
		System.out.println("------------");
		float f=0.01f;
		float sum=0f;
		for (int i = 0; i < 100; i++) {
			sum+=f;
		}
		System.out.println(sum);
		//float형 실수를 100번 더했을때 완전한 1이 나오지 않았다.
        //즉 0.01f 뒤에 오차가 있음을 의미한다.
        
		double f2=0.01;
		double sum2=0.0;
		for (int i = 0; i < 100; i++) {
			sum+=f2;
		}       
		System.out.println(sum2);
        //double형 실수를 더했을때도 완전한 1이 나오지는 않았지만
        //float형에 비하면 거의 1에 가깝게 나왔다.
        //즉, float의 오차가 double보다 큼을 알수 있다.
        
		System.out.println("------------");
		System.out.println("3 << 1 : "+(3<<1));
        // 정수 3의 각비트를 1만큼 왼쪽으로 이동한다.
        // 오른쪽 빈자리는 0으로 채운다.
        // 3 * 2^1=6
		System.out.println("3 << 2 : "+(3<<2));
        // 정수 3의 각비트를 2만큼 왼쪽으로 이동한다.
        // 오른쪽 빈자리는 0으로 채운다.
        // 3 * 2^2=12
		System.out.println("12 >> 1 : "+(12>>1));
        // 정수 12의 각비트를 1만큼 오른쪽으로 이동한다.
        // 왼쪽 빈자리는 최상위 부호 비트와 같은 값으로 채운다.
        // 12 / 2^1=6
		System.out.println("12 >> 2 : "+(12>>2));
        // 정수 12의 각비트를 2만큼 오른쪽으로 이동한다.
        // 왼쪽 빈자리는 최상위 부호 비트와 같은 값으로 채운다.
        // 12 / 2^2=3
	}
	
	public static String toBinaryString(int value){
    	//정수를 32비트의 이진수로 바꾸어주는 메소드이다.
		String str = Integer.toBinaryString(value);
		while(str.length() < 32) {
			str = '0'+str;
		}
		return str;
	}
}

 

 

- 2의 보수: 어떤 수를 커다란 2의 제곱수에서 빼서 얻은 이진수이다.

- 2의 보수 구하는 방법

1) 기존 이진수를 1의 보수를 통해서 각 자릿수를 반전 시킨다.

2) 1의 보수에 1을 더해서 2의 보수를 취하면 된다.

 

- 오버플로우: 정수형 오버플로우는 정수 값이 증가하며 하용된 가장 큰 값보다 커져 실제 저장되는 값이 의도치않게 아주 작은 수 이거나 음수가 되는 것이다.

- 예를 들어, 정수형 최댓값 2147483647 이진수에 1을 더하면 정수형 최댓값을 벗어나서 오버플로우가 일어난다. 그러면 정수형 최솟값 -2147483648로 가게된다.

 

--> 결과

10==>00000000000000000000000000001010
-11==>11111111111111111111111111110101
-10==>11111111111111111111111111110110
------------
2147483647
-2147483648
------------
2147483647==>01111111111111111111111111111111
-2147483648==>10000000000000000000000000000000
------------
0.99999934
0.0
------------
3 << 1 : 6
3 << 2 : 12
12 >> 1 : 6
12 >> 2 : 3

2) PrimitiveData.java

package com.julian5383.test;

public class PrimitiveData {
	public static void main(String[] args) {
		char ch1='A'; //문자 하나 출력
		char ch2=65; //아스키코드코드
		char ch3='\u0041'; //유니코드입력
		
		char ch4='가';
		char ch5=44032;
		char ch6='\uac00';
		System.out.println(ch1);
		System.out.println(ch2);
		System.out.println(ch3);
		System.out.println(ch4);
		System.out.println(ch5);
		System.out.println(ch6);
		
		int num=10;
		int result = num+10;
		
		double d =12.345;
		float f = 2.345f;
		
		System.out.println("result = "+result);
		System.out.println(d);
		
		String myString = "Java class";
		String myString2="J";
		System.out.println(myString);
		System.out.println(myString2);
	}
	
}

- char 타입에 숫자를 입력하면 아스키코드가 출력된다.

- char타입에 ''안에서 \u로 시작하는 코드를 넣으면 유니코드를 입력하게 된다.

--> 결과

A
A
A
가
가
가
result = 20
12.345
Java class
J

3) CastExam.java

package com.julian5383.test;

public class CastExam {
	public static void main(String[] args) {
		int a=10;
		System.out.println(a);
		
		double b=a;
		
		System.out.println(b);
		System.out.println("----------------");
		
		double c=1.8;
		//a=c; autocasting 안됨
		a=(int)c;
		
		System.out.println("a = "+a+", c = "+c);
		
	}
}

- 오토캐스팅(Auto Casting): 자동영변환으로 우선 순위가 더 낮은 변수(int)에서 우선 순위가 더 높은 변수(double)로 형을 변환할 때는 타입을 명시하지 않아도 자동적으로 변환이 이루어진다.

 

- 강제형변환: 그러나 높은 변수형(double)에서 낮은 변수형(int)으로 갈때에는 형변환이 되지 않는다. 이때에는 해당 변수 앞에 ()를 선언하고 이 안에 데이터 타입을 넣어 자료형을 명시해준다.(ex) a=(int)c )

 

--> 결과

10
10.0
----------------
a = 1, c = 1.8

4) Compare.java

package com.julian5383.test;

public class Compare {

	public static void main(String[] args) {
		int num1 = 10;
		int num2 = 10;
		boolean result1=(num1 == num2);
		boolean result2=(num1 != num2);
		boolean result3=(num1 <= num2); //num1이 더 작거나 같을때
		System.out.println("result1: "+result1);
		System.out.println("result2: "+result2);
		System.out.println("result3: "+result3);
		System.out.println("-----------------");
		
		char char1='A';
		char char2='B';
		boolean result4 = (char1 < char2);
		System.out.println("result4: "+result4);
		System.out.println("-----------------");
		
		int num3=1;
		double num4 = 1.0;
		boolean result5 = (num3 == num4);
		System.out.println("result5: "+result5);
		System.out.println("-----------------");
		
		float num5=0.1f;
		double num6 = 0.1;
		boolean result6 = (num5 == num6);//float와 double은 정밀도차이 때문에 false가 나온다.
		boolean result7 = (num5 == (float)num6);//num6이 float타입으로 전환됨
		System.out.println("result6: "+result6);
		System.out.println("result7: "+result7);
		System.out.println("-----------------");
		
		String str1="자바";
		String str2="Java";
		boolean result8 = (str1.equals(str2));
		boolean result9 = (!str1.equals(str2));
		System.out.println("result8: "+result8);
		System.out.println("result9: "+result9);
	}
}

--> 결과

result1: true
result2: false
result3: true
-----------------
result4: true
-----------------
result5: true
-----------------
result6: false
result7: true
-----------------
result8: false
result9: true

5) Logical.java

package com.julian5383.test;

public class Logical {
	public static void main(String[] args) {
		int charCode='A';
        //아스키코드로 입력된다. A에 대한 아스키코드 숫자에 따라 if문이 출력된다.
		
		if((65 <= charCode) && (charCode<=90)) {
			System.out.println("대문자");
		}
		
		if((97 <= charCode) && (charCode<=122)) {
			System.out.println("소문자");
		}
		
		if((48 <= charCode) && (charCode<=57)) {
			System.out.println("0~9 숫자");
		}
		
		int value = 6;
        // 논리연산자로 ||와 |은 '또는'을 의미한다.
		
		if((value%2==0) | (value%3==0)) {
			System.out.println("2 또는 3의 배수");
		}
		
		boolean result = (value%2==0) || (value%3==0);
		if(!result) {
			System.out.println("2 또는 3의 배수가 아님");
		}
	}
}

--> 결과

대문자
2 또는 3의 배수

6) BitLogic.java

package com.julian5383.test;

public class BitLogic {
	public static void main(String[] args) {
		System.out.println("45 & 25 = " + (45 & 25));
        //45와 25를 논리곱을 한다.
		System.out.println("45 | 25 = " + (45 | 25));
        //45와 25를 논리합을 한다.
		System.out.println("45 ^ 25 = " + (45 ^ 25));
        //45와 25를 베타적 논리합을 한다.
		System.out.println("~45 = " + (~45));
        //45에 대해 논리부정을 한다.
		System.out.println("----------------");

		byte receiveData = -120;

		int unsignedInt1 = receiveData & 255;
		System.out.println(unsignedInt1);
		// 비트 논리곱 연산으로 -120와 255를 논리곱을 한다.
        
		int unsignedInt2 = Byte.toUnsignedInt(receiveData);
		System.out.println(unsignedInt2);
		// Byte.toUnsignedInt()코드를 이용해 255와 -120을 논리곱할 수 있다.
        
		int test = 136;
		byte btest = (byte) test;
		System.out.println((int)btest);
        //int값을 byte로 형변환해서 출력한다.
	}
}

--> 결과

45 & 25 = 9
45 | 25 = 61
45 ^ 25 = 52
~45 = -46
----------------
136
136
-120

7) OperatorEtc.java

package com.julian5383.test;

public class OperatorEtc {
	public static void main(String[] args) {
		int a=10;
		int b=3;
		System.out.println(a/b);// 정수인 경우 몫만 출력하고 나머지(수숫점 이하)는 버린다
		System.out.println(a/4);
		System.out.println(a/4.);// 4. 로 double 하는 경우 결과값은 실수로 출력
		
		String s1="Java";// s1 : Java 라는 문자열 객체(리터럴)의 reference(주소)값을 담는 변수
		String s2="Java";// s2 : Java 라는 문자열 객체(리터럴)의 reference(주소)값을 담는 변수
		
		System.out.println(s1 == s2);// 단순히 변수값을 비교
		
		String s3 = new String("Java");
        // s3 : Java 라는 문자열을 가진 새로운 문자열 객체(리터럴X)의 reference(주소)값
		System.out.println(s3);
		System.out.println(s1 == s3);// 주소값이 다르기 때문에 false
		System.out.println(s1.equals(s3));// 실제 문자열의 비교
	}
}

 

--> 결과

2
2.5
true
Java
false
true