[자바 인강] 2주차 학습일지 -2
2-01. 객체와 객체 지향 프로그래밍
객체(Object)
객체를 정의 -> 기능 구현 -> 각 객체간의 협력을 구현
2-02. 생활 속에서 객체 찾아 클래스로 구현해 보기
- 객체 생성 예시
public class Student {
int studentNumber;
String studentName;
...
- 객체를 정의
- 각 객체의 속성을 멤버 변수로 역할을 메서드로 구현
- 각 객체간의 협력을 구현
- 클래스는 대문자로
- public class는 파일에 하나! class 자체는 여려 개 구현 가능
2-03. 함수와 메서드
- 함수 생성 예시
int add(int num1, int num2) {
int result;
result = num1 + num2;
return result;
}
메서드(method)
- 객체의 기능을 구현하기위해 클래스 내부에 구현되는 함수
2-04. 객체의 속성은 멤버 변수로, 객체의 기능은 메서드로 구현한다
2-05. 인스턴스 생성과 힙 메모리 (heap memory)
인스턴스 (instance)
- new 키워드를 사용하여 클래스를 메모리에 생성한 상태
- 생성된 인스턴스는 Heap 메모리 (동적 메모리)에 할당됨
2-06. 생성자에 대해 알아봅시다 (constructor)
- 객체를 생성할 때 new 키워드와 함께 사용 - new Student();
- 생성자는 반환 값이 없고, 클래스의 이름과 동일
...
Student studentLee = new Student(12345, "Lee", 3);
...
public class Student {
public int studentNumber;
public String studentName;
public int grade;
public Student(int studentNumber, String studentName, int grade) {
this.studentNumber = studentNumber;
this.studentName = studentName;
this.grade = grade;
}
2-07. 여러가지 생성자를 정의하는 생성자 오버로딩 (overloading)
- 생성자는 여러개 구현 가능
public class UserInfo {
public String userId;
public String userPassWord;
public String userName;
public String userAddress;
public String phoneNumber;
public UserInfo(){}
public UserInfo(String userId, String userPassWord, String userName) {
this.userId = userId;
this.userPassWord = userPassWord;
this.userName = userName;
}
2-08. 복습해봅시다 (객체 구현하기)
2-09. 참조 자료형 변수
2-10. 접근 제어 지시자(access modifier)와 정보은닉(infomation hiding)
접근 제어 지시자(access modifier)
- private : 같은 클래스 내부에서만 접근 가능
- default : 같은 패키지 내부에서만 접근 가능 (상속 관계라도 패키지가 다르면 접근 불가)
- protected : 같은 패키지, 상속관계의 클래스에서 접근 가능
- public : 클래스 외부 어디에서나 접근 가능
get()/ set() 메서드
private 으로 선언된 멤버 변수 (필드)에 대해 접근, 수정할 수 있는 메서드를 public으로 제공
정보 은닉
객체 오류를 방지하고 더 효율적인 객체 활용을 위해 외부에서 접근 가능한 정보를 최소화
package ch10;
public class BirthDay {
private int day;
private int month;
private int year;
private boolean isValid;
public int getDay() {
return day;
}
public void setDay(int day) {
switch(month){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
if(day < 1 || day > 31) {
isValid = false;
} else {
isValid = true;
this.day = day;
}
break;
case 2:
if(day < 1 || day > 28) {
isValid = false;
} else {
isValid = true;
this.day = day;
}
break;
case 4: case 6: case 9: case 11:
if(day < 1 || day > 30) {
isValid = false;
} else {
isValid = true;
this.day = day;
}
break;
};
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
if( month < 1 || month > 12)
{
isValid = false;
} else {
isValid = true;
this.month = month;
}
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public void showDate() {
if(isValid) {
System.out.println(year + "년 " + month + "월 " + day + "일 입니다.");
} else {
System.out.println("유효하지 않은 날짜입니다.");
}
}
}
2-11. 캡슐화 (encapsulation)
꼭 필요한 정보와 기능만 외부에 오픈함
각각의 메서드나 멤버 변수를 접근함으로써 발생하는 오류를 최소화
2-12. 객체 자신을 가리키는 this
this
인스턴스 자신의 메모리를 가리킴
2-13. 객체 간의 협력 (collabration)
객체 간에는 협력이 이루어짐
2-14. 버스 타고 학교 가는 학생의 과정을 객체 지향 프로그래밍으로 구현해보기
public class Student {
String studentName;
int money;
public Student(String studentName, int money) {
this.studentName = studentName;
this.money = money;
}
public void takeBus(Bus bus) {
bus.take(1000);
this.money -= 1000;
}
public void takeSubway(Subway subway) {
subway.take(1200);
this.money -= 1200;
}
public void showInfo() {
System.out.println(studentName + "님의 남은 돈은 " + money + "원 입니다");
}
}
public class Bus {
int busNumber;
int passengerCount;
int money;
public Bus(int busNumber) {
this.busNumber = busNumber;
}
public void take(int money) {
this.money += money;
passengerCount++;
}
public void showBusInfo() {
System.out.println(busNumber + "번 버스의 승객은 " + passengerCount + "명 이고, 수입은 " + money + "원 입니다");
}
}
public class Subway {
int lineNumber;
int passengerCount;
int money;
public Subway(int lineNumber) {
this.lineNumber = lineNumber;
}
public void take(int money) {
this.money += money;
passengerCount++;
}
public void showSubwayInfo() {
System.out.println(lineNumber + "번 지하철의 승객은 " + passengerCount + "명 이고, 수입은 " + money + "원 입니다");
}
}
public class TakeTransTest {
public static void main(String[] args) {
Student studentJ = new Student("James", 5000);
Student studentT = new Student("Tomas", 10000);
Bus bus100 = new Bus(100);
Subway subwayGreen = new Subway(2);
studentJ.takeBus(bus100);
studentT.takeSubway(subwayGreen);
studentJ.showInfo();
studentT.showInfo();
bus100.showBusInfo();
subwayGreen.showSubwayInfo();
}
}
2-15. 복습해봅시다 (객체 협력)
public class Taxi {
String taxiName;
int money;
public Taxi(String taxiName) {
this.taxiName = taxiName;
}
public void take(int money) {
this.money += money;
}
public void showTaxiInfo() {
System.out.println(taxiName + " 수입은 " + money + "원 입니다.");
}
}
public class Student {
...
public void takeTaxi(Taxi taxi) {
taxi.take(10000);
this.money -= 10000;
}
}
public class TakeTransTest {
...
Student studentE = new Student("Edward", 20000);
Taxi newTaxi = new Taxi("잘 간다 운수택시");
studentE.takeTaxi(newTaxi);
studentE.showInfo();
newTaxi.showTaxiInfo();
}
2-16. 여러 인스턴스에서 공통으로 사용하는 변수를 선언하자 - static 변수
여러 인스턴스가 공유하는 기준 값이 필요한 경우
ex) 학번, 사번 등등
static int serialNum~
2-17. static메서드의 구현과 활용, 변수의 유효 범위
- static 메서드에서는 인스턴스 변수를 사용할 수 없음
- 멤버 변수가 많으면 인스턴스 생성 시 쓸데없는 메모리가 할당됨
2-18. static 응용 - 싱글톤 패턴(singleton pattern)
인스턴스가 한 개만 생성되어야 하는 경우 사용하는 디자인 패턴
2-19. 복습해봅시다 (static과 싱클톤 패턴)
public class Car {
public static int serialNumber = 10000;
private int carNum;
public int getCarNum() {
return carNum;
}
public void setCarNum(int carNum) {
this.carNum = carNum;
}
public Car() {
serialNumber++;
carNum = serialNumber;
}
}
public class CarFactory {
public static CarFactory instance = new CarFactory();
public CarFactory() {
}
public static CarFactory getInstance() {
if( instance == null) {
instance = new CarFactory();
}
return instance;
}
public Car createCar() {
Car car = new Car();
return car;
}
}
2-20. 자료를 순차적으로 한꺼번에 관리하는 방법 - 배열(array)
2-21. 객체 배열 사용하기
객체 배열의 경우엔 요소가 되는 객체의 주소가 들어갈(4바이트, 8바이트) 메모리만 할당
객체 배열 복사하기
- System.arrayCopy(src, srcPos, dest, destPos, length)
** 얕은 복사
- 객체 주소만 복사 -> 한 요소를 수정하면 같이 수정 됨
...
System.arraycopy(library, 0, copyLibrary, 0, 5);
...
** 깊은 복사
...
copyLibaray[0] = new Book();
copyLibaray[1] = new Book();
copyLibaray[2] = new Book();
copyLibaray[3] = new Book();
copyLibaray[4] = new Book();
for(int i = 0; i< library.length; i++) {
copyLibaray[i].setTitle(library[i].getTitle());
copyLibaray[i].setAuthor(library[i].getAuthor());
}
library[0].setTitle("나목");
library[0].setAuthor("박완서");
...
2-22. 2차원 배열 사용하기
int[][] arr = new int[2][3];
자료형 배열이름 = new 자료형[행개수][열개수]
2-23. 객체 배열을 구현한 클래스 ArrayList
Author And Source
이 문제에 관하여([자바 인강] 2주차 학습일지 -2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@devyeon/자바-인강-2주차-학습일지-2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)