자바는 객체지향 프로그래밍이다.

그리고 객체란, 우리가 어떠한 논리적인 개념, 현실에 존재하는 어떤 것을 지칭하며, 자바는 이러한 객체를 컴퓨터에 구현하기 위해 사용하는 프로그램이다.


우리는 이 객체를 컴퓨터로 구현하고자 할 때, 일종의 청사진을 그린다.

다른 말로 설계도라고 부를 수도 있으며, 우리는 이것을 클래스(class)라고 부른다.



1. 클래스(class)

클래스는 일종의 틀이다.

우리가 객체를 설명하기 위해서 사용하는 커다란 틀이다.

우리가 이 안에 어떠한 속성과 행위를 집어넣느냐에 따라, 우리가 머릿속으로 상상한 객체가 컴퓨터로 구현된다.

단순히 네모난 모양을 만들기 위한 틀이 있을 수도 있지만, 반대로 복잡한 모양을 만들기 위해, 이 틀 안에 또다른 틀을 넣을 수 있는 것처럼, 클래스 안에 또다른 클래스를 넣을 수도 있다.


public class Dog{           // Dog이라는 이름을 가진 파일명과 동일하게 작성해야 한다.

public String name; // 멤버변수(필드변수)를 정의하여 후에 있을 메서드나 생성자에 사용하기 위해 미리 정의한다(?)

int age;

.

.


2. 생성자(contructor)

생성자는 인스턴스를 생성하기 위해 필요한 전제 조건이다. 

또한, 이 생성자를 통해 인스턴스가 만들어질 때 변수의 값을 초기화하기 위해 사용된다. 이 경우, 다른 메서드를 통해 값이 변하게 되었을 때, 그 값으로 인해 예상치 못한 결과가 나타날 수 있기 때문에, 이를 생성자로 초기화한다.(?)


public Dog(String name, int age){ 

this.name = name;

this.age = age;

.

.

생성자와 메서드가 비슷해서 헷갈렸었다.

구분하기로는 생성자의 경우 값을 반환할 수 없어서 void 키워드를 사용할 수 없으며, 메서드는 void가 붙을 수도 있고, 반환할 값을 넣을 수도 있다.(?)



3. 인스턴스(=객체)

큰 객체를 조그맣게 나눈 것이라 보면 된다.

예를 들어 개라는 객체가 있다면, 이 객체는 이름, 성, 종, 나이 등이 존재할 것이고, 이러한 속성을 정의하고자 할 때 객체를 인스턴스화 시킬 수 있다.


Dog dog = new Dog(String name, int age);   //new 키워드를 통해 dog라는 인스턴스를 만들고, Dog의 생성자를 호출할 수 있다.




4.메서드(method)

이름, 나이, 성 등의 속성이 있다면, 이러한 것들이 어떻게 행동하는지를 정의하는 것이 메서드다.

예를 들어, 핸들이 있다면 왼쪽으로 꺾일 수도, 오른쪽으로 꺾일 수도 있고, 꺾이지 않고 중앙에 있을 수도 있다. 이러한 것을 정의하는 것이 메서드다.


public void bark(){

System.out.println("bark, " + name +'!');

.

.

Dog.bark();





a16711aa372a76b660b8f68b12d21a1dd085d63bc1



결과적으로

1. 클래스라는 틀이 있어야 한다.

2. 생성자라는 규칙을 클래스 내부에서든, 외부에서든 호출할 수 있으면 된다.

3. 그 안에 인스턴스나 메서드를 넣는 건 내 ㅈ대로 해라.

4. 어느 클래스에 어떠한 접근 제어 지시자가 있는지 알고 있으면, 구조 짜는게 쉬울 거다(?)


이거 맞는 건지 조언 좀.