세리프 따라잡기
객체지향프로그래밍 2 본문
- 선언 → 실행문
기초 문법 설명
public class hello { //hello 이름으로 class를 선언하고, public을 선언하면 다른 class에서도 접근이 가능하다.
}
1. main() 메소드
public static void main(String[] args){ //main() 메소드 실행. psvm로 선언하고, (s[] a)로 실행 인자를 전달받는다.
}
2. 메소드 sum 선언
public static int sum(int n, int m){ //매개변수 n, m
}
3. 메소드 호출
s = sum(i, 10); //값을 할당해주기
4. 변수 선언
int i = 20;
char a;
//변수 타입과 변수 이름 선언
- 메소드 내에서 선언된 변수는 지역 변수이다. 이때 지역 변수는 메소드 실행이 끝나면 저장 공간 반환한다.
- 저장공간: 변수를 선언했을 때 static 공간에 함수나 동적으로 하는 것은 heap이라 하여 프로그램이 실행되면서 메모리를 할당해준다. static은 메모리를 만들어줌.
5. 화면 출력
System.out.println("hello"); //화면에 hello 출력
- 표준 출력 스트림 System.out의 println() 메소드 호출. 이때 ln은 출력 후 다음 행으로 커서가 이동한다.
6. 식별자(identifier)란?
- 클래스, 변수, 상수, 메소드 등에 붙이는 이름을 말한다.
- 원칙:
특수 문자, 공백 등은 사용 불가. _나 $는 가능하다.
식별자의 첫 번째 문자로 숫자는 사용이 불가하다.
불린 리터럴(true, false)과 널 리터럴(null)은 식별자로 사용이 불가하다.
길이에 제한이 없다.
대소문자를 구분한다.
7. 자바의 데이터 타입
- 기본 타입 8개
boolean, char, byte, short, int, long, float, double [많이 사용하는 거 굵기 표시]
- 레퍼런스 타입(참조형)은 1개이며 용도는 3가지
class, interface, array
8. 문자열
- 문자열은 기본 타입이 아니다.
- 문자열이 섞인 + 연산은 = 문자열 연결
ex.
toolName + 1.8 // "JDK1.8"
"(" + 3 + "," + 5 + ")" // "(3,5)"
9. 변수와 선언
- 변수 (↔ 상수)
프로그램 실행 중에 값을 임시 저장하기 위한 공간을 말하며, 변수 값은 수행 중 변경될 수 있다.
- 변수 선언
데이터 타입에서 정한 크기의 메모리 할당
10. 리터럴과 정수 리터럴
- 리터럴
프로그램에서 직접 표현한 값
정수, 실수, 문자, 논리, 문자열 리터럴이 있다.
- 정수 리터럴
10, 8, 16, 2진수 리터럴
정수 리터럴은 int 형으로 컴파일
long 타입 리터럴은 숫자 뒤에 L 또는 I을 붙여 표시한다.
ex. long g = 24L;
11. 실수 리터럴
- 소수점 형태나 지수 형태로 표현한 실수: 12. 12.0 .1234 0.1234 1234E-4
- ☆실수 타입 리터럴은 double 타입으로 컴파일
- 숫자 뒤에 f나 d을 명시적으로 붙이기도 함
* 타입이 큰 곳에서 > 작은 곳으로 가면 문제가 생긴다.
12. 문자 리터럴
- 특수문자 리터럴은 백슬래시(\)로 시작
ex. sout("hello"); 를 할 때 "hello"라고 출력하고 싶다면 ("\"hello\"")라고 해준다.
- 캐리지 리턴과 라인피드랑 같은 맥락. \n을 더 많이 사용한다.
13. 논리 타입 리터럴
- boolean은 true 또는 false 뿐이다. 다른 것은 지정할 수 없다.
14. 기본 타입 외 리터럴
- null 리터럴: 레퍼런스에 대입해서 사용한다. ex. string str = null;
- 문자열 리터럴(스트링 리터럴)
이중 인용부호로 묶어 표현 "good", "a", "23" 등
문자열 리터럴은 string 객체로 자동 처리한다. ex. String str = "good";
- 상수 선언
final 키워드 반드시 사용
선언 시 초기값 지정
실행 중에 값 변경이 불가함
15. var 키워드
- java 10부터 도입
- 기존의 변수 선언 방식은 변수의 타입(int, string 등)을 반드시 지정해야 하는데, var는 타입을 생략하고 변수 선언이 가능하다. 컴파일러가 추론해 변수 타입을 결정한다.
- 변수 선언 시에 초깃값이 주어지지 않으면 컴파일이 오류난다.
- 지역 변수에만 한정되어 있다. [메소드 안에 선언된 변수들을 말함. 바깥은 전역 변수]
16. 타입 변환
한 타입의 값을 다른 타입의 값으로 변환
- 자동 타입 변환
컴파일러에 의해 원래의 타입보다 큰 타입으로 자동 변환
치환문(=)이나 수식 내에서 타입이 일치하지 않을 때
17. 강제 타입 변환
개발자의 의도적 타입 변환
()안에 개발자가 명시적으로 타입 변환 지정 ex. byte b = (byte)n;
강제 변환은 값 손실의 우려가 있다.
ex.
double d = 1.9;
int n = (int)d; // n = 1로 된다. 소숫점 이하 0.9가 손실
* 2의 보수에서 맨 앞이 1일 경우 음수
- 음의 정수 값을 이진수로 표현하기 (2의 보수)
18. Scanner 클래스
읽은 바이트를 문자, 정수, 실수, 불린, 문자열 등 다양한 타입으로 변환하여 리턴
사용할 땐:
import java.util.Scanner; //처음에 임포트 문 필요이 필요하다.
Scanner a = new Scanner(system.in); //스캐너 객체 생성. 클래스를 사용할 땐 반드시 new라는 키워드를 사용해야 한다. string은 예외적 상황
scanner.close(); // 끝낼 때 반드시 사용하기
- 공백으로 구분되는 토큰 단위로 읽는다: abc d ef
19. 식과 연산자
- 연산: 주어진 식을 계산하여 결과를 얻어내는 과정
- 비트와 논리의 다른 점:
논리는 값이 boolean으로 나옴
비트는 값으로 나옴
- 조건 ? :
(이것이 참이면)?(: 앞을 수행):(거짓이면 뒤를 수행)
- 산술 연산자: + - * / %
- 증감 연산
1 증가 혹은 감소 시키는 연산: 앞, 뒤에 붙는 거에 따라 연산 순서가 바뀜
- 대입 연산
연산의 오른쪽 결과는 왼쪽 변수에 대입
- 비교 연산, 논리 연산
비교연산자: 두 개의 값을 비교하여 true / false 결과
논리연산자: 두 개의 논리 값에 논리 연산. 논리 결과
- 조건 연산
3개의 피연산자로 구성된 삼항(ternary) 연산자
ex.
int big;
if (x>y)
big = x;
else
big = y;
위 식을 아래와 같이 조건연산자로 간결하게 표현이 가능하다 [but, 단순하게 한 문장으로만 이루어져 바로 결과가 나온다는 걸 명심! {}안에 여러가지를 쓸 수 있는 것이 아니다.]
int big = (x>y)?x:y;
- 비트 연산
비트 논리 연산: 비트끼리 and, or, xor, not 연산
비트 시프트 연산: 비트를 오른쪽이나 왼쪽으로 이동
☆ XOR는 특징이 있는데, a와 b라는 숫자의 결과값을 다시 xor하게 되면 이전 값을 복원할 수 있다. 이 성질을 이용하여 무선 네트워크 등 많이 사용된다.
- 숫자 패턴에서 우리가 원하는 특정 숫자값을 알기 위해서 사용하는 값 = MASK
- 시프트 연산
'Java' 카테고리의 다른 글
객체지향프로그래밍 4 (0) | 2021.03.29 |
---|---|
객체지향프로그래밍 3 (0) | 2021.03.29 |
객체지향프로그래밍 1 (0) | 2021.03.08 |