세리프 따라잡기

객체지향프로그래밍 2 본문

Java

객체지향프로그래밍 2

맑은 고딕 2021. 3. 29. 14:49

- 선언 → 실행문

 

기초 문법 설명

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-4: 타입 변환

* 2의 보수에서 맨 앞이 1일 경우 음수

- 음의 정수 값을 이진수로 표현하기 (2의 보수)

 

18. Scanner 클래스

읽은 바이트를 문자, 정수, 실수, 불린, 문자열 등 다양한 타입으로 변환하여 리턴

사용할 땐:
import java.util.Scanner; //처음에 임포트 문 필요이 필요하다.
Scanner a = new Scanner(system.in); //스캐너 객체 생성. 클래스를 사용할 땐 반드시 new라는 키워드를 사용해야 한다. string은 예외적 상황
scanner.close(); // 끝낼 때 반드시 사용하기

예제 2-5 scanner 이용 예시

- 공백으로 구분되는 토큰 단위로 읽는다: abc d    ef

스캐너 주요 메소드

19. 식과 연산자

- 연산: 주어진 식을 계산하여 결과를 얻어내는 과정

- 비트와 논리의 다른 점:

논리는 값이 boolean으로 나옴

비트는 값으로 나옴

- 조건 ? :

(이것이 참이면)?(: 앞을 수행):(거짓이면 뒤를 수행)

- 산술 연산자: + - * / %

/와 %의 응용 예제

- 증감 연산

1 증가 혹은 감소 시키는 연산: 앞, 뒤에 붙는 거에 따라 연산 순서가 바뀜

- 대입 연산

연산의 오른쪽 결과는 왼쪽 변수에 대입

예제 2-7: 대입 연산자와 증감 연산자 사용

- 비교 연산, 논리 연산

비교연산자: 두 개의 값을 비교하여 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
Comments