Java 시작해보기
Java의 세계로~
설치
우리는 이제 OpenJDK
- Oracle이 진행하던 JDK(java development kit) 업데이트가 3년 주기로 이뤄지고 있다.
- 따라서 우리는 매년 업데이트 되는 OpenJDK를 설치하게 된다.
- OpenJDK 공식 홈페이지에서 버전 업데이트 소식을 확인 할 수 있고 JDK 다운로드 페이지에서 stable 버전과 개발되고 있는 버전을 확인하고 다운 받을 수 있다.
- 2021년 7월 1일 현재 기준 업데이트 된 stable OpenJDK는 OpenJDK 16이다.
자 이제 윈도우에 설치
- 나의 경우 윈도우 10을 사용하므로 JDK 16에서 windows용 zip 파일을 다운 받는다.
- 알집을 잘 풀어준 뒤 원하는 위치를 지정해서 옮겨주었다. (보통 C드라이브의 프로그램파일즈의 Java 폴더 안에 버전별로 적재해놓는다.)
- 그 후 CMD에서 사용할 수 있게 환경 변수에 추가해준다.
- bin 폴더 안에 java 실행 파일이 들어있으므로 bin 파일 주소까지 추가해준다. ex)
C:\Java\jdk16\bin
(Optional) 새로운 IDE InteliJ를 모십니다.
- InteliJ는 Jetbrain에서 만든 똑똑한 IDE이다.
- 난 Java를 공부해 장차 Spring boot를 사용할 것이므로 InteliJ 정식버전을 설치하였다.
- 저처럼 학생 라이센스를 이용하실 거라면 여기로 가서 인증하서 설치하세요
- 설치가 다 되었다면 InteliJ 프로젝트 만들어준다.
- 나의 경우에는 프로젝트 경로는 기본으로 두고 Java라는 프로젝트 이름으로 설치했던 JDK16을 사용하도록 빈 프로젝트를 만들었다.
- 빈 프로젝트에 src 폴더 안에 Main.java를 만들고 Hello World를 만들어 보자.
Java 기본 문법
- 참고하기 좋도록 코드 위주로 적는다.
- 궁금할만한 것들은 짧게 정리해둔다.
Hello World
- Java의 print 메소드는
System.out.println
이다. - Main이 static method로 정의된 이유
- static method의 성질
- Static으로 선언한 함수나 변수는 객체의 생성 없이 메모리에 할당시켜 호출 가능한 형태가 된다.
- static 메소드이기 때문에 new classname().main() 할 필요가 없다.
- 그래서 main은 어디에 할당 되어 있을까?
- static으로 선언한 메서드는 자바 가상머신(JVM)에서 객체 생성 없이 메모리에 할당시켜 호출 가능한 형태로 존재한다.
- 실제로 cmd창에 java "메인 클래스"를 입력하면 JVM은 메인 클래스의 객체를 생성하는 것이 아니라, 클래스의 static으로 선언된 메서드를 객체 생성 없이 메모리에 할당시키고 할당된 메서드 중 "main"으로 네이밍된 메서드가 있는지 찾아 호출하게 된다.
- 즉 "(메인 클래스).main()"이 JVM 상에서 실행되는 것이다.
- static 멤버 호출 순서 : 정적 변수 -> 정적 초기화문 -> 정적 메서드
- static method의 성질
- static 멤버 호출 순서 : 정적 변수 -> 정적 초기화문 -> 정적 메서드
public class Main {
public static void main(String[] args) {
System.out.println("hello world");
}
}
Declare default type variables
기본형 변수 선언
public class Main {
public static void main(String[] args) {
# 문자
String name = "lsh";
char myLetter = 'L';
# 숫자
int myNum = 5;
long myNum = 150000000L;
# 실수
float myFloatNum = 5.99f;
double myD = 19.99D;
# Boolean (참/거짓)
boolean myBool = true;
# 열거형 방식
int a = 2, b = 3, c;
System.out.println(name);
}
}
Manual type Casting
타입 캐스팅
public static void main(String[] args) {
double myDouble = 9.78d;
int myInt = (int) myDouble; // Manual casting: double to int
System.out.println(myDouble); // Outputs 9.78
System.out.println(myInt); // Outputs 9
}
If - Else if - Else statement
If 구문
int time = 28;
if (time < 23) {
System.out.println("20대 초반");
} else if (time < 27) {
System.out.println("20대 중반");
} else {
System.out.println("Not human");
}
short-hand if else
짧은 버전
int score = 90
char pass_fail = (score >= 88)? 'p':'f'
System.out.println(pass_fail); // pass
Switch statements
스위치 구문
int day = 4
switch(expression){
case 1:
System.out.println("시작하는 날");
break;
case 2:
System.out.println("시스템 확립!");
break;
case 3:
System.out.println("내가 변화하는 날");
break;
default:
System.out.println("작심삼일 탈출!");
while statement
int i = 0;
while (i < 5) {
System.out.println(i);
i++;
}
do / while statement
int i = 0;
do {
System.out.println(i);
i++;
}
while (i < 5);
for statement
For loop
for (int i = 0; i < 5; i++) {
System.out.println(i);
}
For-Each loop
String[] cars = {"Volvo", "BMW", "Ford", "Mazda"};
for (String i : cars) {
System.out.println(i);
}
break / continue statements
break, continue 구문
break
for (int i = 0; i < 10; i++) {
if (i == 4) {
break;
}
System.out.println(i);
}
continue
for (int i = 0; i < 10; i++) {
if (i == 4) {
continue;
}
System.out.println(i);
}
Declare Method
함수 선언
public class Main{
static void myMethod(String name, int count) {
System.out.println("I just got executed! " + name + count);
}
public static void main(String[] args) {
myMethod("Theo", 10);
}
}
Declare a Class
클래스 선언
- Modifier
- static : 클래스 영역에 저장됨
- final : 오버라이드나 수정 불가
- public : 다른 클래스에서 접근 가능
- abstract : 추상 클래스, 메소드 선언
public class Main {
int x = 5;
public void myMethod(){
this.x = 2;
}
public static void main(String[] args){
Main myObj = new Main();
System.out.println(myObj.x);
myObj.myMethod();
System.out.println(myObj.x);
}
}
Constructors
생성자 선언
public class Main {
int x;
public Main(int y) {
x = y;
}
public static void main(String[] args) {
Main myObj = new Main(5);
System.out.println(myObj.x);
}
}
Final
public class Main {
final int x = 10;
public final static void check() {
System.out.println("ok");
}
public static void main(String[] args) {
Main myObj = new Main();
myObj.x = 50; // will generate an error: cannot assign a value to a final variable
System.out.println(myObj.x);
check();
}
}
Abstract / Override
추상 클래스, 오버라이드 예제
// abstract class
abstract class Student {
public String fname = "";
public abstract void study(); // abstract method
}
// Subclass (inherit from Main)
class Lsmman extends Student {
public String fname = "lsh";
public void study() { // the body of the abstract method is provided here
System.out.println("Studying all day long");
}
}
class Main {
public static void main(String[] args) {
// create an object of the Student class (which inherits attributes and methods from Main)
Lsmman myObj = new Lsmman();
System.out.println("Name: " + myObj.fname);
myObj.study(); // call abstract method
}
}
따로 다룰 시리즈
- println 시리즈 (출력 형식)
- 연산자 모음집
- String methods
- Math lib
- Get and Set
'Java' 카테고리의 다른 글
Gradle 로 Junit 5 테스트 할 수 있도록 빌드 하기 (0) | 2021.10.26 |
---|---|
String:: 비어있는 문자열인지 체크 하는 두 개의 메소드 비교 ( isEmpty vs isBlank ) (0) | 2021.10.25 |
Java에서 큰 수 다루기 (BigInteger) (0) | 2021.08.05 |
Java Packages & API 사용하기 (0) | 2021.07.06 |