오늘 진행한 학습 요약
1. [Java 문법 종합반] 2주차 : 연산자, 조건문, 반복문, 배열, 컬렉션
- 조건문 (switch/case , break)
- 반복문 (for, 향상된 for, while, do-while, continue)
- 배열 (Array, String 배열, 다차원 배열)
- 컬렉션 (List, Queue, Set, Map)
2.[Java 문법 종합반] 3주차 : 클래스, 상속, 인터페이스
- 객체지향 프로그래밍 이해 (객체, 클래스)
- 클래스 설계
- 객체 생성과 참조형 변수 (객체생성, 참조형 변수, 객체 배열)
- 객체의 속성 : 필드 (필드, 필드의 초기값, 필드 초기화)
- 객체의 행위 : 메서드 (메서드 선언, 메서드 호출, 메서드 오버로딩, 기본형&참조형 매개변수)
- 인스턴스 멤버와 클래스 멤버 (인스턴스 멤버, 클래스 멤버, 지역변수, final 필드와 상수)
- 생성자 (생성자 선언, 생성자 호출, 기본 생성자, 필드 초기화와 생성자 오버로딩)
- this, this() (this, this())
- 접근 제어자 (접근 제어자, Getter, Setter, 제어자의 조합)
- 패키지, import (package, import)
- 상속 (상속, 클래스 간 관계, 단일상속, 다중상속, final 클래스, final 메서드, object)
- 오버라이딩 (오버라이딩, super, super())
- 다형성 (참조변수의 타입 변환, 다형성, instanceof)
학습 정리
1. [Java 문법 종합반] 2주차 : 연산자, 조건문, 반복문, 배열, 컬렉션
- 조건문 (switch/case)
- case 연산문 마지막에는 break;를 넣어야한다.
- 안넣으면 멈추지 않는다!!
더보기
더보기
// case 2 입력
int month = 2;
String monthString = "";
switch (month) {
case 1: monthString = "1월";
break;
case 2: monthString = "2월";
break;
case 3: monthString = "3월";
break;
default: monthString = "알수 없음";
}
// 2월 출력
System.out.println(monthString);
- 반복문 (for, 향상된 for, while, do-while, break, continue)
더보기
더보기
// for 문
for(int i=0; i < 4; i++) { // 변수 i 값은 0 ~ 3 까지 반복
System.out.println(i + "번째 출력"); // i 변수와 문자열 합치기
}
// 출력
0번째 출력
1번째 출력
2번째 출력
3번째 출력
// 향상된 for 문
int[] numbers = {3,6,9,12,15};
for(int number: numbers) {
System.out.print(number + " ");
}
// 출력
3 6 9 12 15
// while 문
int number = 0;
while(number < 3) {
number++;
System.out.println(number + "출력");
}
// 출력
1출력
2출력
3출력
// do-while 문
int number = 4;
do {
System.out.println(number + "출력");
} while(number < 3); // 연산을 한번 수행 후 조건문 체크
// 출력
4출력
// break 명령 범위
for (int i = 0; i < 10; i++) {
System.out.println("i: " + i);
if (i == 2) {
break; // i 가 2일때 가장 바깥 반복문이 종료됩니다.
}
for (int j = 0; j < 10; j++) {
System.out.println("j: " + j);
if (j == 2) {
break; // j 가 2일때 가장 안쪽 반복문이 종료됩니다.
}
}
}
// 출력
i: 0 // 바깥 반복문 부터 수행 시작
j: 0 // 안쪽 반복문 1회차 수행
j: 1
j: 2 // j 가 2일때 안쪽 반복문 break;
i: 1 // 바깥 반복문은 아직 break; 호출이 안됬으므로 다음 반복수행
j: 0 // 안쪽 반복문 2회차 수행
j: 1
j: 2 // j 가 2일때 안쪽 반복문 두번째 break;
i: 2 // i 가 2일때 바깥 반복문도 break; 호출되어 종료
// continue 명령
int number = 0;
while(number < 3) {
number++;
if (number == 2) {
continue; // 2일때 반복 패스
}
System.out.println(number + "출력");
}
// 출력
1출력
3출력
- 배열 (Array, String 배열, 다차원 배열)
- 배열 (Array)
- 배열 선언 방법
- 1번 방법
- int[] intArray; // 정수 배열
long[] longArray;
double[] doubleArray; // 실수 배열
char[] charArray; // 문자 배열
String[] stringArray; // 문자열 배열
- int[] intArray; // 정수 배열
- 2번 방법
- int intArray[]; // 정수 배열
long longArray[];
double doubleArray[]; // 실수 배열
char charArray[]; // 문자 배열
String stringArray[]; // 문자열 배열
- int intArray[]; // 정수 배열
- 1번 방법
- 배열 생성
- new 명령어로 생성하고 몇개를 담을지 정의하는 것
- 배열 순회
- 배열 안에 있는 변수(숫자나 글자)에서 원하는 것을 꺼내는 것
- for문으로 배열 안에 있는 변수를 모두 출력해볼 수도 있음
- .length() 메서드로 배열의 길이값을 알 수 있음
- 배열 초기화 방법
- 중괄호를 사용 {}
- 반복문 for문을 사용
- Array.fill 메소드를 사용해서 초기화
- 복사
- 얕은 복사
- 주소 값만 복사되고 실제 값은 유지되는 것
- 깊은 복사
- 진짜 새로운 배열을 만들고 싶을 때 사용
- for문과 같은 바복문을 통해서 복사하는 방법과 Arrays.copy0f() 메서드를 사용한 방법이 있음
- 얕은 복사
- 배열 선언 방법
- String 배열
- 문자열 배열이며 선언하고 생성하는 방법은 기존 배열과 동일
- char는 문자고 String은 문자열
- String = char[]
- 다차원 배열
- 생성방법
- int[][] array = new int [][];
- 가변 배열
- 행마다 다른 길이의 배열을 저장
- 3차원 배열
- int[][][] multiArrary
- 배열 (Array)
더보기
더보기
// 중괄호를 사용해 초기화
int[][] array = {
{1, 2, 3},
{4, 5, 6}
};
// 반복문을 통한 초기화
int[][] array = new int[2][3]; // 최초 선언
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
arr[i][j] = 0; // i, j 는 위 노란색 네모박스 안에있는 숫자를 의미하며 인덱스 라고 부릅니다.
}
}
// 가변 배열
// 선언 및 초기화
int[][] array = new int[3][];
// 배열 원소마다 각기다른 크기로 지정 가능합니다.
array[0] = new int[2];
array[1] = new int[4];
array[2] = new int[1];
// 중괄호 초기화할때도 원소배열들의 크기를 각기 다르게 생성 가능합니다.
int[][] array2 = {
{10, 20},
{10, 20, 30, 40},
{10}
};
// 3차원 배열의 이해
// 중괄호 3개를 써서 3차원 배열 초기화를 할 수 있습니다.
int[][][] MultiArray = {{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}};
- 컬렉션 (List, Queue, Set, Map)
- 컬렉션의 종류
- List : 순서가 있는 데이터의 집합이며 데이터 중복을 허용
- ArrayList : 배열처럼 일렬로 데이터를 저장하고 조회, 순번값으로 값을 하나씩 조회
- LinkedList : 메모리에 남는 공간을 요청해서 여기저기 실제 값을 담아놓고
실제 값이 있는 주소값으로 목록을 구성 및 저장 - Stack : 바구니에 처음 넣은 물건을 맨 마지막에 꺼낼 수 있듯 First in Last out > FILO
- Queue : 처음 넣은 것이 가장 처음 나옴 First in First out > FIFO
- Set : 순서가 없는 데이터의 집합이며 데이터 중복 허용 안함
- Map : 순서가 없는 (Key, Value) 쌍으로 이루어진 데이터의 집합이며 Key값 중복 허용 안함
- List : 순서가 있는 데이터의 집합이며 데이터 중복을 허용
- 컬렉션의 변수
- 컬렉션은 참조형 변수를 저장함 (기본형X)
- Integer, Long, Double, String
- 컬렉션은 참조형 변수를 저장함 (기본형X)
- 길이 값 가져오기
- length : 배열의 길이 조희
- length() : 문자열의 길이 조회
- size() : 컬렉션 타입 목록의 길이 조회
2.[Java 문법 종합반] 3주차 : 클래스, 상속, 인터페이스
- 객체지향 프로그래밍 이해 (객체, 클래스)
- 객체
- 객체란 ?
- 식별가능한거
- 객체간의 관계
- 사용관계 : 사람은 자동차를 사용
- 포함관계 : 타이어는 자동차에 포함
- 상속관계 : 공장은 자동차랑 기차를 만드므로 기계시스템을 상속 받음
- 객체란 ?
- 객체지향 프로그래밍의 특징
- 캡슐화
- 상속
- 다형성
- 추상화
- 클래스
- 클래스란?
- 설계도에 해당
- 인스턴스
- 클래스를 토대로 생성된 객체를 해당 클래스의 인스턴스라고 부르며 이 과정을 인스턴스화라고 부름
- 클래스란?
- 객체
- 클래스 설계
- 1. 설계도 선언(클래스 선언)
- 2. 속성(필드) 정의
- 3. 생성 방식 정의(생성자)
- 4. 행위(메서드) 정의
- 객체 생성과 참조형 변수 (객체생성, 참조형 변수, 객체 배열)
- 객체생성
- 객체생성 연산자인 new를 사용하여 클래스로부터 객체 생성
- new Car(); // Car클래스 객체 생성
- 참조형 변수
- new연산자를 통해 객체가 생성되면 해당 인스턴스의 주소가 반환되므로 참조형 변수를 사용하여 받아줄 수 있음
- Car car1 = new Car(); // Car클래스의 객체인 car1 인스턴스 생성
Car car2 = new Car(); // Car클래스의 객체인 car2 인스턴스 생성
- 객체 배열
- 객체는 참조형 변수와 동일하게 취급
- 배열 또는 컬렉션에도 저장하여 관리할 수 있음
- 객체생성
- 객체의 속성 : 필드 (필드, 필드의 초기값, 필드 초기화)
- 필드
- 필드는 객체의 데이터를 저장하는 역할
- 필드의 초기값과 초기화
- 초기값을 제공하는 방법은 ‘필드 타입 필드명 = 값;’ 이렇게 직접 초기화
- String model = "Gv80";
- 필드
- 객체의 행위 : 메서드 (메서드 선언, 메서드 호출, 메서드 오버로딩, 기본형&참조형 매개변수)
- 메서드란?
- 객체의 행위를 뜻하며 객체간의 협력을 위해 사용
- 메서드 선언
- 리턴타입 메서드명(매개변수, ...) { 실행할 코드 작성 }
- 메서드 호출
- 메서드의 블록 내부에 작성된 코드를 실행
- 외부 접근
- 내부접근
- 반환 값 저장
- 메서드의 블록 내부에 작성된 코드를 실행
- 메서드 오버로딩
- 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도, 매개변수의 개수 또는 타입, 순서가 다르면 동일한 이름을 사용해서 메서드를 정의
- 기본형&참조형 매개변수
- 기본형 매개변수
- 전달할 매개값으로 지정한 값을 메서드의 매개변수에 복사해서 전달
- 참조형 매개변수
- 전달할 매개값으로 지정한 값의 주소를 매개변수에 복사해서 전달
- 기본형 매개변수
- 메서드란?
- 인스턴스 멤버와 클래스 멤버 (인스턴스 멤버, 클래스 멤버, 지역변수, final 필드와 상수)
- 인스턴스 멤버
- 인스턴스 멤버는 객체를 생성해야 사용
- 객체의 인스턴스 필드는 각각의 인스턴스마다 고유하게 값을 가질 수 있음
- 클래스 멤버
- Java의 클래스 로더에 의해 메서드 영역에 저장되고 사용
- 메서드 영역의 클래스와 같은 위치에 고정적으로 위치하고 있는 멤버를 의미
- 객체의 생성 필요 없이 바로 사용이 가능
- 지역변수
- 메서드 내부에 선언한 변수를 의미
- 메서드가 실행될 때마다 독립적인 값을 저장하고 관리
- 지역 변수는 메서드 내부에서 정의될 때 생성되어 메서드가 종료될 때까지만 유지
- final
- final 필드는 초기값이 저장되면 해당값을 프로그램이 실행하는 도중에는 절대로 수정할 수 없음
- final 필드는 반드시 초기값을 지정
- 인스턴스 멤버
- 생성자 (생성자 선언, 생성자 호출, 기본 생성자, 필드 초기화와 생성자 오버로딩)
- 생성자 선언 및 호출
- 생성자는 객체가 생성될 때 호출되며 객체를 초기화하는 역할을 수행
- 기본 생성자
- 기본 생성자는 선언할 때 괄호( ) 안에 아무것도 넣지 않는 생성자를 의미
- 필드 초기화
- 객체를 만들 때 인스턴스마다 다른 값을 가져야 한다면 생성자를 통해서 필드를 초기화할 수 있음
- 반대로 인스턴스마다 동일한 데이터를 가지는 필드는 초기값을 대입하는 것이 좋음
- 생성자 오버로딩
- 생성자를 통해 필드를 초기화할 때 오버로딩을 적용할 수 있음
- 생성자 선언 및 호출
- this, this() (this, this())
- this
- this는 객체 즉, 인스턴스 자신을 표현하는 키워드
- 객체 내부 생성자 및 메서드에서 객체 내부 멤버에 접근하기 위해 사용
- this()
- this(…)는 객체 즉, 인스턴스 자신의 생성자를 호출하는 키워드
- this
- 접근 제어자 (접근 제어자, Getter, Setter, 제어자의 조합)
- 접근제어자
- public
- protected
- default
- private
- static
- final
- abstract
- Getter
- 외부에서 객체의 private 한 필드를 읽을 필요가 있을 때 Getter 메서드를 사용
- 메서드 이름의 규칙은 : get + 필드 이름(첫 글자 대문자)
- Setter
- 외부에서 객체의 private 한 필드를 저장/수정할 필요가 있을 때 Setter 메서드를 사용
- 메서드 이름의 규칙은 : set + 필드 이름(첫 글자 대문자)
- 제어자의 조합
- - 클래스 : public, default, final, abstract
- 메서드 : public, protected, default, private, final, abstract, static
- 멤버 변수 : public, protected, default, private, final, static
- 지역변수 : final
- - 클래스 : public, default, final, abstract
- 접근제어자
- 패키지, import (package, import)
- package
- 패키지란 클래스의 일부분이면서 클래스를 식별해 주는 용도
- 패키지는 상위 패키지와 하위 패키지를 도트(.)로 구분
- Java는 패키지의 경로를 통해 이를 구분
- import
- 다른 패키지에 있는 클래스를 사용하기 위해 명시하는 키워드
- 서로 다른 패키지에 있는 같은 이름의 클래스를 동시에 사용하려면 해당 클래스에 패키지 명을 전부 명시
- package
- 상속 (상속, 클래스 간 관계, 단일상속, 다중상속, final 클래스, final 메서드, object)
- 상속
- 상속의 사전적 정의는 부모가 자식에게 물려주는 행위
- 객체 지향 프로그램에서도 부모 클래스의 필드와 메서드를 자식 클래스에게 물려줄 수 있음
- 상속을 사용하면 코드의 중복이 제거되고 재사용성이 크게 증가하여 생산성과 유지 보수성에 매우 유리
- 클래스 간의 상속은 extends 키워드를 사용하여 정의
- 클래스 간 관계
- 상속관계
- ~은 ~이다
- 고래는 포유류다.
- 포함관계
- ~은 ~을 가지고 있다.
- 자동차는 문을 가지고 있다.
- 상속관계
- 단일상속과 다중상속
- Java는 다중 상속을 허용하지 않음
- 다중 상속을 허용하면 클래스 간의 관계가 복잡해지는 문제
- final 클래스, final 메서드
- 클래스에 final 키워드를 지정하여 선언하면 최종적인 클래스가 됨으로 더 이상 상속할 수 없는 클래스
- 메서드에 final 키워드를 지정하여 선언하면 최종적인 메서드가 됨으로 더 이상 오버라이딩할 수 없는 메서드
- 상속
- 오버라이딩 (오버라이딩, super, super())
- 오버라이딩
- 부모 클래스로부터 상속받은 메서드의 내용을 재정의 하는 것을 오버라이딩
- 아래 조건을 만족해야 함
- 1. 선언부가 부모 클래스의 메서드와 일치
- 2. 접근 제어자를 부모 클래스의 메서드 보다 좁은 범위로 변경할 수 없음
- 3. 예외는 부모 클래스의 메서드 보다 많이 선언할 수 없음
- super
- super는 부모 클래스의 멤버를 참조할 수 있는 키워드
- 객체 내부 생성자 및 메서드에서 부모 클래스의 멤버에 접근하기 위해 사용
- 자식 클래스 내부에서 선언한 멤버와 부모 클래스에서 상속받은 멤버와 이름이 같을 경우 이를 구분하기 위해 사용
- super()
- super(…)는 부모 클래스의 생성자를 호출할 수 있는 키워드
- 객체 내부 생성자 및 메서드에서 해당 객체의 부모 클래스의 생성자를 호출하기 위해 사용
- 자식 클래스의 객체가 생성될 때 부모 클래스들이 모두 합쳐져서 하나의 인스턴스가 생성
- 부모 클래스의 멤버들의 초기화 작업이 먼저 수행이 되어야 함
- 따라서 자식 클래스의 생성자에서는 부모 클래스의 생성자가 호출
- 또한 부모 클래스의 생성자는 가장 첫 줄에서 호출
- 오버라이딩
- 다형성 (참조변수의 타입 변환, 다형성, instanceof)
- 참조변수의 타입변환
- 자동 타입 변환
- 부모 타입 변수 = 자식 타입 객체; 는 자동으로 부모 타입으로 변환이 일어남
- 강제 타입 변환
- 부모 타입 객체는 자식 타입 변수로 자동으로 타입 변환되지 않음
- 타입 변환 연산자를 사용하여 강제로 자식 타입으로 변환할 수 있음
- 자동 타입 변환
- 다형성
- 여러 가지 형태를 가질 수 있는 능력
- 참조 변수 타입 변환을 활용해서 다형성을 구현할 수 있음
- instanceof
- 다형성 기능으로 인해 해당 클래스 객체의 원래 클래스명을 체크하는 것이 필요한데 이때 사용할 수 있는 명령어
- 참조변수의 타입변환