자바의 단위
- Class : 행동과 상태의 집합
- Method : Class 안에서 행위(기능)를 구현하는 것을 담당한다
- Variable : 변수, 변하는 수라는 의미가 있으며 데이터를 임의의 변수에 저장하여 사용한다
기본적인 선언 구조
public class TestClass{ // ← 클래스 선언 ( 대문자로 작성 )
public String method(){ // ← 메소드 선언 ( 카멜케이스로 작성 )
String data = ""; // ← 변수 선언
// 중간 내용
return data;
}
}
이러한 자바의 클래스, 메서드를 구동하기 위해서는 프로그램상 어느 한 곳에는 main() 메서드가 선언되어 있어야 구동이 가능하다.
public static void main(String[] args){
// 중간 내용
}
- 클래스와 메소드의 간단한 정의
→ 클래스는 장난감을 만드는 설계도라고 생각하면 되겠다.
이 설계도 안에는 어떠한 기능이 있고 이 기능이 어떻게 구동되는지 등등이 기술되어 있다
→ 메소드는 위에서 설명한 기능이 기술되어 있는 집합이라 생각하면 되겠다.
클래스, 메소드, 변수의 이름에 사용하지 못하는 단어? 그게 뭘까?
- 모든 프로그래밍 언어에는 "예약어"라는 집합이 있다.
이는 이미 지정되어 있는 이름이라는 의미이며 Java 또한 예약어가 존재한다. - 간단한 몇가지 예시
- abstract : 추상 메소드에 사용
- boolean : 참/거짓 변수
- int : 정수형 변수
- continue : 해당 인덱스를 중지하고 다음 인덱스로 넘어간다
- 이와 마찬가지로 프로그램을 실행시켰을 때 클래스 상에서 절차적으로 코드를 읽는데,
위에서 선언된 변수는 아래에서는 이미 선언되어 있는 이름이기에 변수를 사용하거나 대입하는 것은 가능 하지만 새로이 변수로 선언하는 것은 불가능하다 (X) int test = 1; int test = 2; (O) int test = 1; test = 2;
리턴 타입
- 호출자에게 반환하는 결과 값
- 기본 자료형(byte, short, int, long, float, double, char, boolean)
- String
- void : 호출자에게 결과 값을 돌려주지 않는 타입
- 객체
컴파일이란?
컴퓨터 OS상에서 작성한 프로그래밍 코드는 사람이 읽을 수 있는 문자로 되어있다.
하지만 이 코드를 읽어서 프로그램을 실행해야 하는 것은 누구인가?
컴퓨터다
사람은 한국어, 영어, 일본어 다양한 언어를 구사하지만 원활한 대화를 하기 위해서는 해당 언어를 알아야 한다.
이와 같이 컴퓨터가 코드에 대해 원활히 알 수 있도록 기계어로 변화를 해줘야 한다.
이것이 컴파일이다.
그렇다면 기계어는 무엇일까?
컴퓨터에서 읽고 쓸 수 있는 비트(0과 1)로 쓰인 컴퓨터 언어이다
왜 비트는 0과 1로 이루어져 있을까?
이유 : 컴퓨터는 전기적 신호로 데이터를 읽어 해석한다.
이 전기적 신호를 읽기 위해서는 아래 두 가지를 CPU에서 판단한다
0 : 전압이 충분하지 않음
1 : 전압이 충분히 높음
이 0과 1을 이용해 "0101이 모이면 a다", "1101이 모이면!이다"라고 정해 놓았다
그렇기 때문에 컴퓨터는 01010101110101로 데이터를 읽는다고 알고 있으면 되겠다
- JAVA는 바이트 코드로 컴파일을 해서 .class 파일을 만들고
JVM을 이용해 각종 운영체제와 기계어로 소통하게 된다.프로젝트 → 컴파일러(바이트 코드로 변환)→ .class 파일 생성 → JVM(기계어로 변환) → 운영체제
자바 프로그램의 메서드의 기본 구조?
public static void main(String[] args){
// 중간 내용
}
- 접근 제어자 : public static
- 리턴 타입 : void
- 메서드의 이름 : main
- 매개변수 목록 : String [] args
- 예외목록 ( 매개변수와 중괄호 사이 ) : 예외 throws 작성 공간
- 메서드 내용 : {중괄호 사이}
클래스와 객체, 인스턴스, 생성자?
- 위에서 설명하길 클래스는 행동과 상태가 있다고 했다.
그렇다면 인스턴스는 무엇일까?
우선 정리를 해보자
메서드 : 설계도 안에 기술되어 있는 기능
변수 : 메서드를 작동시키기 위한 상태를 명명
클래스 : 무언가를 만들기 위한 설계도로서 상태(변수)와 행동(메서드)이 포함되어 있다
인스턴스는 위에서 설명한 클래스를 각각의 실체 하는 존재로 구현하는 것이다.
예를 들어 장난감 공장에서 장난감을 찍어내는데 한 가지의 설계도를 사용한다고 치자, 공장 기계의 프로세스가 진행되면서 계속해서 똑같은 장난감을 찍어낼 것이다.
1번 장난감, 2번 장난감, 3번 장난감......
하지만 1번 장난감과 2번 장난감이 똑같이 생겼다고 해서 하나의 장난감은 아니다
모두 각자 만들어진(구성된 것은 같지만) 장난감이라는 것이다.
이와 같이 클래스의 인스턴스화를 통해 만들어진 객체들에 대해서 나는 이렇게 이해하기로 했다.
나와 똑같은 사람이지만 "나"는 아닌 또 다른 하나의 사람인 "너"라는 개념이라고
- 그렇다면 객체와 인스턴스의 차이는? 정확히는 무엇일까?
나는 이 부분이 이해가 되지 않아 너무나도 힘들었는데 간단히 정리해보자면
클래스는 만들어지기 위한 설계도
객체는 이 설계도에 맞게 구현할 대상들이 모두 객체를 칭하며
인스턴스는 실제로 구현되었을 경우(메모리상에 등록)를 칭한다.
"과연 이렇게 나눌 필요까지 있을까?"라고 생각되기도 한다.
왜냐하면 실제로 겪어보니 세부적으로 나눠 인스턴스라고 부르는 사람도 있었지만
인스턴스라고 말하기보다 객체라고만 칭하는 사람이 대다수였기 때문이다.
그래도 개념은 이해하고 있자.
- 자 위에는 개념적인 것이고 그렇다면 코드로는 어떻게 선언해야 할까?
예를 들어 HelloWorld Class가 있다고 하자!
이 클래스의 인스턴스화를 하기 위해서는 아래와 같이 new를 통해서 새로운 인스턴스를 만든다고 선언하면 되겠다.
HelloWorld name = new HelloWorld();
- 생성자란 new를 통해 만들어진 객체를 사용할 때 가장 먼저 호출되어 실행되는 것으로서 멤버 변수를 초기화하는 것인데, 이름은 클래스와 동일하고 리턴 타입은 명시되지 않는다
구성은 아래와 같다
public class Test{
public Test(){
}
}
- 그렇다면 이 생성자를 매번 선언해줘야 하는가?
아니다. 자바에서는 기본 생성자가 반드시 존재해야 하는데
이 기본 생성자가 선언되어 있지 않을 경우 자동으로 선언해주는 편의성을 제공한다.
다만, 본인이 기본 생성자가 아닌 다른 생성자를 만들었을 경우 기본 생성자를 생성해줘야 한다.
public class Test{
public Test(){
}
public Test(String data1, int data2){
}
}
변수의 종류
- 지역 변수 : local variables
- 중괄호 내에서 선언된 변수
- 중괄호 안에서 생명주기가 시작되고 끝난다
- 매개 변수 : parameters
- 메서드에 넘겨주는 변수
- 메서드 안에서 생명주기가 시작되고 끝난다
- 인스턴스 변수 : instance variable
- 메소드 밖에, 클래스 안에 선언된 변수, static 예약어가 없는 변수
- 객체가 생성될 때 생명이 시작되고, 그 객체를 참조하고 있는 다른 객체가 없으면 소멸된다
- 클래스 변수 : class variable
- 인스턴스 변수처럼 메소드 밖에, 클래스 안에 선언된 변수, static 예약어가 있는 변수
- 클래스가 처음 호출될 때 생명이 시작되고, 자바 프로그램이 끝날 때 소멸된다
- 변수의 선언 위치
-
public class VariableTest{ int data1; // data1 : 인스턴스 변수 static String data2; // data2 : 클래스 변수 public String test(boolean data3){ // data3 : 매개 변수 char data4; // data4 : 지역 변수 } }
연산자
- 연산자란? 주어진 값을 계산하기 위한 문자 기호
- 단항 연산자
-
- : 더하기
- : 빼기
- ~ : 부정 ( 1 → 0 ) or ( 0 → 1) or ( 1 → -1 )
- ! : 논리 부정 ( true → false )
- --, ++ : 증감 연산자 +1 또는 -1을 나타낸다
-
- 이항 연산자
- 산술 연산자
-
- : 더하기 연산자
- : 빼기 연산자
- : 곱하기 연산자
- / : 나누기 연산자
- % : 나머지 연산자
-
- 비교 연산자
- "A > B" : A가 B보다 크다
- "A < B" : A가 B보다 작다
- "A >= B" : A가 B와 같거나 크다
- "A <= B" : A가 B와 같거나 작다
- "A != B" : A와 B는 다르다
- "A == B" : A와 B는 같다
- 논리 연산자
- && : 그리고 == AND
- || : 또는 == OR
- 삼항 연산자
- ? , : 조건 ? true : false
- 산술 연산자
- 연산자에는 우선순위라는 것이 존재한다.
순서를 생각하고 작성하는 것보다는 소괄호 ()를 사용하면 순서도 정하고 가독성도 늘어난다
ex) 2 + ( ( 8 * 7 ) / 6 ) - 5
'Programming > Backend' 카테고리의 다른 글
자바 기초 다지기 - 6 (Thread, Syncronized, Serializable, IO, NIO) (0) | 2021.09.13 |
---|---|
자바 기초 다지기 - 5 ( Generic, Collection, Map ) (0) | 2021.09.06 |
자바 기초 다지기 - 4 (내부 클래스, 어노테이션, 자바) (0) | 2021.08.29 |
자바 기초 다지기 - 3 (API, Object, 추상, final, Enum, 예외, String) (0) | 2021.08.23 |
자바 기초 다지기 - 2 (조건문, 반복문, 배열, 참조자료형, DTO, 상속, 오버라이딩, 오버로딩, 다형성) (0) | 2021.08.16 |