1. 객체지향프로그래밍(Object Oriented Programming)
[프로젝트 : HelloProject ]
1. 객체지향프로그래밍(Object Oriented Programming)
-프로그램을 객체들의 모임으로 구성한다. Object(객체)가 모든 것이다.
-이에 비해 c언어는 명령형 프로그래밍으로 취급한다.
2. Class는 Object(객체)를 만들어내는 틀이다.
- 클래스는 설계도의 개념으로 ---> 실제 객체들1,2,3을 만들어낸다.
- 클래스 안에는 객체들의 공통된 [ 속성(Field, propery)-값을 가지는 명사 ] 와 [ 메쏘드(Method)-어떤행위를 하게하는 동사 ]들이 선언된다.
객체가 만들어질 때, 클래스에서 선언된 [속성]과 [메쏘드]를 가지고 있게 된다.
3. 자바에서 실제 구현
(1) 클래스 생성
public class Avante {
private String color; //필드(속성)
public void openDoor(){ //메쏘드
System.out.println("문이 열렸다");
}
}
(2) 객체 생성 : 메인매쏘드(실행시킬 때, 필수적으로 만들어주는 것) 안쪽에서, 객체를 생성해본다.
Avante avante1 = new Avante();
- new라는 예약어와 Avante();라는 생성자를 통해 객체가 만들어진다. 여기서 avante1은 변수다.
- 객체들이 클래스에서 만들어지면, 각 객체는 새로운 것이다. 그래서 new라는 예약어를 사용한다.
Avante avante2 = new Avante();
- 변수 avante2 , 예약어 new, 생성자 Avante();를 통해 새로운 객체를 만들었다.
- 변수들이 실제 객체를 반영한다. 이를 변수가 객체를 '참조한다'라고 한다.
- 이때, Avante();라는 부분은 생성자(Constructor) 부분이다. 실제로 객체를 생성하는 부분이다.
avante1.color = "빨간색";
- 첫번째 객체가 클래스에 선언된 필드를 이용했다. 클래스에서는 private String으로 선언한 문자형 변수다(초기화 없이 변수선언한 것과 동일). 이걸 필드라 하고 사용방법은 위와 같다.
(3) 실습 [프로젝트명 HelloProject ]
-Hello라는 클래스를 메인함수를 포함해서 만들어준다. 간단한 출력문을 기입하고 ctrl+s로 저장하고 실행시킨다.
-이제 본격적인 클래스를 만들기 위해 다시 src에서 클래스를 메인함수를 포함해서 만든다.
- 클래스가 가지는 필드와 메쏘드 중, 필드를 추가시켜본다.
public class Avante {
String color; //필드 선언
void run() { //메쏘드 선언
System.out.println("아반테가 달려요.");
}
-이제 메인매쏘드에서 객체를 생성해본다. 객체 생성시는 new라는 예약어와, 클래스명과 동일한 생성자 Avante();를 통해 생성한다. 객체는 언제나 새롭게 만들어지는 것이다.
new Avante();
- 이제 생성된 객체가 실제로 사용이 되려면 Avante타입의 변수를 선언해서 참조해야만 사용가능하고, 계속 사용할 수 있다.
Avante a1 = new Avante();
- 새로운 객체를 만들어보자. 참조할 변수명은 달라야한다
Avante a2 = new Avante();
- 각 객체에 필드를 이용해서 색을 넣어보자.
a1.color = "빨간색";
a2.color = "파란색";
- 이제 출력하는 객체를 이용해서 클래스내부의 메쏘드를 호출해보자.
a1.run();
a2.run();
- 이제 필드를 사용한 객체를 출력해보자.
System.out.println("a1의 색은?"+a1.color);
System.out.println("a2의 색은?"+a2.color);
* (=)대입연산자는 오른쪽값을 왼쪽에 넣어주는 의미이다.
'Java > 심화 개념설명' 카테고리의 다른 글
6. 인터페이스(상세), JavaDoc, 상속, 형변환, 오버라이딩, 다형성, super(생성자/오버라이딩) [javase07] (0) | 2018.02.20 |
---|---|
5. 클래스, 생성자, Overloading, this, 접근제한자, 소유제한자, 객체, JVM메모리구조 [ javase06 ] (0) | 2018.02.19 |
4. 변수의 종류와 배열(Array) [프로젝트 : javase05] (0) | 2018.02.18 |
3. 인터페이스 & 패키지 와 API의 개념 (0) | 2018.02.08 |
2. 데이터 캡슐화 & 상속 & 이클립스 폰트 바꾸기 (0) | 2018.02.08 |