1. JAVA / ( Part 01. Hello World! | java handbook)
1) 언어의 역사
- 컴퓨터와 소통하기 위해 기계 명령어와 일상 용어를 일대일로 매칭하는 기계어와 니모닉의 매칭 코드표를 만듦.
- 이를 우리는 '어셈블리'라고 얘기함.
- 어셈블리어가 등장하고 개발자들은 편해졌으나, 개선되어야할점이 많았음.
- 어셈블리가 CPU마다 언어가 다 다르니, 배워야할 언어가 너무 많아져 버린 것임. 어셈블리어를 개발할 때는 같은 작업을 수행하는 소스 파일을 각 기계의 종류만큼 만들어야 했었음.
- 그리하여 C 언어가 등장하게됨. 언어의 등장으로 이제는 소스파일을 단 하나만 만들어도 되는 시대가 됨.
- C 언어는 하나의 소스파일을 각 기계어에 맞는 컴파일러로 컴파일을 하여 기계어 목적파일을 만듦. > 개발자는 소스파일이 동작하는 기계에 상관없이 개발 가능해짐. (운영체제별 특징 때문에 소스 코드 수정은 필요했음)
2) JAVA
- JAVA는 객체 지향 프로그래밍 언어 및 소프트웨어 플랫폼이다.
- JAVA의 규칙과 구문은 C와 C++ 언어를 기반으로 한다.
- JAVA의 큰 장점은 이식성이다. 한 번 작성하면 어디서나 실행할 수 있다는 것이다.
- 자바는 객체지향 언어임. 객체지향 언어의 중심에는 클래스(Class)가 있음. C++은 클래스 없이도 개발이 가능하기 때문에 객체지향지원언어이고, 자바는 객체지향 언어임. 자바는 개발의 시작과 끝 모두 클래스에서 시작하고 클래스에서 끝남.
- 프로그램이시작하는 main() 메서드로만 예를 들자면, JAVA는 무조건 클래스 내부에 존재해야함.
- 자바는 컴파일 언어이다. 소스파일 전체를 컴파일 한 후 기계어를 CPU와 메모리를 통해 읽어서 바로 실행한느 방식으로 동작이 되는 언어이다. (C, C++, C#, JAVA) <-> 반대로는 인터프리터 언어가 있다. 소스코드 한줄 씩 번역하며 실행하는 언어로 파이썬, JS 등이 있다.
3) 자바의 작동 방식
- JAVA는 프로그래밍 언어와 소프트웨어 플랫폼 모두 사용하는 기술이다.
- JDK(자바개발키트)를 다운로드하여야한다.
- JAVA 프로그래밍 언어로 프로그램을 작성 > 컴파일러가 프로그램을 JAVA 바이트코드로 변환> JAVA바이트코드는 JAVA 런타임 환경(JRE)의 일부인 JavaVirualMachine(JVM)을 위한 명령어 집합이다. Java 바이트 코드는 JVM을 지원하는 모든 시스템에서 수정없이 실행 되므로, JAVA 코드를 어디서나 실행 가능하다.
- JVM은 JAVA 바이트 코드를 구문 분석하고 실행, 해석한다.
- JAVA API는 기본 객체, 네트워킹 및 보안 기능, 확장 가능한 마크업 XML 생성, 웹서비스를 포함하는 광범위한 라이브러리 세트로 구성됨.
2. SPRING
1) 스프링 프레임워크
- Spring Framework는 모든 종류의 배포 플랫폼에서 최신 Java 기반 엔터프라이즈 애플리케이션을 위한 포괄적인 프로그래밍 및 구성 모델을 제공함.
- Spring의 핵심 요소는 애플리케이션 레벨의 인프라 지원
- Spring은 엔터프라이즈 애플리케이션의 "plumbing"에 중점을 두어 팀이 특정 배포 환경에 불필요한 연결을 끊지 않고 애플리케이션 수준의 비즈니스 로직에 집중할 수 있도록 함.
- 전통적인 자바 애플리케이션 개발을 지원하는 포괄적인 애플리케이션 프레임워크임.
> 장점
- 복잡한 만큼 유연성이 좋다. 필요한 모듈만 선택적으로 사용하여 세부적인 제어가 가능하다.
- 확장성이 좋다. 다양한 기술과 통합이 가능하다.
- 의존성 관리를 할 수 있다. 라이브러리를 수동으로 설정하거나 Maven, Gradle을 사용해 관리할 수 있다.
> 단점
- 구성파일이 필요하다. XML, JAVA 기반 설정을 통해 Bean을 구성하여 애플리케이션을 설정해야 한다.
- 설정이 복잡하다.
따라서, 사용자가 설정 및 제어를 직접 관리해야하는 복잡하고 세부적인 요구사항이 많은 애플리케이션에 적합하다.
2) Spring Boot
- spring framework를 기반으로 한 생산성 중심의 프레임 워크임.
- 애플리케이션의 설정 복잡성을 줄이고 개발 시간을 단축하는 데 중점을 둠.
- 스프링과 차이점은, 내장서버를 지원한다는 것이다. 자동설정(어노테이션)을 사용하면 대부분 설정이 자동으로 처리 되며, 의존성 간소화, 설정파일 단순화(application.properties), 배포 간소화(JAR파일), Actuato 도구를 제공해준다.
- 스프링부트에도 의존성 관리가 있다. 다양한 기능을 위한 기본적인 의존성 모음을 제공한다. 자동의존성 관리가 간으하다. 의존성 관리의 버전도 자동으로 관리해 주기 때문에, 개발자는 특정 버전을 일일이 설정할 필요 없이 모든 라이브러리 버전이 호환되도록 자동으로 관리된다.
따라서, 빠르게 프로토타입을 제작하거나, 설정부담을 줄이고 개발속도를 높이고 싶은 웹 애플리케이션 개발에 적합하다.
- 시작 전, JDK 와 JRM에 대한 차이를 알아보자. JDK 는 Java Development Kit로 사람이 작성한 소스 코드를 번역하여 컴퓨터가 이해할 수 있는 바이트 코드로 변환하는 도구인 Java 컴파일러가 포함 돼 있음. JRE는 컴파일 된 어플리케이션을 실행하는 역할을 함. JVM(자바가상기계)이 설치되어 있다면 java 애플리케이션을 실행할 수 있다.
3. JAVA 변수
1) Java Hello world 작성해서 출력하기
public class Test {
public static void main(String[] args) {
System.out.println("HELLO, WORLD");
}
}
C:\Users\ㅁㅁㅁ\.jdks\openjdk-23.0.1\bin\java.exe "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2024.3.1.1\lib\idea_rt.jar=52541:C:\Program Files\JetBrains\IntelliJ IDEA 2024.3.1.1\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath C:\Users\박신영\Desktop\Test\Codingexam\out\production\Codingexam test
HELLO, WORLD
Process finished with exit code 0
2) 변수
① 변수란?
- 단 하나의 값을 저장할 수 있는 메모리 공간을 뜻함.
- 변수 공간에 기록된 값은 고정되어 있지 않고, 다른 값이 기록되면 자동으로 덮어 씌워질 수 있음.
- 메모리공간은 기초단위인 1Byte로 구성. 메모리 공간은 각각 구분될 수 있도록 메모리 주소를 가지고 있음.
- 메모리에 값을 저장하거나 읽을 때 해당 메모리 주소를 사용해야함.
- 특정 메모리 영역에 이름을 붙이고 주소 대신에 이름을 사용해서 메모리에 값을 저장하고 읽을 수 있게 한것이 변수임.
② 변수의 선언
// 변수타입 변수이름
boolean flag;
byte val;
char grade;
double score;
③ 생성 규칙
- 대소문자가 구분되며, 길이에 제한 없음.
- 예약어 사용 불가, 숫자로 시작 불가, 특수문자 _,$ 제외하고 불가
④ 변수의 여러가지 형태
- Camel case varTest
- Snake case var_test
- Pascal case VarTest / 클래스명만 대문자로 시작하자는 암묵적인 규칙이 있음.
- Kebab case var-test / 변수명에 기호 - 사용불가임.
⑤ 변수의 초기화
- 변수타입 변수이름 = 값;
boolean flag = false;
char grade = 'A';
byte val = 127;
3) 변수의 종류
- 클래스
- 인스턴스
- 지역변수
4. 상수와 리터럴
1) 상수
- 한 번만 값이 저장 가능한 변수
final 변수타입 변수이름;
2) 리터럴
- 그 자체로 값을 의미하는 것
- 기존의 상수와 같은 의미임. JAVA에서 '상수를 한 번만 값이 저장 가능한 변수' 라는 의미로 사용하기 때문에 이를 구별하기 위해 사용하느 용어.
3) 변수, 상수, 리터럴 구별하기
int score = 100;
final int finalScore = 1000;
- score: 변수 / 100,1000: 리터럴 / finalScore: 상수
4) 리터럴의 접두사와 접미사
- 정수형: byte, short, int, long / long 타입은 구분을 위해 100L 처럼 접미사를 붙임
- 실수형: float, double / float는 f, double은 d가 붙음.
5) 변수와 리터럴의 타입 불일치
① 변수 > 리터럴
int i = 'A'; // int > char, 'A' = 65
long l = 123; // long > int
double l = 3.14f; // double > float
② 변수 < 리터럴
int i = 30_0000_0000; // int의 범위(대략 20억)를 넘습니다.
long l = 3.14f; // long < float
//long(8bye), float(4byte)라 가능할 것 같지만
//실수형은 정수형 보다 저장 범위가 훨씬 넓기 때문에 Error가 발생합니다.
float f = 3.14; // float < double;
③ byte, short 변수에 int 리터럴 저장 ok
5. 기본형
1) 메모리에 값이 저장되는 방법
- 10진수를 저장하면 컴퓨터는 이를 2진수로 변환하여 메모리에 저장함.
2) 문자가 저장되는 과정
- 문자를 표현하기 위해 문자와 숫자를 매칭하는 아스키 코드를 만듦. A = 65.
- 아스키코드 : 알파벳, 숫자, 특수기호, 그 외 컴퓨터에 필요한 몇 가지만이 저장
- 유니코드: 각 나라별 언어를 모두 표현하기 위해 나온 코드 체계
- UTF-8: 유니코드를 사용하는 인코딩 방식 중 하나. 영문/숫자/기호는 1바이트, 한글/한자 는 3바이트로 표현, 전세계 모든 글자들 한꺼번에 표현 가능.
3) 정수형 오버플로우
- 정수형은 변수타입의 최솟값, 최댓값 범위를 넘어가면 값을 순환함.
오늘의 회고
SQL을 걷기반을 끝냈는데 큰산인 JAVA가 있다 ㅎㅎ...
이전에 Ptyhon 언어를 배운적도 있고, 자바도 모바일 프로그래밍 들을 때 배웠어서 괜찮겠지~ 했는데!! 읽어야할 자료가 너무나도 많았다.
다행스럽게도 걷기반 JAVA문제는 쉬웠지만 ,,,
할 게 너무 많다 ㅜㅡㅜ.
사전캠프라고 해서 거창한 강의는 바라지는 않았으나, 혼자서 알아가야할 것이 너무 많은 거 같다.
난 일단 배웠던게 있으니 그나마 전진이 가능한데. 정말 SQL 초보이시거나, 코딩이 처음이신 분들은 힘드실 거 같다 ^ㅡ^..
우리 팀원분들은 다들 잘 하시는 거 같아서 다행이긴 하다 !
앞으로 할 것은
1. 먼저 JAVA 응용 문제를 다 풀고,
2. SQL 강의를 듣고
3. WEB 강의를 듣고
4. 다시 자바 공부하고 ..
이 순서대로 공부를 할 예정인데. 일단 응용 문제를 이번 주 안까지 하는 게 목표이다.
팀원분들이 설날에도 공부하자하셔서 설날에 강의를 많이 들어둬야겠다 ^ㅡ^.. Fetch 내용도 있던데 그건 너무 듣고 싶다.
일단.. 자바부터 다 풀자 ... 힝
'백엔드 부트캠프[사전캠프] > TIL' 카테고리의 다른 글
[내일배움캠프-사전캠프 06일차] SQL 3주차, 4주차 강의 (0) | 2025.01.27 |
---|---|
[내일배움캠프-사전캠프 05일차] SQL 수업 듣기 (2) | 2025.01.24 |
[내일배움캠프-사전캠프 04일차] 자바 공부 (1) | 2025.01.23 |
[내일배움캠프-사전캠프 02일차] SQL의 서브쿼리, DATEDIFF (1) | 2025.01.20 |
[내일배움캠프-사전캠프 01일차] SQL 기초 (0) | 2025.01.17 |