-
Notifications
You must be signed in to change notification settings - Fork 1
Day 11(21.09.15)
※들어가기에 앞서
수업의 내용대로 정리를 하고 있기에 순서가 앞뒤로 오락가락할 수 있음. 예를들어 앞에서 메소드 얘기를 먼저 해놓고 갑자기 OOP 얘기를 시작한다는 것처럼...
현실 세계에서는 어떤 제품을 만들 때, 별개의 부품을 따로 개발하고 이를 조립하는 과정을 통해 제품 하나를 완성한다. 이와 마찬가지로, 소프트웨어를 개발할 때에도 부품에 해당하는 객체들을 먼저 만들고 이 객체들을 조립해서 프로그램을 완성하는 기법이 있는데, 이를 객체 지향 프로그래밍(Object Oriented Programming)이라고 한다.
객체의 정의는 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고, 다른 것과 식별 가능한 것을 말한다. 쉽게 말하면 우리 주변에 있는 모든 것들이 전부 객체가 될 수 있다. 객체는 속성과 동작으로 구성되어 있는데, 예를 들면 자동차의 경우 색상, 모델과 같은 속성이 있고, 달린다는 동작이 있다. 자바에선 이러한 속성과 동작을 필드와 메소드라고 부른다.
현실에서 객체는 설계도를 바탕으로 만들어진다. 자동차를 예로 들면, 사람들이 자동차를 이용하기 위해서는 공장에서 설계도를 보고 자동차를 만들어야 한다. 이는 OOP에서도 마찬가지다. 메모리에서 사용하고 싶은 객체가 있다면 설계도로 해당 객체를 만드는 작업이 필요한데, 이때 필요한 설계도의 개념이 자바에서는 클래스라는 것이다. 클래스에는 객체를 생성하기 위한 필드와 메소드가 정의되어 있는데, 클래스로 만들어진 객체를 해당 클래스의 객체(인스턴스)라고 한다. 그리고 이 클래스에서 객체를 만드는 과정을 객체화(인스턴스화)라고 한다. 자동차에서도 하나의 설계도로 여러 자동차를 만들 수 있듯이, 자바에서도 하나의 클래스에서 여러 개의 객체(인스턴스)를 생성할 수 있다.
클래스를 사용하기 위해선 먼저 클래스를 선언해야 하는데, 이때 클래스의 이름은 다른 클래스와 식별될 수 있도록 하는 것이 중요하므로 식별자 작성 규칙에 따라서 만들어야 한다.
- 하나 이상의 문자로 작성할것.
- 첫 번째 글자에는 숫자가 올 수 없다.
- '$', '_' 외의 특수 문자는 사용할 수 없다.
- 자바 키워드는 사용할 수 없다.
- 자바 언어는 영어 대소문자를 구분한다. 관례적으로는 클래스의 첫 글자는 대문자를 사용한다.
클래스를 선언하고 컴파일했다면 이제 객체를 생성할 설계도가 만들어진 것이다. 여기서 이 설계도인 클래스를 바탕으로 객체를 생성하려면 다음과 같이 new 연산자(생성자)를 사용하면 된다.
new 클래스명();new는 클래스로부터 객체를 생성시키는 연산자이다. new 연산자 뒤에는 생성자가 오는데, 생성자는 클래스명() 형태를 하고 있다. new 연산자로 생성된 객체는 메모리 영역 중에서도 heap 영역에 생성되는데, 현실에서도 물건을 놓은 위치를 모르면 물건을 사용할 수 없듯이 자바의 객체도 마찬가지이다. 그래서 new 연산자는 heap 영역에 객체를 생성시킨 후, stack 영역에 객체의 주소를 리턴하도록 되어 있다.
다음 프로그램은 Student 클래스를 선언하고 StudentExample 클래스의 main() method에서 Student 객체를 생성하는 과정을 나타낸 프로그램이다.
//Student.java
public class Student{
}//StudentExample.java
public class StudentExample {
public static void main(String[] args) {
Student s1 = new Student();
System.out.println("s1 변수가 Student 객체를 참조합니다.");
Student s2 = new Student();
System.out.println("s2 변수가 또 다른 Student 객체를 참조합니다.");
}
}result
s1 변수가 Student 객체를 참조합니다.
s2 변수가 또 다른 Student 객체를 참조합니다.예제가 실행되면 stack 메모리와 heap 메모리에 각각 클래스 변수와 객체가 생성된다. Student 클래스는 하나지만 new 연산자를 사용한 횟수만큼 객체가 메모리에 생성된다. 이러한 객체들은 Student이 인스턴스들이다. 같은 클래스에서 생성되었어도 각각의 Student 객체는 자신만의 고유 데이터를 가지면서 메모리에서 활동하게 된다. 즉, s1이 참조하는 Student 객체와 s2가 참조하는 Student 객체는 완전히 독립된 서로 다른 객체라는 뜻이다.