🦁멋쟁이사자처럼 백엔드 부트캠프 13기 🦁 에 합류하여 "백엔드 개발자"가 되는 것을 목표로
TIL 회고를 작성해나가고자 합니다! 😉
🚀본격적인 1일차에서는 "자바 탄생 배경"과 "자바의 기초"등을 배웠습니다📖
<자바의 시작>
자바가 만들어질때 인기있는 키워드는 “인공지능” 이었습니다.
인공지능이라고해도 가전제품에 프로그램을 넣어보겠다는 시도에서 발생한 키워드였습니다.
가전제품에 프로그램을 적용하기 위해서는 빨리 개발해야 했습니다.
이미 만들어진 객체들(=물체들)을 가져와 쓰는 즉, “재사용”이 필요했을 겁니다.
이것이 바로 "객체지향언어"인 자바의 특징입니다.
제품에 빠르게 프로그램을 탑재하기 위한 목표로 인해
(네트워크에 강해졌고, 재사용성이 중요해졌으며, 플랫폼에 독립적)이었습니다.
JVM (자바 가상 머신 Java Virtual Machine)도 그래서 등장한 것인데,
그래서 가전제품과 개발자가 만든 프로그램의 중간에 JVM을 둬서
JVM만 맞으면 어디에서든 실행될 수 있게 만든 겁니다. (=플랫폼에 독립적)
❓가비지 컬렉터
: 다른 언어에서는 메모리의 관리를 직접해주어야하는 경우도 있는데,
자바는 메모리의 관리를 알아서 해주는 '가비지 컬렉터'를 두었습니다.
어느 시점에 가비지 컬렉터가 돌면서 "잘쓰고있지 않은 메모리가 있으면 회수"를 해주는 역할을 해줍니다.
❓ 애플릿
: 큰 프로그램에서의 간단한 기능을 하는 "작은 프로그램" 이거나
웹 페이지에 포함되어 "작은 기능을 수행하는 프로그램"을 말합니다.
웹 브라우저, 제어판과 같은 "다른 프로그램에서 실행되는 소프트웨어 구성 요소"
컴퓨터 프로그램과 달리 애플릿은 "독립적으로 실행될 수 없습니다"
ex. 자바 애플릿, 플래시 동영상, 인터넷 익스플로러의 윈도우 미디어 플레이어 등
자바는 가장 처음에 "애플릿"이라는 기술로 보여줬습니다.
자바를 브라우저로 넘겨, 브라우저에서 실행되게 해주는 기술로 활용되었었는데,
브라우저는 용량이 제한되어있어 JAVA가 실행되어도 속도가 매우 느린 특징을 가지고 있었습니다.
이처럼 브라우저가 사용되는 프론트엔드에 사용되는 언어로써는 부족하겠지만
서버를 다루는 백엔드 언어로 보여줬습니다.
❓절차지향언어와 객체지향언어의 차이
객체지향언어가 널리 알려지기 전에는 절차지향언어로서 본인이 만든 객체, 예를 들어 "밥통"이 최고라고 생각해서
객체를 본인이 직접 만드는 절차지향언어 특징으로써는 객체를 빌려쓰는 객체지향언어로 넘어가는 과정이 어려웠을겁니다.
세상에 수많은 객체들이 있지만 그것들을 다 만들기보단 가져다 쓴다고 생각하면 객체지향언어가 효율적일 것입니다.
💡이미 만들어진 것들을 통해 도입하여 얼마나 잘 가져다 이용할 수 있느냐가 핵심입니다.
💡객체지향 잘한다는것 ? = 잘 갖다쓰는 것
💡자바는 객체지향언어로써 어떻게 잘 가져다가 이용할 수 있느냐에 대한 “이용법”을 배우는 언어인 것입니다.
<자바 구축하기>
❓프레임워크
: 자바 스프링 등 자바 사용에 있어서 유용한 기능을 제공하는 것을 말합니다.
<자바의 버전>
자바는 버전이 다양하지만 자바 8이후부터는 "모던 자바 (Modern Java)"라고 불리며 다양한 기능이 많이 추가되었습니다.
👀자바 8 이후 문법 : 람다(Lambda), 스트림(Stream), 병렬API 등
이 글을 작성하는 지금은 자바 21이 LTS를 지원하는 최신에 가까운 버전입니다.
<자바 환경변수 설정하기>
자바가 실행될 때 환경변수의 Path에서는 가장 위에 있는 실행할 수도 있으므로,
%JAVA_HOME%\bin
JAVA_HOME은 가장 위로 이동시킵니다.
여기서 bin의 의미는 JDK 21이 설치된 폴더 안의 bin에서 java.exe, javac.exe, javadoc.exe 가 작동되고 있으므로
java나 javac같은 명령어를 어느 디렉토리에서도 쓰고 싶은 경우 추가해주는 겁니다.
따라서 CMD 명령프롬프트에서 "C:" 로 지정되어있거나 다른 경로로 지정되어있어도
java나 javac 같은 명령이 잘 동작하게 됩니다.
<자바 IDE>
이클립스와 IntelliJ 가 많이 쓰이지만, 많은 기업들이 IntelliJ를 사용하고 있습니다.
<자바의 특징>
public class HelloJava {
public static void main(String[] args) {
System.out.println("자바 기본 연습");
}
}
public class HelloJava 의 기본 형식은 ( 접근제한자 예약어 식별자 )
예약어가 class이면 식별자는 ‘클래스명’이 오는 것입니다.
❓접근제한자
private : 나만 쓸 수 있음 (외부에서 사용될 수 없도록합니다)
default : 같은 패키지에 소속된 클래스에서만 사용가능
protected : 패키지는 되고, 부모를 상속받은 자식까지도 쓸 수 있음
public : 접근 제한이 없습니다.
<클래스 이름 규칙>
1. 단어가 하나일 경우
public class Apple{
}
첫글자는 대문자로 시작합니다.
2. 단어가 여러개일 경우
public class myProfile{
}
두번째 단어의 첫글자를 대문자로 표기합니다.
이경우 Camel 표기법라고 하는데 마치 낙타의 등과 같다 하여 붙여진 이름입니다.
다른 표기법으로는 Snake 표기법이 있는데 a_1, a_test 처럼 언더바를 이용하는 표기법입니다.
이처럼 언더바(_)를 이용하는 언어들이 있지만 자바는 myProfile 처럼 카멜 표기법을 이용합니다.
⭐자바는 카멜표기법으로 쓰는 이유
: “대소문자를 구분하는 언어”이기 때문에 같은 단어를 써도
대문자로 쓰여진것과 소문자로 쓰여진 단어가 각각 다르게 인식되어 중요합니다.
👀파이썬은 둘다 사용하기도합니다.
👀데이터베이스는 대소문자를 구분하지 않기때문에 언더바(_) - Snake 표기법를 씁니다.
public class HelloJava {
public static void main(String[] args) {
System.out.println("자바 기본 연습");
}
}
다시 코드를 보면 여기서 main 메소드는 "시작점"을 의미합니다.
모든 객체(=클래스)가 main 메소드를 가질 필요는 없습니다.
예를 들면 전기밥솥의 “시작”버튼이 main 메소드인것이고, 밥을 취사하는 것 등의 일을 하는 것들이 객체(=클래스)인 것입니다.
시작점이므로 main에서부터 한줄씩 실행시켜나갑니다.
위의 코드는 사람이 알아들을 수 있는 “자연어”이고, 컴퓨터는 0과 1만 이해하는 “기계어”입니다.
따라서 위 코드를 컴퓨터가 이해하도록 하려면 자연어를 기계어로 통역-번역하는 역할이 있어야하는데
그 역할을 하는 것이 “컴파일러”과 “인터프리터”입니다.
두 방식은 사뭇 다른 특징을 가집니다.
인터프리터 : 한줄 씩 번역해나가는 방식, 플랫폼과 상관없이 실행이된다.
컴파일러 : 한번에 번역하는 방식, 속도는 빠르다, 플랫폼이 다르면 다시 컴파일 해야한다.
<System 클래스>
자바의 기본 패키지는 java.lang 인데, 이 안에 System클래스가 있습니다.
위처럼 계층구조로 되어있습니다.
java.lang.패키지에 있는 Object 클래스를 System클래스가 "상속받고있다"는 의미입니다.
public final class System extends Object
- final : 클래스에 final이 붙었다는 것은 더이상 상속을 하지 않음을 의미
다른 클래스가 System클래스를 상속받지 못함
System.out.println("Hello");
- System클래스가 가진 “필드 out”, 이 필드 out이 가진 println()메소드를 가지고 출력하는 것
System.out 까지는 “콘솔”을 의미합니다. 뒤에 오는 메소드에게 “그 동작을 해달라”는 명령을 내립니다.
여기서는 println()메소드가 왔으므로 "화면에 출력하라"라는 명령을 내리게 됩니다. 이는 “표준 출력 장치”를 의미합니다.
👀System.in : "표준 입력 장치"을 의미하며, 키보드로 입력받을 수 있습니다.
- PrintStream의 out은 static final 로 정의되어있는데 이 static은 프로그램이 실행될때 메모리에 바로 담기게됩니다.
- static키워드가 붙지않은 것들은 인스턴스를 만들어 써야합니다.
<클래스 실체와 인스턴스>
- 클래스로 정의된 것들은 “실체”가 아니라 “설계도 이자 틀”이다. ex. 컵을 어떻게 만들 것이다 라는 설계도를 그렸다. = 클래스 하지만 이 설계도로 물을 따를 순 없을 것이다. = 실체가 아님
실체를 가지는 인스턴스를 만드는 방법은
Hello h = new Hello();
- Hello클래스 타입을 가진 인스턴스를 'h'라는 참조변수로 참조하여 생성해주겠다는 의미입니다.
// 전체코드
public class Hello{
static String name = "Jun";
public static void main(String[] args){
System.out.println("Hello");
Hello h = new Hello();
}
}
❓System클래스는 정의되어있지 않은데 System.out.println() 처럼 쓰이는 이유
System클래스는 static으로 정의되어있기때문입니다.
따라서
String name = "Jun";
이를 main메소드 안에서 사용하고자 한다면, static 키워드를 지정해주어야 main 메소드 안에서도 사용이 가능합니다.
<static 키워드>
- 정적, 고정된 이라는 뜻을 가진 static은 클래스에 고정되어 있는 변수나 메소드입니다.
프로그램이 시작되면 메모리 static 영역에 고정적으로 적재되고, 프로그램이 종료될때 해제되는 특징을 가집니다.
public class bottle{
public static void main(String[] args){
int water = 5;
System.out.println(water);
}
}
- 자바는 값을 그릇에 담을때 (water = 5) 는 항상 “타입”(int water)을 먼저 선언해주어야합니다.
▶️실습
본인의 이름, 성별, 이메일 주소를 출력하는 클래스를 작성하고 컴파일하고 실행한다.
👀vi 명령어를 통해 실습 완료
- touch MyInfo2.java // MyInfo 클래스 만들기
- vi MyInfo2 // MyInfo2파일 수정하기
- I (알파벳 i) // 눌러서 수정모드로 진입
- 코드 작성
- ESC // 수정모드 종료
- :wq // 저장 및 나가기
- cat MyInfo2.java // 파일의 내용 한번 확인해보기
- javac MyInfo2.java // 컴파일 하기
- java MyInfo2 // 실행해보기
<단축키 및 팁>
▶️ 폴더에서 주소표시줄에 cmd를 입력하게되면 그 위치의 명령프롬프트가 실행됩니다.
- javac : 명령, java 컴파일러를 의미. 확장자도 포함해주어야한다.
컴파일이 성공하면 오류메시지 없이 Hello.class 파일이 생성된다.
javac Hello.java
- java : 명령, JVM(자바 가상 머신)을 의미하며, 확장자를 포함하지 않는다.
java Hello
▶️ Ctrl + Shift + / (슬래시) : 구간 주석처리 /* … */
▶️ Ctrl + Shift + L : 겹치지 않게 키맵 shortcut을 설정해주었음. Javadoc 주석처리 단축키
💡개인 설정이므로, Settings → Keymap → fix doc comment 검색 → 우클릭 → Add Keyboard Shortcut 을 해주어야함
▶️ Alt + Shift + R : Rename 명령어, Refactor에서 Rename하는 명령어를 단축키로 접근가능
💡 자바의 기초에 대해 배운 1일차이지만, IntelliJ 단축키나 자바의 탄생 배경 등을 다시 알 수 있어서 좋은 학습이 되었습니다!
'Recording > 멋쟁이사자처럼 BE 13기' 카테고리의 다른 글
[멋쟁이사자처럼 부트캠프 TIL 회고] BE 13기_6일차_'상속과 메소드 오버라이딩' (1) | 2024.12.09 |
---|---|
[멋쟁이사자처럼 부트캠프 TIL 회고] BE 13기_5일차_'메소드, 필드, static' (3) | 2024.12.06 |
[멋쟁이사자처럼 부트캠프 TIL 회고] BE 13기_4일차_'객체지향프로그래밍' (1) | 2024.12.05 |
[멋쟁이사자처럼 부트캠프 TIL 회고] BE 13기_3일차_'배열과 객체' (1) | 2024.12.04 |
[멋쟁이사자처럼 부트캠프 TIL 회고] BE 13기_2일차_'자바 기초와 문법' (0) | 2024.12.03 |