강의 두개를 남겨놓고 더이상은 초보자가 수강하기에 어려울거라고 판단해서 점프 투 자바로 공부하기로 결정했다. 생각보다 훨씬 난이도가 낮아져서 매우 수월하게 강의를 들었다. 기본적인 틀은 파이썬을 공부했던 것과도 유사해서 강의를 배속을 해놓고 훑듯이 들었다. 중간중간 필요한 개념들을 구글링을 해서 추가학습하였다.
어쨋든 TIL.
자바라는 언어를 이용하여 만든 프로그램은 '.java' 라는 확장자를 가지게 된다. 이렇게 저장되는 '.java' 파일을 자바 코드, 자바 소스라고 부른다. (참고로 code, source, language는 관점에 따라 다르지만 유사한 표현들이다.) 이 자바 프로그램을 동작시키려면 여러 과정이 필요하다.
프로젝트 안의 src 폴더에 구현하고자 하는 기능의 코드를 작성한다. 이 코드는 인간이 이해할 수 있는 코드로 작성되었지만, 컴퓨터는 이 코드 자체만으로는 이해하지 못한다. (ex : HelloWorld.java)
작성한 코드를 저장하면 프로젝트 안의 out 폴더에 자동으로 클래스 파일을 생성한다. 클래스 파일은 자바 JVM(Java Virtual Machine)이 인식할 수 있는 binary 파일로 변환된 파일이다. 이를 컴파일이라고 한다.(ex : Helloworld.class)
JVM이 클래스 파일의 바이너리 코드를 해석하여 프로그램을 수행한다.
수행결과가 컴퓨터에 반영된다.
자바 소스 코드의 기본적인 형태는 다음과 같다.
/* 클래스 블록 */
public class 클래스명 {
/* 메소드 블록 */
[public | private | protected] [static] (void) 메소드명(입력자료형 매개변수(argument)) {
statements(명령문);
...
}
}
클래스와 메소드 블록 앞에 public, private, protected 혹은 아무것도 붙지 않을 때도 있는데(default) 이를 접근제어자라고 한다. 접근제어자란 다른 클래스로부터 메소드를 호출할 수 있는지 에 대한 접근 정도의 차이에 따라 public > protected > default > privated 순으로 접근이 용이하다.
메소드에 static이 지정되어 있는 경우, 인스턴스의 생성없이 메소드를 실행할 수 있다.
public class Gugu {
public void dan(int n) {
System.out.println(n * 1);
System.out.println(n * 2);
System.out.println(n * 3);
System.out.println(n * 4);
...
}
public static void main(String[] args) {
Gugu gugu = new Gugu();
// Gugu 클래스의 객체 생성
// 특정 클래스로부터 메소드를 끌어다 쓰고 싶을 때
gugu.dan(2); // 객체를 통해 dan 메소드 호출
gugu.dan(3);
gugu.dan(4);
...
}
}
public class Gugu {
public static void dan(int n) {
System.out.println(n * 1);
System.out.println(n * 2);
System.out.println(n * 3);
System.out.println(n * 4);
...
}
public static void main(String[] args) {
dan(2);
dan(3);
dan(4);
...
}
}
dan 메소드에 static 지정을 해줌으로써 객체 생성(Gugu gugu = new Gugu();)없이 메소드 호출만으로 가능하다.
해당 메소드에 return 값이 존재할 경우 return을 해주면 되고, 존재하지 않을 경우 void를 붙여준다.
어떤 프로그램이던지 시작과 끝이 있는데 그 시작과 끝을 관리해주는 것이 main method이다. 여기서 메소드는 함수와 동일한 개념이다. 다만 클래스 내에서의 함수는 함수라 부르지 않고 메소드라고 부른다. 포함관계로 따지면 패키지, 클래스, 메소드 순이다.
public static void main(String[] args) {
...
}
간단하게 문법 풀이를 하고 추후에 깊게 다뤄보겠다.
public - 메소드의 접근제어자로서, 누구나 이 메소드에 접근할 수 있다.
static - 메소드에 static이 지정되어 있는 경우, 인스턴스의 생성없이 메소드를 실행할 수 있다.
void - 메소드의 return값이 없다.
String[] args- 매소드의 매게 변수이다. args라는 이름의 변수는 String[] 배열 자료형임을 의미한다.(argument의 약자로 관용적으로 사용되는 이름으로 다른 이름을 사용해도 상관없다.)
변수란 저장 하고자 하는 무언가의 저장 공간을 뜻한다. 저장 공간에 어떤 타입(type)의 자료를 저장하냐에 따라 변수를 선언해야 하는데 이 때 변수의 앞에 선언한 것들(int, String, double...)을 자료형이라고 한다.
단어마다 첫 문자는 대문자이어야 한다
HouseName, CamelCase
첫문자는 소문자이되, 다음 단어의 첫문자는 대문자이어야 한다. getBackGround(), runFast()
정수 : int, long(큰 숫자, 숫자 끝에 L붙여야함.)...
실수 : float(숫자 끝에 F붙여야함), double(소숫점많은거)..
증감연산 : i++(다음 라인부터 증가), ++i(지금 라인부터 증가)
참 거짓을 나타내는 자료형
char -> 한단어의 문자만 저장가능
char name = 'k' // ''로 감싸야함
String a = "yaho"; // 리터럴 표기
String b = new String("Yaho")
두가지 모두로 선언 가능함.(첫번째를 추천) new 키워드는 새로운 객체를 생성할때 새용된다.
리터럴 표기란 객체 생성 없이 고정된 값을 그대로 대입하는 방법이다.
int, float, double, long, boolean, char 등을 원시 자료형이라 하고, 이러한 원시 자료형들은 리터럴 표기로만 값을 세팅할 수 있다. String은 자바에서 new 키워드를 이용하여 새로운 객체를 생성하는 방식으로도 사용할 수 있도록 특별 대우해주는 자료형이다.
원시 자료형 -> Wrapper 클래스
int -> Integer
long -> Long
double -> Double
float -> Float
boolean -> Boolean
char -> Char
프로그래밍을 하다 보면 기본 타입의 데이터를 객체로 표현해야 하는 경우가 있다. 리터럴로 밖에 표현할 수 없는 원시 자료형을 객체로 다루기 위해 사용하는 클래스를 wrapper 클래스라고 한다.
두 문자열이 동일한지 비교하여 결과값을 리턴한다. (==와 다름)
String a = new String("happy new year");
String b = "happy new year";
System.out.println(a == b); // false
System.out.println(a.equals(b)); //true
==는 두가지가 동일한 객체인지를 판별할 때 사용하는 것이기 때문에 false가 나온다.
문자열에서 특정문자가 시작되는 위치를 리턴한다.
String a = "happy new year";
System.out.println(a.indexOf("new")); // 6
문자열에서 특정 문자가 포함되어 있는지를 리턴한다.
String a = "happy new year";
System.out.println(a.contain("year")); // true
문자열에서 특정 위치에 어떤 문자가 위치해있는지를 리턴한다.
String a = "happy new year";
System.out.println(a.charAt(8)); // e
문자열 중 특정 문자열을 다른 문자열로 교체해준다.
String a = "happy new year";
System.out.println(a.replaceALl("year","day")); // happy new day
문자열 중 특정 위치를 뽑아낼때 사용한다.
String a = "happy new year";
System.out.println(a.substring(0,5)); // happy
문자열을 모두 대문자로 바꿀 때 사용한다.
String a = "happy new year";
System.out.println(a.toUpperCase()); // HAPPY NEW YEAR
String a = "happy new year";
String[] result = a.split(" ");
// result ={"happy", "new", "year"}
System.out.println(String.format("I have %d apples",3));
System.out.printf("I have %d apples", 3);
// I have 3 apples.
%d - int
%f - float
%c - char
%s - 모든 자료형 다 됨.
%10s - 10칸 띄우고 문자 대입
%-10s - 문자 대입 후 10칸 띄움
%.4f - 소숫점 넷째 자리까지