본문 바로가기

알고리즘(개정4판)

1.1 기본 프로그래밍 모델

자바 

 

기본 데이터 타입과 표현식

  • int : 산술 연산이 가능한 정수 (232개의 서로 다른 값을 표현할 수 있다. 32비트 기계어 단어 하나로 표현 할 수 있다.)
  • double : 산술 연산이 가능한 유리수 (64비트)
  • boolean : 논리 연산이 가능한 [참,거짓]으로 구성된 집합 
  • char : 알파벳, 숫자, 기타 심볼들로 구성된 키보드로 입력 가능한 문자
타입 값의 집합 (범위) 연산자 표현식
int  -2^31 ~+ -2^31 -1 사이의 값
(32비트 2의 보수)

+ 덧셈
- 뺄셈
* 곱셈
/ 나눗셈
% 나머지
5 + 3
5 - 3
5 * 3
5 / 3
5 % 3
8
12
15
1
2
double 배정도 실수
(IEEE 754 표준에 정해진 64비트 값)
+ 덧셈
- 뺄셈
* 곱셈
/ 나눗셈
% 나머지
3.141 - .03
2.0 - 2.0e-7
100 * .015
6.02e23 / 2.0
3.111
1.9999998
1.5
3.01e23
boolean true or false && (and 논리곱)
|| (or 논리합)
! (not 논리부정)
^(xor 배타 논리합)
true && false
false || true
!false
treu ^ true

false
true
true
false

char  문자(16~비트) 산술연산은 거의 사용되지 않음

 

 

기타 기본 데이터 타입

  • long : 산술 연산이 지원되는 64비트 정수
  • short : 산술 연산이 지원되는 16비트 정수
  • char : 산술 연산이 지원되는 16비트 정수
  • byte : 산술 연산이 지원되는 8비트 정수
  • float : 산술 연산이 지원되는 32비트 부동소수점 실수

연산의 결과가 그 연산의 대상이 되는 데이터 타입과 동일한 데이터 타입을 가진다.

 

 

배열

  • 에일리어싱 : 배열의 이름은 배열 전체를 대표한다. 배열 변수를 다른 변수에 대입하면 두 변수 모두 같은 배열을 가리키게 된다
  • 에일리어싱은 찾기 힘든 미묘한 버그를 유발할 수 있다. 만약 배열의 복제본을 만드는것이 의도라면 새로운 배열을 선언, 생성, 초기화 하고 그 배열에 원본 배열의 값들을 복사해 넣어야 한다.
int[] a = new int[N];
...
a[i] = 1234;
...
int[] b = a;
...
b[i] = 5678; // a[i]도 이제 5678

 

 

static 메서드

정적 메서드는 수학의 함수와 역할이 비슷하여 다른 프로그래밍 언어들에서는 함수라 불린다.

각 정적 메서드는 실행될 명령문들의 나열로 이루어진다. 이 명령문들은 정적 메서드가 호출되었을 때 하나씩 순서대로 실행된다.

static 한정자를 통해 인스턴스에 종속된 메서드가 아닌 정적 메서드임을 표시한다.

 

메서드의 속성

  • 인수는 값으로써 전달된다.
  • 메서드의 이름은 오버로딩 될 수 있다.
  • 메서드는 하나의 리턴값만 가질 수 있지만 함수 내에 리턴문이 여러개 있을 수 있다.
  • 메서드는 부가 효과만 일으키고 아무것도 리턴하지 않을 수도 있다.

재귀(Recursion)

  • 재귀호출은 종단 케이스를 가진다. 메서드의 첫 조건에 따른 리턴문이 들어간다.
  • 재귀호출이 깊어 질수록 더 작은 문제를 다루게 된다.
  • 재귀호출간에는 다루는 문제가 중첩되어서는 안된다. 

 

숫자와 String을 상호 변환하기 위한 API

public class Integer
static int parseInt(String s) s를 int 값으로 변환
static String toString(int i) i를 String 타입 문자열로 변환

 

public class Double
static double parseDouble(String s) s를 double 값으로 변환
static String toString(double x) x를 String 타입 문자열로 변환

 

 

 

  • 변수에 초깃값을 지정하지 않고 사용하면 
    • 컴파일 타임 에러가 발생하면서 소스 코드 안에서 초기화 되지 않은 변수를 알려준다.
  • for문 과  while문 문법상 차이
    • for문 : 루프 헤더가 루프 바디와 동일한 블록으로 취급된다. 따라서 루프 헤더에서 정의된 변수는 for문을 벗어나서는 유효하지 않다. 
    • while문 : 루프 헤더에서 정의된 변수가 while문 다음의 코드에서도 유효하다. 이러한 특성 때문에 for문 대신 while문을 사용하기도 한다.
  • 자바 배열 선언방식
    • int a[]; c언어에서 사용되는 방식
    • int[] a; 자바에서 권장되는 형태 (변수a의 타입이 int[] 라고 더 명확하게 지정하게 된다.)
  •  배열 인덱스가 0부터 시작하는 이유
    • 기계어 프로그래밍에서 시작된 관례. 기계어에서 배열의 한 항목에 접근하기 위해서 배열의 시작 주소에 인덱스를 더한다. 인덱스가 1부터 시작한다면 첫 번째 항목에 해당하는 메모리를 낭비하게 된다. 낭비를 피하고자 배열 항목에 접근할 때마다 인덱스 1을 빼는 부가작업이 필요해진다. 

 

출처 - 알고리즘(개정4판)

'알고리즘(개정4판)' 카테고리의 다른 글

1.2 데이터 추상화  (0) 2024.01.13