4시까지 코딩테스트 연습을 하면서 준비를 하고 시험을 쳤다. 물론 시험이 끝나고도 코딩 테스트 연습은 계속되었다....
코딩테스트 문제 풀이 해설 영상: https://www.youtube.com/watch?v=GoouZy4n8CE
영상 찍는 것도 어색하고 설명하는것도 어색해서 고생했다......
Java의 정석 책을 보면서 한번 원래 알던 지식을 다시 한번 정리해보는 시간을 가졌다.
객체 지향 언어의 주요 특징
코드의 재사용성이 높다.
코드의 관리가 용이하다.
신뢰성이 높은 프로그래밍을 가능하게 한다.
너무 객체 지향개념에 얽매여서 고민하기 보다는 일단 프로그램을 기능적으로 완성한 다음 어떻게 하면 보다 객체지향적으로 코드를 개선할 수 있을지를 고민하여 점차 개선해 나가는것이 좋다.
클래스의 정의
클래스란 객체를 정의해 놓은 것이다.
클래스의 용도
클래스는 객체를 생성하는데 사용된다.
객체를 사용한다는것은 객체가 가지고 있는 속성과 기능을 사용한다는 뜻이다.
객체와 인스턴스
클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화라고 하며, 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 한다.
객체의 구성 요소
속성(property) - 맴버변수, attribute(특성), 필드, 상태
기능(function) - 메서드, 함수, 행위
TV t; <===== 참조변수 t를 선언. 메모리에 참조변수 t를 위한 공간이 마련된다.
t = new TV(); <======= 연산자 new에 의해 TV클래스의 인스턴스가 메모리의 빈 공간에 생성된다.
TV t1 = new TV();
TV t2 = new TV();
t2 = t1; <========== t1은 참조변수이므로, 인스턴스의 주소를 저장하고 있다.
이 문장이 수행되면, t2가 가지고 있던 값은 잃어버리게 되고 t1에 저장되어 있던 값이 t2에 저장되게 된다.
그렇게 되면 t2 역시 t1이 참조하고 있던 인스턴스를 같이 참조하게 되고, t2가 원래 참조하고 있던 인스턴스는 더 이상 사용할 수 없게 된다.
클래스의 또 다른 정의
클래스는 데이터와 함수의 결합이다.
클래스는 사용자정의 타입이다.
변수와 메서드
class Variable {
int iv; // 인스턴스 변수
static int cv; // 클래스변수(static 변수, 공유 변수) <==== 한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야하는 속성의 경우
void method()
{
int lv = 0; // 지역변수
}
}
메서드를 사용하는 이유
높은 재사용성
중복된 코드의 제거
프로그램의 구조화
JVM의 메모리 구조
3가지 주요 영역(method area, call stack, heap)
프로그램 실행 중 어떤 클래스가 사용되면, JVM은 해당 클래스의 클래스파일을 읽어서 분석하여 클래스에 대한 정보를 이 곳에 저장한다. 이 때, 그 클래스의 클래스 변수도 이 영역에 함께 생성된다.
인스턴스가 생성된느, 공강, 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다.인스턴스 변수들이 생성되는 곳이다.
호출 스택은 메서드의 작업에 필요한 메모리 공간을 제공한다. 메서드가 작업을 마치면 할당되었던 메모리공간은 반환되어 비워진다.
호출 스택의 특징
기본형 매개변수: static void change(int x) { <====== int x
참조형 매개변수: static void change(Data d) { <===== Data d
기본형 매개변수는 변수의 값을 읽기만 할 수 있고, 참조형 매개변수는 변수의 값을 읽고 변경할 수 있다.
2주차가 마무리 되었다. 좋은 팀원들과 능률적으로 스터디를 마친것 같다. 다음주가 주특기 과정이 기대된다.