객체 배열 생성 및 소멸 (Java와 다른 점) 객체 배열 생성 * 객체 배열에서 JAVA와 차이점이 많다. // JAVA의 경우 Vector[] list = new Vector[10]; //C++의 경우 Vector* list = new Vector[10]; * 코드상에서는 비슷하지만 내부적으로 전혀 다른 구조를 가진다. * Java = Heap에 객체 포인터를 배열로 생성 * C++ = Heap에 실제 객체를 배열로 생성 * C++는 객체를 배열로 생성한다. 기본 생성자는 초기화가 이루어지지 않는데, 배열로 생성해도 초기화는 없다. * Java는 바로 객체 배열을 만들 수 없다. 포인터 배열이 만들어지며, 객체를 따로 생성해 연결해야 한다. (자바에서 배열은 이중 포인터를 사용해야 한다.) (포인터를..
상속과 컴포지션 상속과 컴포지션, 재사용성 * 상속과 컴포지션은 재사용성을 위해 사용된다. * 둘 중 어떤 걸 사용해도 구현은 가능하다. (대부분) 특수한 상황에서 차이점이 나타나기도 한다. (성능, 관리 등등) * 특별한 상황이 아니라면, 사람이 생각하는 것처럼 만드는게 좋다. 사람이 생각하기 편하게 설계하는 것이 가독성도 높고, 이해가 편하기 때문이다. 성능 * 성능은 상속이 더 좋다. * 상속은 객체 생성 시 메모리가 하나의 덩어리로 만들어진다. 컴포지션은 각각 메모리가 생성되고 분산되어 있다. * 컴포지션의 분산된 메모리는 실행 성능의 큰 영향을 미친다. (CPU 캐시메모리 메모리) 형태로 데이터가 전송되는데, 캐시메모리는 사용할 메모리의 주변 메모리까지 한꺼번에 가져온다. * 즉, 현재 사용한 ..
내포 클래스 Nested Class 2가지 내포 클래스 * 내포 클래스란 클래스 안에서 선언된 클래스를 만한다. // 외부 클래스 public class Outer{ // 내포 클래스 public class Nested{ } } * 외부 클래스는 접근지정자로 public, package만 사용할 수 있지만, 내포 클래스는 protected, private를 추가로 더 사용할 수 있다. * 클래스이므로 객체, 생성자, 접근지정자, 메서드 모두 만들고 사용할 수 있다. * 자바에는 2가지 방법의 내포 클래스가 있다. 1. 비정적 내포 클래스 (Non-static Nested Class) (내부 클래스라고도 한다. (Inner Class)) 2. 정적 내포 클래스 (static nested class) * C..
getter와 setter private 멤버 변수의 문제점 * 멤버 변수를 private로 하면 외부에서 정보를 보거나 변경하지 못한다. 문제는 정보 보기와 변경을 둘 다 못한다는 것이다. * 정보는 보여주지만 변경은 하지 못하게 하고 싶다. 이런 제어는 접근제어자로만은 불가능하다. * 따라서 private 멤버 변수는 그대로 두고 get과 set를 담당하는 메서드를 만들어 원하는 제어가 가능하도록 한다. * 이런 함수를 getter함수, setter함수라고 한다. 언제 사용함 * 멤버변수의 정보 보기와 변경의 접근제어자를 다르게 하고 싶을 때 * 멤버 변수를 바꿀 때 조건을 추가하고 싶을 때 * 사용자가 원하는 데이터가 직접 저장되어있는 게 아닌 계산을 해야만 하는 상황일 때 getter / sett..
자바 JAVA Write Once Run Anywhere * 자바는 플랫폼 독립적이기 위해 만들어졌다. * 자바는 초기에 임베디드처럼 다양한 OS와 CPU가 사용되는 환경을 위해 만들어졌다. * 기존에 언어들은 아키텍쳐나 OS가 달라지면 그에 맞는 컴파일러가 필요했다. 환경마다 다른 컴파일러를 사용하고, 다른 코드를 짜는 것은 비용과 시간이 많이 들었다. * 때문에 자바는 플랫폼에서 독립적으로 만들어졌고 이는 인터넷과 웹에서도 큰 장점이었다. 자바는 * 자바에서 모든 건 클래스 안에 있어야 한다. * .java 파일에는 최고 레벨의 public class가 하나만 있어야 한다. * 자바의 메인 함수는 반드시 signature를 그대로 따라야 한다. public static void main(String[..