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 기본 문법

  1. 참고하기 좋도록 코드 위주로 적는다.
  2. 궁금할만한 것들은 짧게 정리해둔다.

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 멤버 호출 순서 : 정적 변수 -> 정적 초기화문 -> 정적 메서드
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

+ Recent posts