[Java 객체지향] 객체 배열
·
Java & Kotlin
객체 배열 기본 자료형 배열은 선언하면 배열의 크기만큼 메모리가 할당된다 반면 객체 배열은 선언하게 되면 객체를 위한 공간이 아닌 객체의 주소가 들어갈 공간만 할당된다. 객체는 모두 null로 초기화된다. 각 요소에 들어갈 객체는 직접 생성을 해주어야 한다. Book.java package ch21; public class Book { private String title; private String author; public Book() {}// default constructor public Book(String title, String author) { this.title = title; this.author = author; } public String getTitle() { return titl..
[Java 객체지향] 배열
·
Java & Kotlin
배열 (Array) 동일한 자료형의 순차적 자료구조 요소(Element)와 인덱스로 구성 물리적 위치와 논리적 위치가 동일하다. (각 element의 address가 인접) ↔ linked list는 논리적 위치는 인접하지만 물리적 위치는 다를 수 있음 배열의 주소는 첫번째 element를 가리킨다. 자바에서는 자바 유틸 패키지 안에서 제공되는 ArrayList를 사용한다. 장단점 - 장점 : 인덱스 연산자 [ ]를 이용해 특정 element를 참조하는 것이 빠르다. - 단점 : 배열은 중간에 데이터가 비면 안되므로 수정할 때 Operation 수행 시간이 길다. O(n) insert : 데이터 한칸씩 뒤로 밀림 / delete : 데이터 한칸씩 앞으로 당김 선언 배열을 선언할 때는 길이(length)를..
[Java 객체지향] Singleton Pattern 응용 문제
·
Java & Kotlin
문제 자동차 공장이 있습니다. 자동차 공장은 유일한 객체이고, 이 공장에서 생산되는 자동차는 제작될 때마다 고유의 번호가 부여됩니다. 자동차 번호가 10001부터 시작되어 자동차가 생산될 때마다 10002, 10003 이렇게 번호가 붙도록 자동차 공장 클래스, 자동차 클래스를 구현하세요 다음 CarFactoryTest.java 테스트 코드가 수행 되도록 합니다. CarFactoryTest.java package ch19; public class CarFactoryTest { public static void main(String[] args) { CarFactory factory = CarFactory.getInstance(); Car mySonata = factory.createCar(); Car yo..
[Java 객체지향] Singleton Pattern (static 응용)
·
Java & Kotlin
Singleton Pattern 디자인 패턴 : 소프트웨어 설계할 때 공통적으로 발생하는 문제에 대한 재사용할 수 있는 해결책이다. 디자인 패턴을 사용해서 설계하면 프로그램의 수정이 용이하고, 유지 보수가 쉬우며 확장성이 크다. 하나의 클래스에서 여러 개의 인스턴스가 생성되는 경우가 대다수지만 인스턴스가 여러 개일 때 문제가 생기는 경우가 있을 수 있다. (e.g. 날짜, 회사 ..) Singleton Pattern : 디자인 패턴의 일종으로 프로그램에서 인스턴스가 단 한개만 생성되어야 하는 경우에 사용한다. 예제 코드 Company.java 1) 클래스 내부에서 private으로 유일한 인스턴스를 생성한다. static으로 변수를 설정하는 것은 static method에서 사용하기 위함, private..
[Java 객체지향] Static 메서드
·
Java & Kotlin
Static 메서드 메서드가 수행되려면 메서드 내부에 있는 변수들은 메모리가 할당된 상태여야 한다. 인스턴스 변수는 인스턴스 생성이 완료되어야 메모리에 할당된다. static 메서드는 인스턴스가 생성되기 전, 프로그램이 로드되는 시점부터 사용될 수 있다. 따라서 static 메서드에서는 생성이 완료되지 않은 인스턴스 변수(멤버 변수)를 사용할 수 없다. 하지만 static 변수는 이미 존재하므로 일반 메서드 안에서의 사용이 가능하다. Employee.java의 static 메서드 getSerialNum() 메서드 내에서 생성된 지역변수는 사용하는데 문제가 없다. public static int getSerialNum() { int i = 0;// 메서드 내부에 선언된 지역변수. 메서드 호출시 생성 & 완..
[Java 객체지향] Static 변수
·
Java & Kotlin
Static 변수 인스턴스는 각각 다른 메모리 공간에 할당되어 다른 멤버 변수 값을 가진다. 하지만 같은 클래스에서 공유해야 할 변수가 필요한 경우가 발생할 수 있다. 예를 들어 고유 번호를 만든다고 할 때 중복된 값이 생성되면 안된다. (e.g. 학번, 카드번호, 사번 ...) static 변수는 이를 판단하기 위한 기준값을 설정하는데 쓰인다. 클래스 변수, 정적 변수라고도 한다. Static 변수의 메모리 공간 인스턴스는 동적 메모리인 힙 메모리에 생성된다. static 변수는 인스턴스가 생성될 때 만들어지지 않고 프로그램이 메모리에 로드되는 순간 생성된다. 프로그램이 메모리에 로드되면 Data 영역, Code 영역 두가지 영역으로 나뉘어진다. static 변수는 프로그램이 메모리에서 unload 되..
[Java 객체지향] 객체 간 상호작용 구현해보기
·
Java & Kotlin
객체지향 프로그래밍 할 때 고려할 점 1. 무엇을 객체로 구현할 지 정해야 한다. 2. 그 객체의 역할에 따른 속성과 기능을 구현해야 한다. 3. 하나의 객체는 객체의 이름에 맞는 유일한 기능을 해야한다. 객체 간 상호작용 객체 간 상호작용을 위한 정보 전달은 메세지 전달을 통해 이루어지기도 하고, 객체 자체가 매개 변수로 전달될 수 도 있다. 예제 프로그램 1) 학생이 버스나 지하철을 타면 요금을 지불하고 버스나 지하철은 그만큼의 수익을 얻고 승객 수가 늘어난다. Student.java 학생 클래스는 이름과 가지고 있는 금액을 속성으로 갖는다. takeBus, takeSubway는 매개 변수로 각각 Bus, Subway 클래스의 객체를 받는다. take 메서드를 이용해 버스와 지하철의 수입이 증가한다...
[Java 객체지향] this 키워드
·
Java & Kotlin
this 키워드 역할 인스턴스 자신의 메모리를 가리킨다. 생성자 내에서 또 다른 생성자를 호출한다. 생성된 인스턴스의 메모리 주소값을 가진다. 참조 변수는 외부에서 인스턴스의 주소 값 (참조 값)을 가리킨다. this 키워드는 인스턴스 내부에서 자신의 메모리 주소 값을 가리킨다. 말은 어렵지만 결국 하나의 클래스에서 생성된 참조 변수와 인스턴스의 this 키워드는 같은 값을 가진다는 것이다. 예시 저번에 만든 CheckDate 클래스를 이용해서 참조변수, this, 인스턴스의 관계를 알아보자. CheckDate의 인스턴스를 생성하고 setDay 메서드를 이용해서 date의 멤버변수를 설정하는 코드이다. setDay() 메서드에서 this 키워드가 사용되는데, 이는 참조변수인 date와 같이 생성된 인스턴..
[Java 객체지향] 캡슐화
·
Java & Kotlin
캡슐화 (Encapsulation) 객체 지향의 특징 중 하나이다. 데이터와 데이터를 처리하는 기능을 묶어 놓은 것이다. 클라이언트 측에게 꼭 필요한 정보나 기능만 제공하고 일부는 은닉한다. 장점 사용하기 쉽다 : 클라이언트는 객체 내부의 복잡한 로직을 알아야 할 필요가 없다. 일관된 기능을 제공한다 : 클라이언트는 제공된 기능만 수행하면 내부 기능은 서비스를 제공하는 객체 쪽에서 수행된다. 디버깅이 용이하다 : 클라이언트 측에서 정보를 수정할 수 없기 때문에 오류 발생 시 객체의 코드만 확인하면 된다. 예제 코드 레포트를 만들어주는 프로그램 MakeReport.java - StringBuffer는 String을 쭉 연결해주는 버퍼 ( '+'로 연결하는 것은 오버헤드↑) - 사용자는 public으로 정의..