AVA 1일차 - 20210110

20704 단어 JavaJava

객체, 클래스, 인스턴스

  • 객체 : 의사나 행위가 미치는 대상
  • 클래스 : 객체를 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);
    }
}

좋은 웹페이지 즐겨찾기