이번주.... Java 객체지향 프로그래밍 중 클래스 생성에 대해 스터디를 진행하라는 통보를 받고 진행을했다. 흐음..... 개발자 출신 팀원이 있어서 주도적으로 강의를 진행했다고 보면 될거 같다. 큰 그림을 정리하자면

Java에서 객체를 생성하기 위해 클래스를 만들고 그에 따른 생성사를 만들고 메소드를 만든다. 이것을 풀어서 설명하자면

지급받은 혼공자(혼자공부하는자바 내용 중 발췌)
1.객체 : 객체는 속성과 동작으로 구성되어 있다.
-> 해석
객체를 생성할 시 필드를 선언을 하는데 이부분에 속성 부분을 넣는다
ex)자동차의 속성: 제조회사, 색상, 크기 등등
자동차의 동작 : 달린다, 멈춘다.

자 여기서 속성이란 것은 모든 자동차가 가지고 있는 것을 말한다
그 어떤 자동차도 각 제조회사가 있고, 색상이 있고, 크기가 들어간다
이것은 필드 부분에 선언을 한다.

그렇다면 동작은 어떨까???? 진짜 간단하게 자동차가 어떻게 동작을 하는가? 이것을 생각하면 된다. 자동차는 크게 두가지의 동작을 수행한다
달린다. 또는 멈춘다

이 개념을 어디에 넣는냐면 메소드 부분에서 선언을 한다.
자 그럼 큰 흐름은 이렇다.
메인 클래스에서 해당객체를 선언한다 -> 메인 클래스에서 입력을 받는다 -> 메소드로 값이 입력된다 -> 메소드 부분에서 연산을 해서 값을 반환한다.
이렇게 내가 이해했다. 물론 틀릴 수도 있지만 큰그림은 이것이 맡는거 같다.

이 정도면 객체지향프로그래밍의 큰 그림은 그린것같다.


  1. 내용정리(의식의 흐름대로 정리함 즉, 나만 알아볼수있음ㅋㅋㅋㅋ
    -자바에서는 설계도가 바로 클래스이다. 그리고 클래스로부터 만들어진 객체를 해당 클래스의 인스턴스라고 부른다.-혼공자(혼자공부하는자바 내용중 발췌)

-new는 클래스로부터 객체를 생성시키는 연산자이고, 객체가 생성되면 메모리는 힙(heap) 영역에 생성된다.

-클래스의 구성 멤버
Ex.code
public class Classname{ //ClassName부분에는 생성하고 싶은 클래스 이름기입
//필드부분 -> 객체의 데이터가(속성) 저장되는 곳
고유데이터, 부품객체, 상태 정보 저장
int fieldname;

//생성자 -> 필드에 저장된 데이터(속성)의 초기화 역할
Classname(){
}

//메소드 ->객체의 동작에 해당하는 실행블록
객체 간의 데이터를 전달, 외부(호출한 곳)으로부터 값을 받아 실행, 실행 후 결과 값을 외부(호출한 것)으로 리턴
void methodName(){
}
}

-this.
객체 자신의 참조.
모두 생성자에서 초기화한다면 생성자의 매개변수 사가 많아지니 실제로 중요한 몇 개의 필드만 매개 변수를 통해 초기화되고 나머지는 필드들은 필드 선언 시에 초기화 하거나 생성자 내부에서 임의의 값 또는 계산된 값으로 초기화

-생성자 오버로딩
매개 변수를 달리하는 생성자를 여러 개 선언하는 것을 말한다.
Ex.code
public class Car{
Car(){...}
Car(String model){....}
Car(String model, String color){...}
Car(String model, String color, int maxSpeed){...}
}
이렇게 할 수 있다. 그렇다면 실제 손코딩을 보자.

생성자 오버로딩부분 발췌(혼공자 p239~240)
//생성자
Car(){
}
Car(String model){
this.model = model;
// this.model 이 필드값 생성자 Car(String model)의 값을 넣어라

Car(String model, String color){
this.model = model;
this.color = color;
// this.model 이 필드값 생성자 Car(String model)의 값을 넣어라
// this.color 이 필드값 생성자 Car(String color)의 값을 넣어라
....

이렇게 진행되며 메인에서 Car.하면 받을 수 있는 함수에 매개변수들이 옆에 같이 확인되니까 사용할 것을 잘 찾아서 사용하면됨
실제로는 아래와 같이 많이 사용된다

//생성자
Car(){
}
Car(String model){
this(model, "은색", 250)
}
Car(String model, String color){
this(model, color, 250);
}
Car(String model, String color, int maxSpeed){
this(model, color, 250);
}
}

Car(String model, String color){
this.model = model;
this.color = color;
this.maxSpeed = maxSpeed;
// this.model 이 필드값 생성자 Car(String model)의 값을 넣어라
// this.color 이 필드값 생성자 Car(String color)의 값을 넣어라
// this.maxSpeed 이 필드값 생성자 Car(int maxSpeed)의 값을 넣어라
....


여기까지 일단 정리하고 나중에 추후 내용추가 예정


JVM이란!!!?
Java Virtual Machine의 줄임말.

직역하면 '자바를 실행하기 위한 가상 기계(컴퓨터)'라고 할 수 있다.

Java 는 OS에 종속적이지 않다는 특징을 가지고 있다. OS에 종속받지 않고 실행되기 위해선 OS 위에서 Java 를 실행시킬 무언가가 필요하다. 그게 바로 JVM이다.

즉, OS에 종속받지 않고 CPU 가 Java를 인식, 실행할 수 있게 하는 가상 컴퓨터이다.

Java 소스코드, 즉 원시코드(*.java)는 CPU가 인식을 하지 못하므로 기계어로 컴파일을 해줘야한다.

하지만 Java는 이 JVM 이라는 가상머신을 거쳐서 OS에 도달하기 때문에 OS가 인식할 수 있는 기계어로 바로 컴파일 되는게 아니라 JVM이 인식할 수 있는 Java bytecode(*.class)로 변환된다.

Java compiler 가 .java 파일을 .class 라는 Java bytecode로 변환한다.

💡 여기서 Java compiler는 JDK를 설치하면 bin 에 존재하는 javac.exe를 말한다. (즉, JDK에 Java compiler가 포함되어 있다는 소리임)
javac 명령어를 통해 .java를 .class로 컴파일 할 수 있다.
변환된 bytecode는 기계어가 아니기 때문에 OS에서 바로 실행되지 않는다.

이 때, JVM이 OS가 bytecode를 이해할 수 있도록 해석해준다. 따라서 Byte Code는 JVM 위에서 OS 상관없이 실행될 수 있는 것이다.

OS에 종속적이지 않고, Java 파일 하나만 만들면 어느 디바이스든 JVM 위에서 실행할 수 있다.


이런건데.... 일단 이거는 너무 추상적이다.
아무래도 학원에서처럼 전문강사가 알려주고 습득하고 모르는 것을 채워나가는 것이 아니라 스파르타에서 주제를 던지면 그것을 찾아내서 알아서 해결하고 모르면 기술매니저를 통하기보다는 일단 팀원들끼리 해결하라고 하는 분위기라서 이렇게 추상적인게 나오면 무슨말인지 잘 모르겠다.
흐음... 나중에 여기 누구냐 현직으로 일하다가 온 같은 기수가 있어서 그사람한테 물어봐야겠다

profile
코린이 성장기

0개의 댓글