6월 18일
[배열] : [ 같은 자료형 ]의 [ 여러 개의 데이터(값)]을 저장하는 공간
: 배열의 데이터는 [ 인덱스 ]로 관리가 된다.
** 인덱스의 시작번호: [ 0 ] **
* 선언 표현식
자료형[] 배열명;
할당 표현식
배열명 = new 자료형[배열 크기];
* 배열 선언과 동시에 할당
(1) 자료형[] 배열명 = new 자료형[] {값1, 값2, 값3, ...};
(2) 자료형[] 배열명 = {값1, 값2, 값3, ...};
(3) 자료형[] 배열명 = new 자료형[배열 크기];
배열명[인덱스번호(위치번호)] = 값1;
arry[0] = 값1;
int[] numbers = new int[3];
System.out.println(numbers);
// 출력 결과 : 0x123
배열 복사
(1) [ 얕은 복사 ]
: 주소 값만 복사하여 실제 데이터는 한 곳에서 관리.
데이터가 변경되면 복사된 배열에도 영향을 줌(반영이 됨)
int[] arr1 = new int[] {1, 2, 3};
int[] arr2 = arr1;
(2) [ 깊은 복사 ] : 새로운 배열 객체를 생성하여 기존 배열의 데이터를 복사.
1) 반복문 사용
ex) int[] arr1 = new int[] {1, 2, 3};
int[] arr2 = new int[arr1.length];
for(int i=0; i < arr1.length; i++) {
arr2[i] = arr1[i];
}
(2) 복사본 배열 = 원본배열.clone();
[ 복사본 배열명 ] = Arrays.copyOf([ 원본 배열명 ], 복사할 길이);
System.arraycopy(원본배열명, 복사시작할인덱스, 복사본배열명, 복사본배열의 복사될 시작인덱스, 복사할갯수);
6월 19일
(2) 깊은 복사 : 새로운 배열 객체를 생성하여 기존 배열의 데이터를 복사.
(1) 반복문 사용
ex) 아래 origin이라는 이름의 배열을 copy라는 이름의 배열에 복사하기 (반복문 사용)
double[] origin = new double[] {163.5, 177.2, 180.2};
double[] copy = new double[origin.length]; // 복사본 배열 선언 및 할당
for(int i=0; i<origin.length; i++) {
// origin 배열의 i번째 위치의 데이터를
// copy 배열의 i번째 위치에 저장
copy[i] = origin[i];
}
(3) 복사본 배열 = Arrays.copyOf(원본배열, 복사할 길이);
* 2차원 배열 : "배열" 안에 "배열"
"1차원 배열"의 묶음
선언 표현식
자료형[][] 배열명;
* 할당 표현식
배열명 = new 자료형[행의길이][열의길이];
// 행의 길이 : 1차원 배열의 개수
// 열의 길이 : 각 행에 저장된 1차원 배열의 크기
6월 20일 클래스
* 클래스(객체)
- 객체지향언어 : "객체"를 "지향"하는 언어로 "객체" 중심으로 프로그램이 실행된다.
- "객체" : 현실 세계에 독립적으로 존재하는 모든 것들을 의미
=> 목적/가치/의미가 있는 것들
=> 유형, 무형, 개념, ...
- 구현하고자 하는 프로그램 상의 필요한 객체를 만들기 위해,
"클래스(class)"라는 틀을 먼저 만들어야 함.
=> 객체들의 속성(정보)들을 담아낼 그릇같은 존재
- 추상화 과정 1) 구현하고자 하는 프로그램에서 필요한 객체를 생각하기
2) 그 객체들이 가지는 공통적인 속성, 기능들을 추출하기
3) 추출한 것을 가지고 구현하고자 한 프로그램의 "실질적인 목적"에 맞춰 불필요한 속성, 기능을 제거하기
4) 최종적으로 추려진 속성들을 어떤 자료형과 어떤 변수명으로 사용할 것인지 생각하기
- 클래스는 "변수부(필드부)"와 "메소드부"와 "생성자부"로 구성되어 있다
* 변수(필드/멤버변수) : 객체의 상태(정보)를 담고 있는 것
=> [접근제한자] [예약어] 자료형 변수명;
* 메소드 : 객체의 동작/기능 등의 내용을 담고 있는 것
=> 표현법 : [접근제한자] [예약어] 반환타입 메소드명([매개변수정보]){}
* 생성자 : 객체를 생성할 때 사용되는 것
=> 표현법 ( 접근제한자 생성자명 매개변수정보 )
접근제한자 생성자명([매개변수정보]) { }
-> 생성자명은 클래스명과 동일해야 함
-> 생성자를 정의하는 순간, 기본 생성자가 자동으로 만들어지지 않는다.
- 접근 제한자 : 접근할 수 있는 범위를 제한하는 것
public > protected > default > private
- public : 어디서든 접근 가능
- protected : 같은 패키지 이거나, 상속 관계일 때 접근 가능
- default : 같은 패키지 내에 있을 때 접근 가능
- private : 클래스 내에서만 접근 가능
- 변수의 스코프
1) 전역변수
* 멤버변수 == 인스턴스변수 == 필드
생성시점 : new 연산자(예약어)를 통하여 객체 생성 시
소멸시점 : 객체 소멸 시 같이 소멸
* 클래스변수 == static 변수
생성시점 : 프로그램 실행과 동시에 무조건 메모리 영역(static)에 할당
소멸시점 : 프로그램 종료 시 소멸
* 지역변수
생성시점 : 지역변수가 속한 특정 구역({}) 실행 시 메모리영역에 할당
소멸시점 : 특정 구역({}) 종료 시 소멸
- 정보 은닉 : 데이터에 "직접" 접근하지 못하도록 하는 것 ( private 접근제한자 사용 )
캡슐화를 통해 데이터에 "간접" 접근하여 사용할 수 있도록 관리함
(setter / getter 메소드 : public 접근제한자 사용 )
* setter : 데이터에 어떤 값을 저장하는 기능을 수행하는 메소드
* getter : 데이터의 값을 조회하는 기능을 수행하는 메소드
- 오버로딩 : 한 클래스 내에 "같은" 메소드명으로 여러 개를 정의하는 것
* 성립 조건
1) 메소드명이 같아야 한다.
2) 매개변수 정보가 달라야 한다.
기준 public void method1(int i){}
1 public void method1(String str){} ( O ) -> 매개변수 개수는 같으나, 타입이 다르기 때문
2 public void method1(int i, String str){} ( O ) -> 매개변수 개수가 다르다.
3 public void method1(int num){} ( X ) -> [기준] 메소드와 매개변수 개수와 타입이 같다.
4 public char method1(int point){} ( X ) -> [기준], [3] 메소드 매개변수 개수와 타입이 같다.
5 public void method1(int i, int k){} ( O ) -> 매개변수 개수와 타입이 다르다.
6 public void method1(int num, String string){} ( X ) -> [2] 메소드와 매개변수 개수와 타입이 같다.
7 public void method1(String str, int i){} ( O ) -> 매개변수 타입의 순서가 다르다.
'Java' 카테고리의 다른 글
KH 교육과정 제네릭 (0) | 2024.07.04 |
---|---|
KH 교육과정 JAVA_IO(입출력) (0) | 2024.07.03 |
7월 15일 KH 시험 대비 복습 자바,변수,(조건문/반복문) (0) | 2024.07.01 |
자바 MVC 패턴 문제 객체 배열을 적용해서 풀이하기 (0) | 2024.07.01 |
KH 교육과정_다형성 (0) | 2024.06.30 |