자바는 객체지향 프로그래밍이다.
그리고 객체란, 우리가 어떠한 논리적인 개념, 현실에 존재하는 어떤 것을 지칭하며, 자바는 이러한 객체를 컴퓨터에 구현하기 위해 사용하는 프로그램이다.
우리는 이 객체를 컴퓨터로 구현하고자 할 때, 일종의 청사진을 그린다.
다른 말로 설계도라고 부를 수도 있으며, 우리는 이것을 클래스(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();
결과적으로
1. 클래스라는 틀이 있어야 한다.
2. 생성자라는 규칙을 클래스 내부에서든, 외부에서든 호출할 수 있으면 된다.
3. 그 안에 인스턴스나 메서드를 넣는 건 내 ㅈ대로 해라.
4. 어느 클래스에 어떠한 접근 제어 지시자가 있는지 알고 있으면, 구조 짜는게 쉬울 거다(?)
이거 맞는 건지 조언 좀.
너무 어렵게 접근하느듯
클래스-> 변수들의 모임
생성자-> 그 클래스를 만들 때 변수들의 값을 정해줘야 만들수 있겠지? 그니까 생성자가 있는거임
객체 -> 클래스는 틀이니까, 생성자로 클래스를 만들 때 그걸 객체라고 함 ㅇㅇ 클래스라는 틀로 객체를 찍어내는거임? 뭘 통해서? 생성자를 통해서 ㅇㅇ
메소드-> 다른 언어의함수인데 괜히 메소드라고 해서 어려워보이는거임 ㅇㅇ
접근제어자->public: 모든곳에서 다 접근가능, private:클래스내부에서만접근가능, protected:상속관계까지만접근가능 ㅇㅋ?
너의 고추는 아무나 접근 못하잖음? 그니까 private이겠지
역시 질문하는게 맞았네. 감사함니다
근데 여친이 생겼음. 근데 여친은 니 고추에 접근 할 수 있잖음? 그렇다고 아무나 접근할 수는 없으니 protected인거임
근데 니가 쓴 이 질문글은 아무나 접근가능하지? public인거임
댓글 종합해서 글 내용 다시 압축해보셈 각 용어별로 최대 2문장으로 다시 평가해드림
Public제한자 ㅡ 모든 제한자가 접근가능. Protected -같은패키지내 있는 제한자들만 protec에 접근가능 or 다른패키지에 있어도 상속 관계라면 허용 default. ㅡ같은 패키지안에 있는 제한자들만 디폴트에 접근가능 or 다른패키지에 있으면 접근불가능 상속관계도 안됨 private - 같은 클래스 안에 있는 녀석들만 접근가능
여기서 문제 다른 패키지에 있는 default가 public에 접근 할 수있을까? Public은 모든 제한자의 접근을 허용한다는데