AVA 1일차 - 20210110
객체, 클래스, 인스턴스
- 객체 : 의사나 행위가 미치는 대상
- 클래스 : 객체를 Code로 구현한 것
- 인스턴스 : 클래스가 메모리 공간에 생성된 상태
student 객체 생성
public class Student {
int studentId;
String studentName;
int grade;
String address;
public String getStudentName( ) {
return studentName;
}
public void setStudentName(String name) {
studentName = name;
}
}
인스턴스 여러 개 생성하기
public class main {
public static void main(String[] args) {
Student student1 = new Student();
student1.studentName = "깜보";
System.out.println("student1.getStudentName() = " + student1.getStudentName());
Student student2 = new Student();
student2.studentName = "우간다";
System.out.println("student2.getStudentName() = " + student2.getStudentName());
}
}
new Student() 하면 Student 하나가 생성되는데 각 Student는 studentID, studentName 등의 멤버 변수를 가지고 있습니다. 이 변수를 기억하는 메모리가 힙 메모리 입니다.
참조 값 출력하기
public class main {
public static void main(String[] args) {
Student student1 = new Student();
student1.studentName = "깜보";
Student student2 = new Student();
student2.studentName = "우간다";
System.out.println("student1 = " + student1);
System.out.println("student2 = " + student2);
}
}
결과값 :
student1 = Student@2f7a2457
student2 = Student@566776ad
선언한 변수 student1, student2는 스택 메모리에 저장
Student 인스턴스는 힙 메모리에 저장된다.
스택(Stack)
함수를 호출 하면 그 함수만을 위한 메모리 공간이 할당 되는데, 이 메모리 공간을 스택(stack) 이라고 부릅니다. 메모리의 스택(stack) 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역입니다.
스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸합니다.
힙 메모리(heap)
힙(heap)은 프로그램에서 사용하는 동적 메모리(dynamic memory) 공간을 말합니다. 객체가 생성될 때 사용하는 공간이 힙(heap) 입니다
접근제어자
객체 지향 프로그램에서는 예약어를 사용해 클래스 내부의 변수나 메서드, 생성자에 대한 접근 권한을 지정할 수 있습니다. 이러한 예약어를 접근 제어자(access modifier)라고 합니다.
studentName을 private로 변경하는 순간 아래와 같은 에러 발생
그러기 때문에 getter(), setter()을 작성한다.
public class Student {
private int studentId;
private String studentName;
private int grade;
private String address;
public int getStudentId() {
return studentId;
}
public void setStudentId(int studentId) {
this.studentId = studentId;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
}
정보은닉이란?
public class MyDate {
public int day;
public int month;
public int year;
}
public classMyDateTest {
public static void main(String[ ] args){
MyDate date = new MyDate( );
date.month = 2;
date.day = 31;
date.year = 2018;
}
}
- 이렇게 멤버 변수를 public으로 할경우 접근이 제한되지 않으므로 정보의 오류가 발생
- 오류가 나면 해당 변수에 대입되지 못하도록 아래와 같이 수정
public class MyDate {
public int day;
public int month;
public int year;
public void setDay(int day) {
if(month == 2) {
System.out.println("오류입니다.");
} else{
this.day = day;
}
}
}
this 예약어
자신의 메모리를 가르키는 this
생성된 인스턴스 스스로를 가리키는 예약어
public class ThisExample {
public static void main(String[] args) {
BirthDay bDay = new BirthDay();
bDay.setYear(2000);
System.out.println("bDay = " + bDay);
bDay.printThis();
}
}
class BirthDay {
int day;
int month;
int year;
public void setYear(int year) {
this.year = year;
}
public void printThis() {
System.out.println(this);
}
}
Author And Source
이 문제에 관하여(AVA 1일차 - 20210110), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kkambodev/java저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)