평소에 쓰던 영어 단어들 조차도 낯설게 느껴지는 프로그래밍 용어...
개념의 홍수에서 허우적대다가 헤엄한번 제대로 쳐보지 못하고 익사할것같은 느낌입니다
발이 닿지 않는 영역에 들어온 기분이랄까요...
배우면 배울수록 배로 늘어나는 개념들이 언제쯤 익숙해질지ㅠㅠ
5일차였습니다
* 자료구조 - 배열
ArrayList = 배열의 기능을 구현한 자바에서 제공하는 클래스
배열을 쓰는 이유 - 여러개의 정수를 이용한 프로그램을 할 때
여러개의 정수 타입의 변수를 선언해야 함
= 비효율적, 변수관리 어려움
=> 배열을 사용하여 동일한 자료형의 변수를 한꺼번에 순차적으로 관리
=> 물리적 연속, 논리적 연속
ex) 길이 5일때 = 인덱스의 범위 => 0~4
길이 n일때 = 인덱스의 범위 => 0~n-1
= Fixed - length = 연속 자료 => 빈 자리가 있으면 안된다
=> 자료형[ ] 배열이름 = new 자료형[개수];
배열 초기화 = 배열 선언과 동시에 초기화 가능 => 이때는 배열의 개수 명시X
int[ ] studentIDs = new int[ ] {101,102,103}; // 개수 생략
int[ ] studentIDs = new int[3] {101,102,103}; // 오류 발생
int[ ] studentIDs = {101,102,103}; // int형 요소가 3개인 배열 생성
=> 아무런 초기화 값 없이 선언만 한 경우 -> 정수=0, 실수=0.0, 객체 배열=null로 초기화 됨
[ ] = 인덱스, 첨자 연산자
배열의 위치를 지정 -> 자료를 가져옴
모든 배열의 순서 = 0부터 시작
n개 배열 = 0 ~ n-1 위치까지 자료가 존재
length = 배열의 길이 속성
자료가 있는 요소만 출력 하려면
-> 크기에 대한 저장을 따로 해야 함
* 객체 배열 만들기
= 참조 자료형을 선언하는 객체 배열
배열만 생성한 경우 = 요소 -> null로 초기화 됨
각 요소 = new를 활용하여 생성 -> 저장해야 함
=> 객체 배열은 공간을 생성해주는 것이기 때문에
각 요소를 각각 생성해서 저장해주어야 한다
= 객체 배열 공간 안에 각 인스턴스의 참조 주소를 넣어주는 것
* 배열 복사 하기
= 기존 배열과 같은 배열을 만들거나 배열이 꽉 찬 경우
더 큰 배열을 만들고 -> 기존 배열 자료 복사
-> System.arraycopy(src, srcPos, dest, destPos, length);
매개변수
src = 복사할 배열 '이름'
srcPos = 복사할 배열의 첫 번째 '위치'
dest = 복사해서 붙여 넣을 대상 배열 '이름'
destPos = 복사해서 대상 배열에 붙여 넣기를 시작할 첫 번째 '위치'
length = src에서 dest로 자료를 복사할 요소 '개수'
ex) public class ArrayCopy {
public static void main(string[ ] args) {
int[ ] array1 = {10, 20, 30, 40, 50);
int[ ] array2 = {1, 2, 3, 4, 5};
System. arraycopy(array1, 0, array2, 1, 4);
for(int i = 0; i < array2.length; i++) {
System.out.println(array2[1]);
}
}
} = int 배열 복사
* 객체 배열 복사하기
=> 얕은 복사 = 배열 요소의 주소만 복사 됨 => 같은 주소를 가르키고 있기 때문에 같은 값을 나타냄
-> 배열 요소가 변경되면 복사된 배열의 값도 변경 됨
=> 깊은 복사 = 서로 다른 인스턴스의 메모리를 요소로 가지게 됨
* 향상된 for문 = enhanced for loop
= 배열 요소의 처음부터 끝까지 모든 요소를 참조 할 때 편리한 반복문
-> for(qustn : qoduf) {
반복 실행문;
}
* 다차원 배열
= 2차원 이상의 배열
=> 지도, 게임 등 평면이나 공간을 구현 할 때 많이 사용 됨
-> int[ ] [ ] arr = new int [2] [3];
자료형 배열이름 형개수 열개수
-> 선언, 초기화 => int[ ][ ] arr = {{1, 2, 3},{4, 5, 6}};
= 행을 기준으로 잡고 -> 열을 돌린다 => 이중 for문을 사용 -> 배열 순회
* ArrayList 클래스
= 객체 배열이 구현된 클래스
여러 메서드, 속성 등 사용 -> 객체 배열을 편리하게 관리할 수 있음
가장 많이 사용하는 객체 배열 클래스
-> ArrayList<E> 배열 이름 = new ArrayList<E>();
사용할 객체를 E 위치에 넣고 ArrayList 메서드를 활용하여
추가하거나 참조할 수 있음
주요 메서드
boolean add(E e) = 요소 하나 -> 배열에 추가 // E = 요소의 자료형을 의미
int size( ) = 배열에 추가된 요소 전체 개수를 반환
E get(int index) = 배열의 index 위치에 있는 요소 값 반환
E remove(int index) = 배열의 index 위치에 있는 요소 값 제거 -> 그 값을 반환
boolean isEmpty() = 배열이 비어 있는지 확인
(윈도우 자바 -> F1키 => Class ArrayList 제공)
* 상속, 다형성
상속 = 클래스를 정의 할 때 -> 이미 구현된 클래스를 상속 받음
-> 속성이나 기능이 확장되는 클래스 구현
-> class B extends A {
}
= A 클래스가 B 클래스에게 상속한다
= B 클래스가 A 클래스를 상속받는다
상위 클래스 = 하위 클래스 보다 일반적 의미
하위 클래스 = 상위 클래스 보다 구체적 의미
=> 재사용의 의미 X, 코드를 재사용 하긴 하지만 -> 확장의 의미 O
상속활용 고객관리 프로그램
= 고객의 정보 활용 -> 고객 맞춤 서비스 구현
고객의 등급에 따라 -> 차별화 된 할인율, 포인트 지급
= 등급에 따른 클래스를 따로 구현하는 것이 아닌 일반적인 클래스를 먼저 구현
-> 그 보다 기능이 많은 클래스는 상속을 활용하여 구현
* 접근 제한자 가시성
외부 클래스 하위 클래스 동일 패키지 내부 클래스
public O O O O
protected X O O O
(default) X X O O
private X X X O
* 상속에서 클래스 생성 과정
= 하위 클래스가 생성 될 때 -> 상위 클래스가 먼저 생성 됨
상위 클래스의 생성자가 호출되고 -> 하위 클래스의 생성자가 호출 됨
하위 클래스의 생성자에서 = 무조건 상위 클래스의 생성자가 호출 되어야 함
아무것도 없는 경우 컴파일러 = 상위 클래스 기본 생성자를 호출하기 위한
super()를 코드에 넣어 줌
만약 상위 클래스의 기본생성자가 없는 경우 = 하위 클래스 -> 명시적으로 상위 클래스를 호출해야 함
(= 매개변수가 있는 생성자만 존재 하는 경우)
super 예약어 = this가 자기 자신의 인스턴스의 주소를 가지는 것처럼
super는 하위 클래스가 상위 클래스에 대한 주소를 가짐
하위 클래스가 상위 클래스에 접근 할 때 사용 가능
상속에서의 메모리 상태 = 상위 클래스의 인스턴스가 먼저 생성
-> 그 다음 하위 클래스의 인스턴스가 생성 된다
업캐스팅 = 상위 클래스로의 묵시적 형 변환
= 상위 클래스 형으로 변수를 선언 -> 하위 클래스 인스턴스 생성 가능
하위 클래스는 상위 클래스의 타입을 내포하고 있음
=> 상위 클래스로 묵시적 형변환이 가능
* 메서드 오버라이딩
= 상위 클래스에 정의 된 메서드 중 하위 클래스와
기능이 맞지 않거나 추가 기능이 필요한 경우
같은 이름과 매개변수로 하위 클래스에서 재정의
* 가상 메서드
= 프로그램에서 어떤 객체의 변수나 메서드의 참조는
그 타입에 따라 이루어짐
가상 메서드의 경우는 타입과 상관없이
실제 생성된 인스턴스의 메서드가 호출되는 원리
* 다형성
= 하나의 코드가 여러가지 자료형으로 구현되어 실행되는 것
정보은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징
객체지향 프로그래밍의 유연성, 재활용성, 유지보수성에 기본
다형성 구현하기
= 하나의 클래스를 상속 받은 여러 클래스가 있는 경우
각 클래스마다 같은 이름의 서로 다른 메서드를 재정의
상위 클래스 타입으로 선언된 하나의 변수 -> 여러 인스턴스에 대입 -> 다양한 구현 실행 가능
2023. 08. 31 (목)
프로그래머 도전기 7일차 (0) | 2023.09.04 |
---|---|
프로그래머 도전기 6일차 (0) | 2023.09.02 |
프로그래머 도전기 4일차 (0) | 2023.08.30 |
프로그래머 도전기 3일차 (3) | 2023.08.29 |
프로그래머 도전기 2일차 (0) | 2023.08.29 |