본문 바로가기

Java

Java 기초 공부 1

 19년에 파이썬을 접한 뒤로 파이썬 외에 다른 언어를 배울 일이 없었습니다. 전공 공부나 다른 일로 개발 공부를 쉰 적도 있고, '하나 언어 알면 되지. 굳이 다른 언어를 또 공부해야 하나?' 하는 생각도 솔직히 있었죠.

 하지만 최근에 백엔드 공부를 해야겠다 싶어서 django를 배우면 되겠다 했더니, 사람들이 극구 말리더라고요. 그 이유는 대부분 기업들이 django보다는 Spring을 쓰기 때문이라고.. 그리고, 'spring'은 'Java'의 프레임워크라.. 결국 Java를 배워야 했습니다.

 그래서 어제부터 Java 공부를 시작했고, 걱정한 것에 비해 상당히 재밌는 점이 많다는 걸 느꼈습니다. 파이썬 하고 다른 점도 많고요. 그래서 그냥 머리에 넣기보다 블로그를 하는 겸 기록도 해놓아야겠다 생각해서 이 글을 쓰게 되었습니다.

 (해당 필기는 'egoing'님의 '생활코딩 - JAVA 1' 강의를 참고해서 작성한 글입니다.)

 

JAVA1

 

www.youtube.com



↘︎ 자바 어플리케이션이 동작하는 과정

'Java Source Code'.java --(compile)--> 'Java Application'.class
'Java Application'.class --(실행 명령)--> 'Java Virtual Machine'
'Java Virtual Machine' --(실행)--> 'Computer'

 

1. 개발자가 '.java' 확장자를 가지는 자바 소스코드를 작성합니다.

2. 컴파일을 통해 '.class' 확장자의 컴퓨터가 읽는 코드로 된 파일을 만듭니다.

3. '.java'를 실행하면, 'Java Virtual Machine'에게 '.class'로 된 파일을 읽으라고 명령합니다.

4. 'Java Virtual Machine'이 '.class' 파일을 실행하면서 컴퓨터로 결과를 보여줍니다.

 

 

↘︎ 자바 소스코드 작성 방법

public class HelloWorldApp { 
// 클래스명과 파일명이 같아야함
	public static void main(String[] args) {
	// main 함수를 가장 먼저 실행 - String[]과 args는 parameter
	// args는 유저가 입력한 arguments를 저장
		System.out.println("Hello World!!");
		// 'sysout' 입력 후에 'Ctrl + Space' 명령어를 통해 바로 println() 작성 가능
		// mac 기준) preference - keys 탭 - Content Assist - Binding에서 명령어 수정 가능
	}
}

 

 위에서 public class ClassName { public static void main(String[] args) { } }는 기본적으로 입력해야 하는 코드입니다. 해당 ClassName은 '.java' 파일의 파일명과 같아야 합니다. 편리하게도 프로젝트를 생성한 뒤에 프로젝트 우클릭 - new - Class를 통해 만들면 클래스 이름(=파일 이름)에 따라 Class를 바로 만들어주고, public static void main... 에 체크하면 main 함수까지 자동으로 만들어 줍니다!! 

 

 

↘︎ 자바의 데이터 타입

1. Number   vs   String

public class Datatype{
	public static void main(String[] args) {
    
        System.out.println("six"); // String
		System.out.println("6"); // String
		System.out.println(6); // Number
        
	}
}

 

 이 부분은 파이썬과 크게 다른 점은 없었습니다.  "" (쌍 따옴표) 안에 있는 것은 문자열이고, 그냥 숫자가 나오면 문자열이 아닌 정수 혹은 실수 타입을 지니게 됩니다. 하지만, 파이썬과 다르게 ''(홑 따옴표) 안에는 반드시 'a', 'b', 'c', 'd'... 와 같은 문자(Character)만 들어갈 수 있습니다. 

 

 그 외에 개행 문자나 문자열 안에 "를 쓰는 등 escape 문자를 사용하는 방법은 파이썬과 동일하게 '\'를 사용해 쓰면 됩니다.

 

System.out.println("Hello \nWorld");
System.out.println("Hello \"World\"");

 

 Math.PI를 사용하면 원주율의 값도 쓸 수 있고, 숫자 값들은 '+', '-', '*', '/' 등의 사칙연산과 'Math.'으로 시작하는 여러 산술 계산을 할 수도 있습니다. 당연히 문자열은 안 되고, 대신 '.length()'나 '.replace("a", "b")' 등의 메소드를 사용하여 문자열의 길이나 값을 일부 바꾸는 등의 작업을 할 수 있습니다.

 

 

2. Variable(변수)

public class Variable {

	public static void main(String[] args) {
		
		int a = 1; // Number -> integer 정수 (... -2 -1 0 1 2 ...)
		System.out.println(a);
		
		double b = 1.1; // real number -> double 실수 (... -2.0 -1.0 0 1.2 ...)
		System.out.println(b);
		
		String c = "Hello World"; // string 문자열 
		System.out.println(c);

	}

}

 

 앞에서 본 타입 외에 자바에는 여러 타입이 존재하는데, 이를 저장하고 사용하기 위해서 우리는 'Variable(변수)'를 사용하게 됩니다. 자바에서 이 변수를 선언할 경우, 파이썬과는 다르게 반드시 앞에 데이터 타입을 명시해 주어야 합니다.

 

 해당 타입을 통해서 코드를 보는 다른 개발자가 이 변수가 어떤 타입인지 쉽게 알 수 있습니다. 위의 코드에서는 'a'가 'integer'라는 정수 타입의 변수이고, 'b'가 'double'이라는 실수 타입, 'c'가 'String'이라는 문자열의 데이터 타입이라는 것을 확인할 수 있습니다.

 

 

3. Casting(캐스팅 : 타입 변환)

public class Casting {

	public static void main(String[] args) {
		
		double a = 1.1;
		double b = 1; // integer to double : 별다른 메소드 없이 바로 가능 (손실 없음)
		System.out.println("a = " + a + " b = " + b);
		
		// int c = 1.1;
		double d = 1.1;
		int e = (int) 1.1; // e = 1 -> 손실 발생 
		System.out.println("d = " + d + " e = " + e);
		
		// 1 to String
		String f = Integer.toString(1);
		System.out.println(f + " " + f.getClass());

	}

}

 

 숫자 타입의 변수는 double(실수)이 integer(정수) 보다 상위 개념이므로, 정수를 실수로 바꾸는 데에는 큰 문제가 없습니다. 하지만, 반대로 '(int) 실수 값'을 통해 double 값을 int 값으로 만들 때에는 소수점 아래의 값들이 사라지는 이른바 손실이 발생하게 됩니다.

 

 숫자를 문자열로 바꾸기 위해서는 '.toString(value)' 매소드를 사용하며, '.getClass()'를 통해서 해당 값의 타입을 확인할 수 있습니다.

 

 

↘︎ 다른 패키지 클래스 호출하기

import packageFolder.packageFile.LogIn;
import packageFolder.packageFile.LogOut;
import packageFolder.packageFile.SignIn;

public class SiteLogIn {

	public static void main(String[] args) {
		
		String id = "000000";
		String pass = "111111";
		
		// Sign in
		SignIn mySignIn = new SignIn(id, pass);
		mySignIn.create();
		
		// Log in
		LogIn myLogIn = new LogIn(id, pass);
		myLogIn.on();
        
		// Log out
		LogOut myLogOut = new LogOut(id);
		myLogOut.on();
		
	}

}

 

 위의 SiteLogIn 클래스는 외부 패키지의 클래스를 가져다 쓰고 있습니다. 이런 식으로 다른 패키지의 클래스를 호출할 때에는 'import 경로.패키지이름.클래스이름'을 통해서 먼저 클래스를 가져와야 합니다. 그리고, 가져온 클래스를 이용해 변수를 선언하고, 해당 클래스의 메소드를 사용할 수도 있습니다.

 

 

↘︎ 입력받기

1. 창을 띄워서 입력받기

String a = JOptionPane.showInputDialog("Input a value"); // input value with a Dialog

 

2. 미리 정해둔 arguments를 입력받아 실행하기

1. 2번 방법을 사용하기 위해서는 이클립스에서 해당 클래스를 일단 한 번 실행해야 합니다.
2. run 버튼 옆에 있는 ▼를 누르고 'Run Figurations'을 누릅니다.
3. 원하는 클래스 탭으로 들어간 뒤 arguments 탭에서 Program arguments에 입력할 값을 작성합니다.
  3-1. 단, 'argument1' (공백) 'argument2' (공백) 'argument3' 이런 식으로 입력해야 합니다.
4. 해당 실행 메뉴 이름을 원하는 이름으로 변경하고, Apply 한 뒤, 다시 run 버튼 옆에 ▼을 누르면 해당 실행 메뉴를 실행할 수 있습니다.
5. 'Organize favorites'를 통해 즐겨 찾는 실행 메뉴를 등록할 수도 있습니다.

 

 위의 과정을 마친 뒤에 코드에서 args[0], args[1], args[2] 등으로 해당 arguments를 사용할 수 있습니다.

 

String id = args[0];
String pass = args[1];

 

 

↘︎ Debugging(디버깅)

 

 디버그는 연산 중에 있는 버그를 찾아내기 위한 과정으로 작성한 코드를 검토하는 것이라고 생각하면 됩니다. 이클립스에서는 run 버튼 옆에 벌레(bug) 모양의 버튼을 이용해 debug 모드로 들어갈 수 있고, 해당 모드에서는 debug theme(테마)로 바뀌게 됩니다.

 

디버깅과 디버그 모드

 

 디버깅을 그냥 실행하면 코드 전체를 실행하면서 오른쪽 탭에 저장된 변수들을 보여줍니다. 하지만, 소스 코드 왼 편 행 번호를 더블 클릭하여 break point를 여러 개 만들어 놓고 디버깅에 들어가면 맨 처음 마주하는 break point까지만 실행되고 정지하게 됩니다. 이때에 사진처럼 break point는 파란색 점으로 표시되고, 정지된 행에는 초록색으로 바탕색이 칠해지게 됩니다.

 

 해당 지점까지는 문제가 없고, 다음 코드부터 다음 break point까지 다시 디버깅하고 싶다면, 맨 위의 탭에서 화살표 버튼 중에서 Step over 버튼을 누르면 됩니다. 만약, 멈춘 코드에 사용된 메소드에서 어떻게 처리가 되는지 확인하고 싶다면, Step info 버튼을 눌러 확인할 수 있고, 다시 Step return 버튼으로 돌아올 수 있습니다.

 

왼쪽부터 차례로 step info, over, return

 

 

( 2편으로 계속됩니다... )

'Java' 카테고리의 다른 글

Java 기초 공부 3  (0) 2022.06.03
Java 기초 공부 2  (0) 2022.06.02