네이버 클라우드 활동 [o]
3주 4일차 강의 [o]
네이버 클라우드 사수 도움 요청 업무 [o]
팀장님 지시 업무 [o]
중간/일일 업무 보고 작성 [o]
정기 팀/동기 스터디 모임 참석 및 성실도 [o]
Java에서 메소드는 클래스 내에서 정의된 함수를 말합니다. 메소드는 특정 작업을 수행하거나 값을 반환하는 데 사용됩니다.
Java에서 클래스는 객체 지향 프로그래밍의 기본 구성 요소입니다. 클래스는 속성(필드)과 동작(메소드)을 포함하며, 객체를 생성하기 위한 틀로 사용됩니다.
클래스는 객체를 생성하기 위한 설계도이며, 객체는 클래스의 인스턴스입니다. 클래스는 객체의 속성과 동작을 정의하고, 객체는 클래스의 구조를 따라 생성됩니다.
클래스 정보은닉은 객체 지향 프로그래밍의 개념으로, 클래스의 내부 데이터를 외부에서 직접 접근하지 못하도록 제한하는 것을 말합니다. 이를 통해 데이터의 무결성과 보안을 유지할 수 있습니다.
Java에서 "this"는 현재 객체를 가리키는 참조 변수입니다. 주로 인스턴스 변수와 메소드의 매개변수 이름이 같을 때 사용되며, 객체 내부에서 현재 객체를 참조할 때 유용하게 활용됩니다.
// Java 클래스 예제
public class Car {
// 필드(속성)
String color;
int speed;
// 메소드(동작)
public void drive() {
System.out.println("Driving at speed: " + speed);
}
public void setColor(String newColor) {
this.color = newColor;
}
}
// Java 클래스와 객체 생성 예제
public class Main {
public static void main(String[] args) {
// 클래스를 이용하여 객체 생성
Car myCar = new Car();
// 객체의 속성 설정
myCar.color = "Red";
myCar.speed = 60;
// 객체의 메소드 호출
myCar.drive();
}
}
// Java 클래스 정보은닉 예제
public class BankAccount {
private double balance; // private으로 선언된 변수는 외부에서 직접 접근 불가
// 잔액 조회 메소드
public double getBalance() {
return balance;
}
// 입금 메소드
public void deposit(double amount) {
if (amount > 0) {
balance += amount;
}
}
// 출금 메소드
public void withdraw(double amount) {
if (amount > 0 && balance >= amount) {
balance -= amount;
}
}
}
// Java "this" 예제
public class Person {
String name;
public Person(String name) {
this.name = name; // "this"를 사용하여 인스턴스 변수에 접근
}
public void printName() {
System.out.println("Name: " + this.name); // "this"를 사용하여 현재 객체의 name 속성에 접근
}
}
부족한 점 : method에서 arraycopy를 사용하는 부분에서 복사 범위 설정 등이 부족했던것 같다.
스스로 시도해본 것들 :
📌 정수 배열 arr이 매개변수로 받고 arr에 최소한의 개수로 0을 추가한 배열을 return하는 함수
import java.util.Arrays;
public class PowerOfNumberTwo {
public static void main(String[] args) {
int[] arr1 = {1, 2, 3, 4, 5, 6};
int[] result1 = addZerosToPowerOfNumberTwo(arr1);
System.out.println(Arrays.toString(result1));
int[] arr2 = {58, 172, 746, 89};
int[] result2 = addZerosToPowerOfNumberTwo(arr2);
System.out.println(Arrays.toString(result2));
int[] arr3 = {9, 8, 7};
int[] result3 = addZerosToPowerOfNumberTwo(arr3);
System.out.println(Arrays.toString(result3));
int[] arr4 = {11, 22, 33, 44, 55, 66, 77, 88, 99, 1111, 2222, 333, 4444, 2222, 333, 4444, 2222, 333, 4444, 2222, 333, 4444, 2222, 333, 4444};
int[] result4 = addZerosToPowerOfNumberTwo(arr4);
System.out.println(Arrays.toString(result4));
}
public static int[] addZerosToPowerOfNumberTwo(int[] arr) {
int length = arr.length;
if ((length & (length - 1)) == 0) {
return arr;
}
int len;
for (len = 1; len < length; len *= 2) {
}
int[] result = new int[len];
for (int i = 0; i < length; i++) {
result[i] = arr[i];
}
return result;
}
}
📌 학생 클래스
public class Student {
private String name;
private int studentId;
private String major;
private int grade;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getStudentId() {
return studentId;
}
public void setStudentId(int studentId) {
this.studentId = studentId;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public Student(String name, int studentId, String major, int grade) {
this.name = name;
this.studentId = studentId;
this.major = major;
this.grade = grade;
}
}
📌 학생 정보 관리 시스템 클래스
public class StudentManagementSystem {
private Student[] students;
private int capacity;
private int size;
// 생성자
public StudentManagementSystem(int capacity) {
this.capacity = capacity;
this.students = new Student[capacity];
this.size = 0;
}
// 학생 추가 메서드
public void addStudent(Student student) {
if (size < capacity) {
students[size++] = student;
System.out.println("학생 추가: " + student.getName());
} else {
System.out.println("더 이상 학생을 추가할 수 없습니다.");
}
}
// 학생 삭제 메서드
public void removeStudent(Student student) {
for (int i = 0; i < size; i++) {
if (students[i].getStudentId() == student.getStudentId()) {
System.arraycopy(students, i + 1, students, i, size - i - 1);
size--;
System.out.println("학생 삭제: " + student.getName());
return;
}
}
System.out.println("해당 학생을 찾을 수 없습니다.");
}
// 학생 검색 메서드
public void searchStudent(int studentId) {
for (int i = 0; i < size; i++) {
if (students[i].getStudentId() == studentId) {
Student s = students[i];
System.out.println("학생을 찾았습니다:");
System.out.println("이름: " + s.getName());
System.out.println("학번: " + s.getStudentId());
System.out.println("전공: " + s.getMajor());
System.out.println("학년: " + s.getGrade());
return;
}
}
System.out.println("학생을 찾을 수 없습니다.");
}
}
📌 실행할 ThisStudentTest 클래스
public class ThisStudentTest {
public static void main(String[] args) {
StudentManagementSystem system = new StudentManagementSystem(2);
// 학생 추가
Student student1 = new Student("홍길동", 12345, "컴퓨터공학", 3);
system.addStudent(student1);
// 학생 추가
Student student2 = new Student("이순신", 67890, "수학", 2);
system.addStudent(student2);
System.out.println("학생 검색 시작하겠습니다.");
// 학생 검색
system.searchStudent(12345);
System.out.println("학생 검색 삭제하겠습니다.");
// 학생 삭제
system.removeStudent(student1);
System.out.println("학생 검색 시작하겠습니다.");
// 학생 검색 (삭제된 학생)
system.searchStudent(12345);
}
}
//학생 추가: 홍길동
//학생 추가: 이순신
//학생 검색 시작하겠습니다.
//학생을 찾았습니다:
//이름: 홍길동
//학번: 12345
//전공: 컴퓨터공학
//학년: 3
//학생 검색 삭제하겠습니다.
//학생 삭제: 홍길동
//학생 검색 시작하겠습니다.
//학생을 찾을 수 없습니다.
해결 내용 :
public void removeStudent(Student student) {
for (int i = 0; i < size; i++) {
if (students[i].getStudentId() == student.getStudentId()) {
// 삭제된 요소 이후의 요소들을 앞으로 한 칸씩 이동
System.arraycopy(students, i + 1, students, i, size - i - 1);
size--; // 배열의 크기를 조정하기 위해 size 변수 감소
System.out.println("학생 삭제: " + student.getName());
return;
}
}
System.out.println("해당 학생을 찾을 수 없습니다.");
}
알게된 점 :
System.arraycopy를 사용하여 배열 요소를 복사하고 이동시킬 수 있다.
배열에서 요소를 삭제할 때는 삭제된 요소 이후의 요소들을 한 칸씩 앞으로 이동시켜야 한다.
헷갈리거나 실수한 점 :
배열 요소를 삭제할 때 인덱스 계산이나 복사 범위 설정을 잘못하여 요소가 올바르게 이동되지 않을 수 있다.
삭제 후에 배열의 크기를 조정하는 부분을 빠뜨릴 수 있으며, 이로 인해 배열의 상태가 일관되지 않을 수 있다.
회고 : 클래스에 기본적인 것들과 활용하는법을 배우게 되서
활용하는 방법에 대해서 체득할 수 있게끔 많은 연습을 진행할 예정이다.