Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자바의 정석 기초편 ch8
- 자바의 정석 기초편 ch4
- 스프링 db2 - 데이터 접근 기술
- 스프링 mvc1 - 스프링 mvc
- 자바의 정석 기초편 ch1
- jpa - 객체지향 쿼리 언어
- 스프링 입문(무료)
- 자바의 정석 기초편 ch5
- 자바의 정석 기초편 ch3
- 스프링 고급 - 스프링 aop
- 2024 정보처리기사 수제비 실기
- 스프링 mvc2 - 로그인 처리
- 스프링 db1 - 스프링과 문제 해결
- 게시글 목록 api
- 자바의 정석 기초편 ch12
- jpa 활용2 - api 개발 고급
- 스프링 mvc2 - 검증
- 자바의 정석 기초편 ch7
- 코드로 시작하는 자바 첫걸음
- 자바의 정석 기초편 ch6
- 스프링 mvc2 - 타임리프
- 자바의 정석 기초편 ch11
- 자바의 정석 기초편 ch2
- 자바의 정석 기초편 ch14
- 타임리프 - 기본기능
- 2024 정보처리기사 시나공 필기
- 자바의 정석 기초편 ch13
- 스프링 mvc1 - 서블릿
- 자바의 정석 기초편 ch9
- @Aspect
Archives
- Today
- Total
나구리의 개발공부기록
코드로 시작하는 자바 첫걸음1, 자바란, 변수, 연산자 본문
출처 : 인프런 - 자바 입문 - 코드로시작하는 자바 첫걸음 (무료) / 김영한님
** 참고
- 매우 기초적인 내용이기때문에 전체 내용이아닌 특별히 작성해야할 내용이나 중요한 내용만 작성
- 자바기초에 대해서 디테일한 내용은 자바의 정석 기초편을 포스팅한 글들을 참고하는 것을 권장함
1. 자바란
1) 자바 표준 스펙과 구현
- 자바는 표준 스펙과 구현으로 나눌 수 있음
(1) 자바 표준 스펙
- 자바를 어떻게 만들어야 한다는 설계도이며 문서이며 이 표준 스펙을 기반으로 여러 회사에서 작동하는 자바를 만듦
- 자바 표준 스펙은 자바 커뮤니티 프로세스(JCP)를 통해 관리됨
(2) 다양한 자바 구현
- 여러 회사에서 자바 표준 스펙에 맞추어 실제 작동하는 자바 프로그램을 개발하며 각각의 장단점이 있음
- 예를 들면 Amazon Corretto는 AWS에 최적화되어있는 등의 특징이 있음
- 각 회사들은 대부분 윈도우, MAC, 리눅스 같이 다양한 OS에서 작동하는 버전의 자바도 함께 제공함
- 자바 선택 가이드
(3) 변경의 용이
- 자바의 구현들은 모두 표준 스펙에 맞도록 개발되어 있기 때문에 다른 회사의 자바로 변경해도 대부분 문제 없이 동작함
- 학습 단계에서는 어떤 자바를 사용하든 크게 상관이 없음
2) 컴파일과 실행
- Hello.java와 같은 자바 소스 코드를 개발자가 작성
- javac라는 자바 컴파일러를 사용해서 .class라는 파일이 생성되고 소스 코드를 컴파일함
- 컴파일을 하면 소스코드를 바이트코드로 변환하고 JVM에서 더 빠르게 실행될 수 있게 최적화하고 문법 오류도 검출함
- JVM이 실행되면서 프로그램이 작동함
(1) IDE와 Java
- 인텔리제이는 내부에 자바를 편리하게 설치하고 관리할 수 있는 기능을 제공하기 때문에 해당 기능을 사용하면 별도의 자바 설치없이 인텔리제이로 쉽게 자바를 다운로드 및 실행할 수 있음
- 자바 언어를 배우는 단계에서는 이렇게 IDE의 도움을 받아 자바를 설치하는 정도로만 이해해도 되고 나중에 자바를 직접 설치하고 환경설정하는 부분은 따로 다룸
- IDE를 사용해서 자바 코드를 실행하면 컴파일과 실행을 모두 한번에 처리하기 때문에 매우 편리하게 자바 프로그램을 개발하고 학습할 수 있음(이클립스보단 인텔리제이가 훨씬 좋음)
(2) 컴파일
- 컴파일은 javac라는 프로그램을 직접 사용해야하는데 IDE를 사용하면 자바 코드를 실행할 때 자동으로 처리해줌
- 프로그램을 실행하면 인텔리제이는 out폴더에, 이클립스는 bin 폴더에 .class파일이 있음
- 터미널에서 실행할 경우 javac Hello.java 로 실행해야함
(3) 실행
- 자바를 실행하려면 java라는 프로그램을 사용해야하며 이때 컴파일된 .class파일을 지정해주면 됨
- 터미널에서 실행할 경우 java Hello 로 확장자를 제외하고 실행해야함
3) 자바와 운영체제 독립성
(1) 일반적인 프로그램
- 일반적인 프로그램은 다른 운영체제에서 실행할 수 없어서 각각의 운영체제에 맞는 프로그램을 실행해야함
- 이유는 윈도우 프로그램은 윈도우 OS가 사용하는 명령어들로 구성되어있기 때문에 해당 명령어는 다른 OS와는 호환되지 않기 때문임
(2) 자바 프로그램
- 자바 프로그램은 자바가 설치된 모든 OS에서 실행할 수 있음
- 자바 개발자는 특정 OS에 맞추어 개발을 하지 않아도 되고 자바에 맞추어 개발하면 됨
- OS 호환성 문제는 자바가 해결하고 컴파일된 자바 파일은 모든 자바 환경에서 실행할 수 있음
- 각 OS에 맞는 자바만 설치만 하면됨
(3) 운영체제 독립성
- 개발할 때의 자바와 서버에서 실행할 때 다른 자바를 사용할 수 있음
- 개발 편의를 위해 개발자들은 위도우나 MAC OS를 주로 사용하며 서버는 주로 리눅스를 사용하기에 만약 AWS를 사용한다면 리눅스 서버에 amazon Corretto 자바를 설치하여 최적화를 할 수 있음
- 자바의 운영체제 독립성 덕분에 각각의 환경에 맞추어 자바를 설치하는 것이 가능함
2. 변수
1) 변수 기본
- 값을 보관해두고 필요할 때 값을 꺼내서 읽을 수 있는 저장소이며 쉽게 비유하자면 데이터를 담을 수 있는 그릇
- 변수는 변할 수 있음
- 숫자를 저장할 수 있는 int 타입인 변수 a에 숫자 10을 저장
- 이렇게 선언한 변수에 처음으로 값을 대입해서 저장하는 것을 변수 초기화라 함
- 변수의 값은 반복해서 읽을 수 있으며 변수의 값을 읽는다고 값이 없어지는 것은 아님
public static void main(String[] args) {
int a; // 변수 선언
a = 10; // 변수 초기화
}
2) 변수 값 변경
- 변수는 위에서 설명했듯이 변할 수 있기 때문에 변수 a에 저장된 값을 언제든지 바꿀 수 있음
- 중간에 변수값을 바꿔서 출력하면 바뀐 값이 출력되고 변수의 값을 변경하면 변수에 들어있던 기존 값은 삭제됨
public static void main(String[] args) {
int a; // 변수 선언
a = 10; // 변수 초기화
System.out.println("a = " + a);
a = 50; // 변수 값 변경
System.out.println("a = " + a);
}
3) 변수 선언과 초기화
(1) 변수 선언
- 변수를 선언하면 컴퓨터의 메모리 공간을 확보해서 그곳에 데이터를 저장할 수 있으며 변수의 이름을 통해서 해당 메모리 공간에 접근할 수있음
- 즉 데이터를 보관할 수 있는 공간을 만들고 그곳에 이름을 부여함
(2) 변수 초기화
- 변수를 선언하고 선언한 변수에 처음으로 값을 저장하는 것을 변수의 초기화라고함
- 변수의 선언과 초기화를 각각 따로할 수 있고, 변수선언과 동시에 초기화를 할 수 있음
public static void main(String[] args) {
// 변수 선언과 초기화를 각각 따로
int a;
a = 10;
// 변수 선언과 초기화를 한번에
int b = 10;
int c = 3, d = 4; // 여러 변수 선언과 초기화를 한번에
}
(3) 변수는 초기화를 해야함
int e;
System.out.println("e = " + e); // 에러발생
- 변수를 초기화하지 않고 사용하게 되면 컴파일 에러가 발생함
- 컴퓨터에서 메모리는 여러 시스템이 함께 사용하는 공간이기에 어떠한 값들이 계속 저장되는데 변수를 선언하면 메모리상의 어떤 공간을 차지하고 사용함
- 그런데 그 공간에 기본에 어떤 값이 있었는지는 아무도 모르기 때문에 초기화를 하지 않으면 이상한 값이 출력될 수 있어서 이러한 문제를 예방하기 위해 자바는 변수를 초기화하도록 강제함
- 초기화하지않은 변수는 컴파일 단계에서 자동으로 최적화되어 사라짐
** 참고
- 지금 학습하는 변수는 지역변수라고하는데 지역변수는 개발자가 직접 초기화를 해주어야 하고 나중에 배울 클래스 변수와 인스턴스 변수는 자바가 자동으로 초기화를 진행해줌
- 컴파일 에러는 자바 문법에 맞지 않았을 때 발생하는 에러이며 컴파일 에러는 오류를 빠르고 명확하게 찾을 수 있기 때문에 좋은 에러임
4) 변수 타입1
(1) 변수 타입 종류
- int : 정수를 다룸 ex) 1, 100, 1000, -1000
- double : 실수를 다룸 ex) 0.2, 1.5, 100.121
- boolean : 불리언 타입으로 true, false값만 사용(참과 거짓을 판단하는 곳에서 사용)
- char : 문자 하나를 다룰 때 사용하고 작은 따옴표(')를 사용해서 감싸야 함 ex) 'A', '가'
- String : 문자열을 다루며 큰 따옴표를 사용해야 함 ex) "hello java"
** 참고
- String은 첫 글자가 대문자로 시작하는 특별한 타입이며 뒤에서 String에 대한 자세한 내용을 다룸
- 각 변수는 지정한 타입에 맞는 값을 사용해야하며 자동형변환이 되지 않는 값을 입력하면 에러가 발생함
(2) 리터럴
- 코드에서 개발자가 적은 100, 10.5, true, 'A', "Hello Java"와 같은 고정된 값을 프로그래밍 용어로 리터럴(literal)이라고 함
- 변수의 값은 변할 수 있지만 리터럴은 개발자가 직접 입력한 고정된 값이기때문에 변하지 않음
public static void main(String[] args) {
int a = 100; //정수 리터럴
double b = 10.5; //실수 리터럴
boolean c = true; //불리언 리터럴
char d = 'A'; //문자 하나 리터럴
String e = "Hello Java"; //문자열 리터럴
}
5) 변수 타입2
(1) 다양한 숫자 타입
- 메모리를 적게 사용하면 작은 숫자를 표현할 수 있고 메모리를 많이 사용하면 큰 숫자를 표현할 수 있음
- 즉, 변수를 선언하면 표현 범위에 따라 메모리 공간을 차지하기 때문에 필요에 맞도록 다양한 타입을 사용하면 됨
- 실수에서 float보다 double이 정밀도가 더 높으며 double이 기본형
(2) 정수형
- byte : -128 ~ 127 (1byte, 2^8)
- int : -2,147,483,648 ~ 2,147,483,647 (약 20억) (4byte, 2^32)
- long : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (8byte, 2^64)
- short : -32,768 ~ 32,767 (2byte, 2^16)
(3) 실수형
- float : 대략 -3.4E38 ~ 3.4E38, 7자리 정밀도 (4byte, 2^32)
- double : 대략 -1.7E308 ~ 1.7E308, 15자리 정밀도 (8byte, 2^64)
(4) 기타
- boolean : true , false (1byte)
- char : 문자 하나(2byte)
- String : 문자열을 표현. 메모리 사용량은 문자 길이에 따라 동적으로 달라짐
6) 변수 타입 정리
(1) 실무에서 거의 사용하지 않는 타입
- byte : 표현 길이가 너무 작음, 자바는 기본으로 4byte(int)를 효율적으로 계산하도록 설계되어있어서 int를 사용하는 것을 권장하며, byte타입을 직접 선언하고 숫자 값을 대입해서 계산하는 일은 거의 없음
- 대신 파일을 바이트 단위로 다루기 때문에 파일 전송, 파일 복사 등에 주로 사용됨
- short : 위와 동일함
- float: 표현 길이와 정밀도가 너무 낮아서 double을 사용함
- char : 문자 하나를 표현할 일이 거의 없고 문자 하나를 표현할 때도 문자열을 사용할 수 있어서 거의 사용안함
- 메모리 용량은 매우 저렴하기 때문에 메모리 용량을 약간 절약하기보다는 개발 속도나 효율에 초점을 맞추는 것이 더 효과적임
(2) 자주 사용하는 타입
- 정수(int, long) : 자바는 정수에 기본으로 int를 사용하고 20억이 넘을 것 같으면 long을 사용하면됨, 파일을 다룰 때만 byte를 사용
- 실수 : 고민없이 double을 사용
- 불린형(boolean) : true, false로 참 거짓을 표현하고 조건문에서 자주 사용됨
- 문자열(String) : 문자를 다룰 때는 문자의 개수가 하나이든 여러개이든 String을 사용하는 것이 편리함
- 자주 사용하는 타입을 제외하고 나머지를 실무에서 사용하는 경우는 거의 없기 때문에 자주사용하는 타입 외에는 그냥 넘어가도 충분함
7) 변수 명명 규칙
(1) 규칙
- 규칙은 필수이며 규칙을 지키지 않으면 컴파일 오류가 발생함
- 변수 이름은 숫자로 시작할 수 없음, 숫자를 이름에 포함하는 것은 가능함
- 이름에는 공백이 들어갈 수 없음
- 자바의 예악어를 변수 이름으로 사용할 수 없음
- 변수 이름에는 영문자, 숫자, 달러 기호, 밑줄 만 사용할 수 있음
(2) 관례
- 관례는 필수는 아니지만 전세계 개발자가 해당 관례를 따르기 때문에 사실상 규칙이라고 생각해도 됨
- 소문자로 시작하는 낙타 표기법을 사용
- 변수 이름은 소문자로 시작하는 것이 일반적임
- 여러 단어로 이루어진 변수의 이름의 경우 첫번째 단어는 소문자로 시작하고 그 이후의 단어는 대문자로 시작하는 낙타 표기법(camel case)를 사용함 (ex - orderDetail, myAccount)
- 클래스는 대문자로 시작하고 나머지는 소문자로 시작하며 낙타 표기법을 사용함(ex - OrderDetail)
- 상수는 모두 대문자를 사용하고 언더바로 구분함
- 패키지는 모두 소문자를 사용함
** 참고
- 변수 이름은 의미있고 그 용도를 명확하게 설명해야함
- 변수의 이름을 의미있게 짓는것은 실무에서 생각보다 중요함
3. 연산자
- 자바에는 다양한 연산자가 있기에 여기에서는 실무에서 주로 다루는 연산자 위주로 설명
- 연산자(operator) : 연산 기호
- 피연산자(operand) : 연산 대상
1) 산술 연산자
(1) 연산자 종류
- + : 더하기
- - : 빼기
- * : 곱하기
- / : 나누기
- % : 나머지
(2) 주의
- int div = 5 / 2의 결과는 2.5가 되어야하지만 소수점이 제거된 2가 나오는데 자바에서 같은 int형 끼리 계산하면 결과도 같은 int형을 사용하기 때문에 소수점 이하는 버림 처리가됨 -> 자세한 내용은 형변환에서 다룸
- 나머지 연산자는 이름 그대로 나눗셈의 나머지를 구하는 연산이며 5 / 2를 할 경우 나머지인 1을 반환함
- 나머지 연산자는 실무와 알고리즘 모두 종종 사용되기에 잘 기억해두어야 함
- 숫자는 0으로 나눌 수 없어(수학에서 허용하지 않음) 프로그램 오류가 발생함
2) 문자열 더하기
(1) 문자열 + 문자열
- 자바는 특별하게 문자열에도 + 연산자를 사용할 수 있음
- 문자열에 + 연산자를 사용하면 두 문자를 연결할 수 있음
//문자열과 문자열 더하기
String result1 = "hello " + "world";
System.out.println(result1);
/* 출력결과
hello world
*/
(2) 문자열 + 숫자
- 문자와 숫자를 더하면 숫자를 문자열로 변경한다음에 서로 더함
- 전체 결과가 문자열로 출력됨
//문자열과 숫자 더하기
String result3 = "a + b = " + 10;
System.out.println(result3);
/* 출력결과
a + b = 10
*/
(3) 문자열 + 숫자 계산 과정
- 계산 과정을보면 숫자가 문자열로 변경되는데 이를 자동 형변환이된다고 함
int num = 20;
String str = "a + b = ";
String result4 = str + num;
str(String) + num(int)
"a + b = "(String) + num(int) //str 변수에서 값 조회
"a + b = "(String) + 20(int) //num 변수에서 값 조회
"a + b = "(String) + "20"(int -> String) //숫자를 문자열로 변경
"a + b = " + "20" //문자열과 문자열 더하기
"a + b = 20" //결과
3) 연산자 우선순위
(1) 사칙연산의 우선순위
- 일반적으로 적용되는 사칙연산의 우선순위가 적용됨
- 수학과 마찬가지로 ()를 사용하면 ()를 사용한 곳이 먼저 계산됨
(2) 자바의 연산자 우선순위
- 괄호 : ()
- 단항 연산자 : ++, --, !, ~, new, (type)
- 산술 연산자: *, /, % 우선 그다음 + , -
- shift 연산자 : <<, >>, >>>
- 비교 연산자 : <, <=, >, >=, instanceof
- 등식 연산자 : ==, !=
- 비트 연산자 : &, ^, |
- 논리 연산자 : &&, ||
- 삼항 연산자 : ? :
- 대입 연산자 : =, +=, -=, *=, /=, %= 등등
(3) 연산자의 우선순위 암기법
- 대부분의 실무 개발자들은 연산자 우선순위를 외우지 않으며 딱 2가지만 기억하면됨
- 상식선에서 우선 순위를 사용(일반적인 사칙연산 우선순위)
- 애매하면 괄호()를 사용
- 누구나 코드를 보고 쉽고 명확하게 이해할 수 있어야 하기 때문에 개발자들이 연산자 우선순위를 외우고 개발하는 것이아니기에 복잡하면 명확하게 괄호를 입력하는 것을 권장함
- 연산자의 우선순위는 상식선에서 생각하여 적용하고 개발에서의 가장 중요한것은 단순함과 명확함이기에 애매하거나 복잡하면 안됨
4) 증감 연산자
(1) 설명
- 증가 및 감소 연산자를 줄여서 증감 연산자라고 함
- 증감 연산자는 ++와 --로 표현되며 변수의 값을 1만큼 증가시키거나 감소시킴
- 프로그래밍에서는 값을 1씩 증가하거나 1씩 감소할 때가 아무 많기 때문에 이런 편의 기능을 제공함
int a = 0;
++a; // a = a + 1과 동일
--a; // a = a - 1과 동일
(2) 전위, 후위 증감연산자
- 증감 연산자는 피연산자 앞에 두거나 뒤에 둘 수 있으며, 연산자의 위치에 따라 연산이 수행되는 시점이 달라짐
- ++a: 증감 연산자가 피연산자 앞에 있는 것을 전위 증감 연산자라함
- a++: 증감 연산자가 피연산자 뒤에 있는 것을 후위 증감 연산자라함
- 전위 증감 연산자는 증감 연산이 먼저 수행 된 후에 나머지 연산이 수행되고 후위 증감 연산자는 다른 연산이 먼저 수행된 후 증감 연산이 수행됨
- 증감 연산자를 단독으로 사용하는 경우에는 다른 연산이 없기 때문에 본인의 값만 증가하여 전위든 후위든 둘다 결과가 같음
// 전위 증감 연산자 사용 예
int a = 1;
int b = 0;
b = ++a; // a의 값을 먼저 증가시키고, 그 결과를 b에 대입
System.out.println("a = " + a + ", b = " + b); // 결과: a = 2, b = 2
// 후위 증감 연산자 사용 예
a = 1; // a 값을 다시 1로 지정
b = 0; // b 값을 다시 0으로 지정
b = a++; // a의 현재 값을 b에 먼저 대입하고, 그 후 a 값을 증가시킴
System.out.println("a = " + a + ", b = " + b); // 결과: a = 2, b = 1
// 다른 연산이 없기 때문에 둘다 1이 증가가 됨
++a;
a++;
5) 비교 연산자
- 두 값을 비교하는 데사용하며 주로 조건문과 함께 사용함
(1) 종류
- == : 동등성 (equal to)
- != : 불일치 (not equal to)
- > : 크다 (greater than)
- < : 작다 (less than)
- >= : 크거나 같다 (greater than or equal to)
- <= : 작거나 같다 (less than or equal to)
(2) 주의점
- = 과 == 은 완전히 다른 연산이기에 주의해야함(= 는 대입연산자로 변수에 값을 대입하는 것임)
- 비교 연산자를 사용하면 참(true) 또는 거짓(false)라는 결과가 나오기 때문에 boolean형으로 반환됨
- 불일치 연사는 !=을 사용하며 !는 반대(부정)이라는 뜻
(3) 문자열 비교
- 문자열이 같은지 비교할 때는 ==이 아니라 .equals() 메서드라는 것을 사용해야하는데 ==을 사용하면 성공할 때도 있지만 실패할 때도 있기 때문임
- 이부분을 지금 이해하기는 어려우므로 뒤에서 따로 다룸
6) 논리 연산자
- boolean형인 true, false를 비교하는데 사용함
(1) 종류
- && (and) : 두 피연산자가 모두 참이면 참을 반환, 둘 중 하나라도 거짓이면 거짓을 반환
- || (or) : 두 피연산자 중 하나라도 참이면 참을 반환, 둘다 거짓이면 거짓을 반환
- ! (not) : 피연산자의 논리적 부정을 반환 즉, 참이면 거짓을, 거짓이면 참을 반환
(2) 활용
- 연산자 우선순위로 비교 연산자가 먼저 진행되고 논리 연산자가 진행 됨
- a가 15일때 a > 10 의 조건과 a < 20 조건 모두를 만복하기 때문에 결과가 true가 나옴
- 방금과 같은 조건식의 경우 맨 아래처럼 작성하는 것이 가독성이 더 좋음
int a = 15;
//a는 10보다 크고 20보다 작다
boolean result = a > 10 && a < 20; //(a > 10) && (a < 20)
System.out.println("result = " + result); // 결과 true
// 이렇게 작성하는 것이 가독성이 좋음
boolean result = 10 < a && a < 20;
7) 대입 연산자
- 대입 연산자(=)는 값을 변수에 할당하는 연산자이며 값을 초기화할 때 사용함
- +=, -=, *=, /=, %= 처럼 축약(복합) 대입 연산자로 사용할 수 있음
inta=5; // 5
a+=3; // 8 (5 + 3) : a = a + 3
a-=2; // 6 (8 - 2) : a = a - 2
a*=4; // 24 (6 * 4) : a = a * 4
a/=3; // 8 (24 / 3) : a = a / 3
a%=5; // 3 (8 % 5) : a = a % 5
'인프런 - 실전 자바 로드맵 > 자바 입문 - 자바 첫걸음(무료)' 카테고리의 다른 글
코드로 시작하는 자바 첫걸음4, 배열, 메서드 (2) | 2024.11.02 |
---|---|
코드로 시작하는 자바 첫걸음3, 스코프 및 형변환, 훈련 (0) | 2024.11.01 |
코드로 시작하는 자바 첫걸음2, 조건문, 반복문 (1) | 2024.11.01 |