[비트교육센터] 자바 11일차, 이클립스설치, 연산자
1. 설치하기
1) JDK 설치
[1]
- 아마존사이트에 들어간다.
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