java는 대표적인 객체 지향 프로그래밍 언어로써, 현재도 아주 범용성 있게 사용되고 있다.
프로그래밍을 진짜 기초부터 다시 공부해보려고 하니... 무슨 언어를 공부할까 고민이 많았다. 이제 java를 선택한 이유는 다음과 같다.
- 배우기 쉬운 객체 지향 언어이며 전공 수업에서도 많이 쓰인다.
- 나중에 backend를 공부할 일이 있으면(kotlin, spring) java를 할 줄 아는게 편할 것 같다.
- 가장 인기있는 언어 중 하난데 그래도 java는 할 줄 알아야지.. 현재도 많이 쓰이고 이번 기회에 공부해 두는게 여러모로 편할 거 같아서!!
여담이지만.. 초등학생때 마인크래프트를 할 때 java를 설치해야 게임을 할 수 있었던 기억이 난다. 그땐 몰랐지 그게 이거라는걸.. 그때 공부해 놓을걸..
java가 가상 머신을 사용한다, garbage collection, oop.. 뭐 어디서 주워들은 이야기는 많은데 사실 설명할 줄은 모른다!! 나중에 면접때 java랑 c++ 차이가 뭐에요 물어보면 대답 못할 것 같고, 그래서 나중을 위해 이렇게 글로 남겨서 해보려고 한다.
byte code는 전체 컴파일 과정에서, 우리가 쓴 코드가 가상 머신이 알아먹을 수 있는 형태로 바뀐 것이다. javac라는 컴파일러에 의해 .java 코드가 .class로 컴파일 된다.
그럼 가상 머신이 뭘까? 이는 하드웨어적인 기계를 말하는 것이 아니라 가상의, 즉 소프트웨어를 말하는 것으로, 특정 하드웨어나 운영체제에 구애받지 않고 보편적으로 작동할 수 있도록 설계된 것이다. kotlin 같은 언어도 우리가 보는 format은 다르지만 결국 byte code로 변환되어 JVM으로 들어가기 때문에 완벽하게 호환된다고 할 수 있는 것이다!
Java환경에서 개발하기 위해 컴파일러, 디버거가 들어간 개발 키트를 의미한다.
나는 최근에 출시한 JDK 21을 사용하기로 했다.
그럼 Hello world 부터 보도록 하자
#2557. Hello world
public class Main {
public static void main(String arg[]) {
System.out.println("Hello World!");
}
}
(주의: 백준에 올릴 때는 class 이름을 Main으로 지정해야 함)
java로 hello world를 출력해 보았다.
자바는 class(.class)단위로 프로젝트가 돌아간다. 프로젝트는 보통 여러개의 class파일로 돌아가게 된다.
class안에는 method들이 들어간다. 이는 다른 언어에서의 function과 유사하다. class가 작동하기 위해서는 main method가 필요하고 이는 위 코드에서
public static void main(String arg[])
이다.
c++에서 배운 class/inheritance 개념과 매우 비슷하다. c++을 배웠던걸 잘 기억해보자.. class Pet을 선언하고 Dog, Cat 등으로 inherit 해주고 member variable/function을 만들었던 게 기억이 난다! 새로운 객체를 만들때는 constructor를 이용하거나 dynamic programming 방식으로 new Class() 를 이용하기도 했다. java에서도 마찬가지인데, java에서는 member function/variable을 method라는 이름으로, 선언된 하나하나의 객체들을 instance라고 부른다.
public class Pet {
String name; // member variable
public void getName() { // method
System.out.println(name);
}
public void setName(String input) { // method
name = input;
}
public static void main(String arg[]){ // main method
Pet cat = new Pet(); // declare instance
cat.setName("zizi");
}
}
jvm, garbage collection 등 자세한 내용은 나중에 적어보기로 하고 여기서는 먼저 아주 기본적인 것부터..!!
import java.util.Scanner;
사용을 위해 먼저 Scanner class를 import 해야 한다.
Scanner class에 포함된 method는 다음과 같다.
method | 기능 |
---|---|
Scanner.next() | Token을 읽어옴(String type) |
Scanner.nextLine() | Enter가 나올 때 까지 모든 Token을 한 덩어리로 읽어옴(String type) |
Scanner.nextInt() | Token을 읽어옴(Integer type) |
(nextBoolean, nextDouble 등 모든 변수 타입에 대해 함수가 존재한다, 생략!)
Scanner는 기본적으로 Token 단위로 입력을 받는다!
Token: 띄어쓰기, Tab, Enter 등으로 구분되어지는 하나의 요소를 의미함. 입력을 Tokenize 한다는 것은 Token 단위로 입력을 parsing 하겠다는 것!
자료구조 들을 때 Tokenize 하라는 말 듣고, 그냥 파싱한다고 하면 되지 왜 저렇게 말하나 했다.
(...작성중)
뒷내용 더 써주세여~