자바를 기반으로 한 통합 개발 환경 : 이클립스 (eclipse)
통합 개발 환경(IDE)이란 프로그래머가 소프트웨어 코드를 효율적으로 개발하도록 돕는 소프트웨어 애플리케이션.
이는 소프트웨어 편집, 빌드, 테스트, 패키징과 같은 기능을 사용하기 쉬운 하나의 애플리케이션에 통합하여 개발자 생산성을 높인다.
특징
- 대소문자 철저히 구분 |
- 프로그램의 기본단위는 클래스 class 이며 선언문, 명령문 등은 모두 클래스 내부에 존재해야함. |
- 클래스 이름은 파일이름과 동일해야 한다. 파일 이름: First 라면 클래스 이름: public class First { } 동일하게 |
- 한 클래스 안에 main(String[] args) 는 하나만 가능 - 세미 콜론은 문장 끝에 필수 public class First { public static void main(String[] args) { // 메인 메소드 System.out.print("Hello World!"); } } |
- 주석 한 줄 주석 : // 문장 주석 : / * (사이에 내용 넣으면 된다.) */ |
변수
기본형 (byte 기준)
고정된 길이의 메모리 값을 표현, 더 이상 쪼갤 수 없는 기본 단위
- 정수형 : byte(1), int(4), long(8), short(2), char(2)
- 실수형 : float(4), double(8 : 64bit)
- 진위형 : boolean (숫자값 표현 불가능, 오직 true 와 false 만 사용 가능)
참조형(기본형 8가지를 제외한 나머지)
Srtring, System 등 존재
선언하고 초기화한 후 사용
동적 타이핑이 아님 (동적 타이핑 : 데이터가 치환되어야 타입이 결정되는 것)
출력
system.out.print() ; : 괄호 안의 내용을 출력하고 줄바꿈을 하지 않음
system.out.println() ; : 괄호 안의 내용을 출력하고 줄바꿈을 함
// 문자열은 " " 만 가능하다
System.out.print("KITA DM 3기"); // 출력
System.out.println("2024년 1월 15일"); // 출력 + 줄 변경
System.out.println("월요일");
KITA DM 3기2024년 1월 15일
월요일
literal : 그 자체로 값을 의미하는
상수(constract : 값을 저장할 수 있는 공간) 와 같은 의미로 단어만 다른 것이다.
System.out.println(42.195); // 실수 literal
System.out.println(5 * 10); // 식
System.out.println(true); // boolean literal / 키워드
// 42.195 나 true 를 literal 이라고 부름
System.out.println(5 > 10);
System.out.println('강'); // 무조건 한글자만 // 문자 literal
System.out.println('♥');
종류 | 리터럴 | 접미사 |
논리형 | false, true | 없음 |
정수형 | 123, 0b0101 등 | L |
실수형 | 3.14, 3.0e8 등 | f, d |
문자형 | 'A', '1' 등 | 없음 |
문자열 | "ABC","123" 등 | 없음 |
문자열 string : 문자의 연속된 나열
- 선언 : byte b2;
- 초기화 : b2 = 0;
- 선언 + 초기화 : byte b3 = 0;
1) 연산에 맞는 데이터 타입에 맞게 넣어야 한다. (자바는 데이터 타입이 가장 중요)
byte b = -128; // 음수를 넣을 수 있는 가장 작은 값
short s = -32767;
int i = 16;
long l = 45; // 45L
long l2 = 45L;
// b = b + 1;
// b = 45 + 1 가능
// 연산에 맞는 데이터 타입에 맞게 넣어야 한다.
2) int는 char 안에 들어갈 수 없음
// char
char ch = 'a'; //97
ch = ch + 1; // 캐릭터 + 인트 = 인트가 됨 (큰 타입으로 맞춰짐) = 98 => 자동 형변환 (Promotion)
큰 데이터는 작은 변수안에 넣을 수 없다. 자바에서는 무조건 타입을 맞추려고 함.
* ch = (char)(ch+1); 강제 형변환 -> 하여 캐릭터 안에 넣을 수 있음 (Casting)
3) 큰 데이터는 작은 변수안에 넣을 수 없다.
char ch; // 변수의 선언
ch = 'a'; // 변수 초기화
//ch = ch +1; // char = 2byte , int = 4byte ==> 4byte + 4byte = 4byte(int)
// char 은 4 byte 보다 작기 때문에 들어갈 수 없다.
ch = (char)(ch +1); // int >> char 형 변환 (Caating)
System.out.println(ch);
_ 을 이용한 1000자리 표현
int value = 1_234_456_000;
System.out.println(value);
System.out.printf("%,d\n",value); // 다음 줄 붙어서 // 포맷형식 사용할때
System.out.println("끝!");
1234456000
1,234,456,000
끝!
실수형 표현
// 실수형 (float: 단정도, double: 배정도)
// 오차가 생길 수 밖에 없는 수 이기 때문에 double 을 기본으로 사용
float f1 = 4.1F;
double d1 = 4.1;
double d2 =0.000000123456;
System.out.println(d2); // 자동으로 공학용으로 바꾸어 출력됨
System.out.printf("%.15f\n",d2); // 출력하고자 하는 소수 자리를 제어
1.23456E-7
0.000000123456000
문자, 문자열
("%d\n",ch1) 은 문자이기 때문에 %d(정수형) 에 넣을 수 없음 >> (int)ch1 형 변환을 통해 사용
// printf 를 이용한 출력
char ch1 = 'a';
// System.out.printf("%d\n",ch1);
System.out.printf("%d\n",(int)ch1);
System.out.printf("%c\n",ch1); // 문자 1개 = c
System.out.printf("%s\n", "안녕하세요?"); // 문자열은 s
// %d, %f, %c, %s, %%, %n
// %,d, %.2f, %c, %10s
한글은 영어와 달리 2byte 를 사용하기 때문에 6칸을 사용함.
%10s 를 사용하면 열 칸의 자리를 단어 포함하여 가지게 된다.
String str = "손오공";
System.out.println("====================");
System.out.println("12345678901234567890");
System.out.println(str);
System.out.printf("**%10s**\n",str);
System.out.printf("**%-10s**\n",str); // 왼쪽정렬
====================
12345678901234567890
손오공
** 손오공**
**손오공 **
활용 예시
[문제] 반지름이 주어진 원의 면적을 구하는 프로그램을 작성하시오.
public class Class {
public static void main(String[] args) {
// = , +, -, * , /, %
// 원의 면적 = 파이 * r^2
int radius = 5;
final double PI = 3.14159; // 바꿀 수 없다 (final : 초기화 되면 값을 변경 할 수 없는 지정자)
// pi = 상수 변수 이기 때문에 upper_case 로 전부 대문자가 좋음
double area ;
// 계산
area = PI * (radius * radius); // 같은 연사자면 앞에 있는 연산자부터
// 소수점 이하 2자리까지 출력하시오
System.out.printf("%.2f%n",area);
// 반지름이 5인 원의 면적은 78.54 이다.
System.out.printf("반지름 %d인 원의 면적은 %.2f이다. %n",radius,area);
}
}
부호 비트 ( sign bit ) = MSB
2 진수 (컴퓨터 언어) 에서는 따로 음수와 양수를 표현할 수 있는 부호가 존재하지 않는다.
때문에 부호를 알기 위해 0 (양수), 1(음수) 로 표현 하게 되었다. 하지만 char 는 음수 표현 방법이 필요없기 때문에 사용하지 않는다.
양수 27 과 음수 27로 비교
27 + (-27) = 0 이 나와야함 하지만 더해보면?
# 1 : 부호 존재 + 절댓값 표현방식
0001 1011 (양수 27)
+ 1001 1011 (음수 27)
--------------------------------
1011 0110 => 0이 나오지 않게 된다.
표현은 가능하지만 연산은 되지 않는다.
# 2 부호 존재 + 1의 보수
0001 1011 (양수 27)
+ 1110 0100 (음수 27의 1의 보수)
--------------------------------
1111 1111
+ 1
--------------------------------
0000 0000 => 0은 나오지만 1을 후에 더한다는 번거로움이 존재
# 3 부호 존재 + 2의 보수 (1을 먼저 더한다)
저장, 연산 둘 다 가능하다.
0001 1011 (양수 27)
+ 1110 0101 (음수 27의 1의 보수 +1 = 2의 보수)
--------------------------------
0000 0000 => 현재 가장 많이 사용하는 연산 방식이다
문제
해당 문제는 같은 클래스의 한 main 안 에서 이뤄졌다.
[문제 1] 적정체중 구하기
출력문과 -, * 연산자만을 사용하여 적정체중을 구하여 출력하는 프로그램을 작성하시오
적정체중 = (키-100) * 0.9
예시: 키가 180 이라면 적정체중은 72.0
public class Exam_0115 {
public static void main(String[] args) {
double height = 180;
double weight;
weight = (height -100) * 0.9;
System.out.printf("키가 %,.0f 이라면 적정체중은 %.1f 이다. \n", height, weight);
System.out.println();
[문제 2]산술연산자를 이용한 계산식
개당 4300원인 사과가 있다. 사과의 개수는 2335 개가 있다면, 사과 도매상 13명이 한명딩 얼마를 내야하는가?
int price = 4300;
int total = 2335;
double totalPrice;
totalPrice = (price * 2335) / 13;
System.out.printf("한명당 %.2f원을 지불해야함\n",totalPrice);
System.out.println();
[문제 3] 자바에서 다음의 명령문을 실행했을때 결과를 유추하고 그 결과가 의미하는 것은?
# 1
해당 결과: 0.4
System.out.printf("%.2f\n", 0.1+0.3);
double d1 = 0.1;
double d2 = 0.3;
double result = d1 + d2;
# 1-1
해당 결과 : 0.30000000000000004
double d1 = 0.1;
double d2 = 0.2;
double result = d1 + d2;
System.out.println(result);
0.3이 아닌 이유는 2진수로 변환되면서 오차가 생길 수 밖에 없기 때문이다. (생각보다 기초적인 연산 이유이다.)
그렇기 때문에 if (result == 0.3) 이 아닌 if (result >= or <= 0.3) 이 맞는 표현이다.
실수는 같다 '==' 는 개념을 사용할 수 없다.
# 2
해당 결과 : Error
분모가 0인 수로 나눌 수 없기 때문에
System.out.printf("%f\n", 10 / 0 );
해당 결과 : Infinity
왜 분모가 0인데 다른 답이 나오는가?
System.out.printf("%f\n", 0.1 / 0);
더블과 인트를 나누면 위에서 했던 것 처럼 강제로 형맞춤이 일어난다.(더블로 강제 형변환이 됨)
때문에 연산이 더블 / 더블 (0.0) 로 이루어 지기 때문이다. ( 0.0, - 0.0 >> 0이 아닌 표현 할 수 없는 매우 작은 수)
# 3
해당 결과: -128
128이면 2진수로 변환되면 앞자리(부호자리)가 1 이 되므로 음수로 착각하게 된다.
0111 1111 1111 1111 + 1 = 1000 0000 0000 0000 이므로 -128이 되는 것이다.
byte b1 = (byte)(127+1);
System.out.println(b1); // 왜 -128 일까?
해당 결과 : Error
int 가 byte 보다 크기 때문에 넣을 수 없음(초기화에는 넣을 수 있지만 이미 int 형이 되었으므로 byte 에 넣을 수 없는 것)
byte b2 = 1;
b2 = b2+2;
System.out.println(b2);
'국비 교육 > 백엔드(Java, Spring)' 카테고리의 다른 글
[자바] 반복문 -1 (While) (0) | 2024.01.17 |
---|---|
[자바] 연산자 Operator -2, Switch (0) | 2024.01.17 |
[자바] 키보드로부터 입력 (0) | 2024.01.16 |
[자바] 자바 기초 -2 (0) | 2024.01.16 |