chapter 02 - 1 배열
자료구조 (data structure)
데이터 단위와 데이터 자체 사이의 물리적 또는 논리적인 관계
배열 (array)
같은 자료형의 변수로 이루어진 구성 요소의 집합
- 가장 기본적이고 간단한 자료구조
- int[] a; // int 타입 배열 선언
- a = new int[5]; // a는 길이가 5인 int 타입 배열 참조
- int[] a = new int[5]; // 배열 선언과 참조 한번에 가능
- int[] a = {1, 2, 3, 4, 5}; // 배열 초기화(array initializer) 사용하여 배열 생성과 구성 요소 초기화
- 구성 요소
- array[index] // 인덱스 통해 구성 요소에 접근 가능
- array.length // 배열의 길이 파악 가능
- 구성 요소의 자료형에 따라 'Type형 배열'이라고 부름 (ex int형 배열)
- array.clone( ) // 배열 복제
- 배열 요소 역순 정렬 / 두 값의 교환
- 연습문제
- 실습 예제 수정하여 키와 사람 수 난수로 생성하는 프로그램
(ⓒⓞⓓⓔ) ex01.java
- 배열 요소 역순 정렬하는 과정 나타내는 프로그램
(ⓒⓞⓓⓔ) ex02.java
- 배열 a의 모든 요소의 합 구하여 return하는 프로그램 (메서드 작성)
(ⓒⓞⓓⓔ) ex03.java
- 배열 b의 모든 요소를 배열 a에 복사하는 프로그램 (메서드 작성)
(ⓒⓞⓓⓔ) ex04.java
- 배열 b의 모든 요소 배열 a에 역순으로 복사하는 프로그램 (메서드 작성)
(ⓒⓞⓓⓔ) ex05.java
기수 변환
- 변환하는 정수, 기수, 변환 후 자릿수에 대한 변수 필요
- 변환 후 각 자리 숫자 넣어두는 문자 배열 필요
- 연습문제
- 배열의 앞쪽에 윗자리 넣어두는 프로그램 (메서드 작성)
(ⓒⓞⓓⓔ) ex06.java
- 기수 변환 과정 나타내는 프로그램
(ⓒⓞⓓⓔ) ex07.java
소수의 나열
- 어떤 정수 이하의 소수를 모두 나열하는 알고리즘
- 처음부터 끝까지 탐색해보며 소수 여부 판별하여 모두 나열
→ 2를 소수에 포함한 후 3이상 홀수만 탐색하며 소수 여부 판단하여 모두 나열
→ n의 제곱근 이하의 어떤 소수로도 나누어떨어지지 않는다면 소수라도 판단하여 모두 나열
다차원 배열
- 가장 간단한 것이 2차원 배열로, 어떠한 타입의 배열을 구성 자료형으로 하는 배열
- 3차원 배열의 경우, 2차원 배열을 구성 자료형으로 하는 배열이라고 할 수 있음
- 복제하는 경우 최상위의 1레벨의 배열만 복제되고, 그 아래 레벨의 배열은 공유만 됨.
한 해의 경과 일 수를 계산하는 프로그램
- 2차원 배열에 각 달의 일 수 저장 (윤년 / 평년 구분하여)
→ 윤년 여부에 따라 일 수 구하여 return하는 프로그램
- 연습문제
- 실습 예제 수정하여 변수 없이 한 해의 경과 일 수 계산하는 프로그램 (메서드 수정 / while문 사용)
(ⓒⓞⓓⓔ) ex08.java
- 그 해의 남은 일 수를 구하는 프로그램 (메서드 작성)
(ⓒⓞⓓⓔ) ex09.java
chapter 02 -2 클래스
임의의 데이터형을 자유롭게 조합하여 만들 수 있는 자료구조
- 클래스 선언
- class XYZ {
int x;
long y;
double z;
}
- XYZ a; // XYZ형의 클래스형 변수 a 선언
- a = new XYZ( ); // XYZ형의 클래스 인스턴스 생성
- XYZ a = new XYZ( ); // 변수와 인스턴스 생성 한꺼번에 선언 가능
- 생성자 - XYZ(int x, long y, double z) {
this.x = x;
this.y = y;
this.z = z;
}
- 연습문제
- 시력 분포를 그래프로 출력하는 프로그램 (사람 수만큼 * 반복하여 출력)
(ⓒⓞⓓⓔ) ex10.java
- 년월일 필드 클래스 생성하고 생성자와 n일 뒤 날짜 반환, n일 앞 날짜 반환하는 프로그램(메서드 작성)
(ⓒⓞⓓⓔ)
- 클래스 정리
- 클래스 본체에서 선언
- 멤버 (필드, 메서드, 중첩 클래스, 중첩 인터페이스)
- 클래스 / 인스턴스 초기화
- 생성자
2. 필드 / 메서드 / 생성자 : public / protected / private 접근 제한자 지정 가능
3. 메서드 / 생성자 다중 정의 가능(오버로드)
4. final 선언 필드는 한번만 값 대입 가능
5. 생성자 : 새로 생성한 인스턴스의 초기화 위해 사용
- 클래스 종류
- 공개 클래스 (public class)
- final class
- 서브 클래스 생성 불가, 말 그대로 final class
- 파생 클래스(subclass)
- subclass extends superclass // 선언 필수
- 선언하지 않는다면 Object 클래스가 상위 클래스가 됨.
- interface
- class A implements interfaceX // 인터페이스 구현 위해 선언 필요
- 추상 클래스 (abstract class)
- 추상 메서드 가질 수 있지만, 불완전한 상태라 인스턴스 생성 불가능
- subclass에서 추상 메서드 구현해야 함
- 중첩 클래스 (nested class)
- member class : 선언이 다른 클래스 혹은 인터페이스 선언에 둘러싸인 클래스
- inner class : static 선언 불가능, 정적 멤버 선언 불가능, 정적 초기화, 멤버 인터페이스 선언 불가능
- local class : 이름이 주어진 중첩 클래스, 내부 클래스
** 참고 내용 **
값을 대입하지 않은 지역변수
- 지역변수는 초기화되지 않기 때문에 값을 대입하지 않으면 컴파일 에러 발생
접근 제한자
객체의 멤버에 대한 접근을 제한하는 경우
- 제한자 종류
① public : 모든 접근 허용
② protected : 같은 패키지 (폴더)의 객체, 상속 관계의 객체 접근 허용
③ default : 같은 패키지 (폴더)의 객체 접근 허용
④ private : 현재의 객체 안에서만 접근 허용
- 접근 제한자 사용
① 클래스 : public, default
② 생성자 : public, protected, default, private
③ 멤버 변수 : public, protected, default, private
④ 멤버 메서드 : public, protected, default, private
⑤ 지역 변수 : 접근 제한자 사용 불가
난수 생성
- import java.util.Random;
- Random random = new Random( ); // 새로운 난수 생성기 생성
Random random = new Random(n); // n이라는 seed 값 자동으로 결정하여 난수 생성
- 메서드 호출
- random.nextBoolean( ); // boolean형 난수 생성
- random.nextInt( );
- random.nextInt(n);
- random.nextLong( );
- random.nextDouble( );
- random.nextFloat( );
import 형 선언
- 간단한 클래스 이름만으로 클래스 사용 가능
- ex) import 선언이 없었다면 Scanner 사용 시마다 java.util.Scanner로 표기해야함.
전위형 증가 연산자와 후위형 증가 연산자
- 전위형 증가 연산자 (++a)
- 식 평가 전에 피연산자 값 증가시킴
- 후위형 증가 연산자 (a++)
- 식 평가 후 피연산자 값 증가시킴
String 클래스
- java.lang 패키지에 속한 문자열 나타내는 클래스
- 변수, 필드(field), 생성자(constructor), 메서드(method) 존재
- 외워야 하는, 기억해야 하는 메서드
- char charAt(int i) // index i인 곳의 문자 return
- int length( ) // 문자열의 문자 수 return
- boolean equals(String s) // 문자열 s와 같은지 조사하여 true, false return
확장 for문
- for (double i : a) // 배열 a의 처음부터 끝까지 모든 요소를 한 개씩 스캔함을 의미
- 배열의 길이 조사할 필요 없음
- index 값이 필요하지 않는 경우 확장 for문으로 구현하는 것이 더 좋음
'Android ᙏ̤̫͚ > JAVA Algorithm' 카테고리의 다른 글
Chapter 06. 정렬 (1) (0) | 2021.01.21 |
---|---|
Chapter 05. 재귀 알고리즘 (0) | 2021.01.16 |
Chapter 04. 스택과 큐 (0) | 2021.01.13 |
Chapter 03. 검색 (0) | 2021.01.13 |
Chapter 01. 기본 알고리즘 (0) | 2021.01.08 |