04. Java 기초 1 / 20230417

2023. 4. 17. 20:55
🧑🏻‍💻 개발 환경 세팅, 자바란?, 변수, 타입, 문자열

💡 자바(Java)란?

➡️ 1996년 1월에 나온 객체지향 프로그래밍(Object Oriented Programming, OOP) 언어 

 

🔎 자바의 특징 

  1. 운영체제에 독립적 
    👉🏻 자바 이전의 언어들은 특정 CPU에서만 작동하거나 특정 OS에 따라 다르게 작성해야 하는 언어들이 대부분, 
    자바는 이 문제를 해결하고자 JRE(Java Runtime Evironment : JVM(자바 가상 머신) + 표준 클래스 라이브러리)가 설치되어 있는 모든 운영체제에서 실행 가능하도록 만들었음
  2. 객체 지향 언어(Object Oriented Programming, OOP)
    👉🏻 자바는 객체 지향 프로그래밍 개념을 사용하는 언어 → 모든 기능을 객체로 만들어야 함
    프로그램이 동작하는 부품이 객체이고, 여러 부품(객체)를 만들고 조립하여 하나의 프로그램을 실행하는 개념 
  3. 함수형 프로그래밍 지원
    👉🏻 자바 8 버전부터 함수형 프로그래밍 지원 → 람다식과 스트림 추가
    컬렉션 요소를 필터링, 매핑, 집계 처리하기가 쉬워지고 코드가 간결해짐 
  4. 자동으로 메모리 관리(Garbage Collection)
    👉🏻 C, C++ 경우 메모리의 생성과 소멸을 개발자가 직접 설계해야 했지만 자바는 가비지 컬렉터(Gabage Collector)를 실행시켜 자동으로 사용하지 않는 메모리 수거 

🔎 JVM과 JDK

  • JVM : 자바 프로그램을 실행시키는 도구, 자바 코드로 작성한 프로그램을 해석해 실행하는 별도의 프로그램
    → JDK나 JRE를 설치하면 자동으로 설치됨 
    → 자바가 운영체제에 독립적인 것은 JVM이 있기 때문에 
  • JDK(Java Development Kit)
    • JRE(Java Runtime Environment) : JVM + 표준 클래스 라이브러리
      ⇒ “Runtime”, 실행과 관련된 것
    • DK(Java Development Kit) : JRE + 개발에 필요한 도구
      ⇒ “Development”, 개발에 관련된 무언가

 

🔎 메서드란? 

➡️ 어떤 기능을 하는 코드를 묶음으로 묶은 것, 어떤 기능을 수행하기 위한 일련의 코드 집합체 

여기서 "어떤 기능을 수행한다" 라는 의미는 데이터를 입력받아 해당 데이터에 일련의 처리를 가함으로써 만들어낸 결과값을 반환하는 것(메서드 내부 코드가 만들어낸 결과값을 내보내는 것)

위키백과 : 함수

🔎 main 메서드 

  • 자바로 작성한 소스 코드 파일을 실행하면 가장 먼저 실행되는 메서드 
    → 프로그램이 실행될 때 가장 먼저 실행되는 머서드 또는 함수 '진입점 함수'
    → 자바에서 main 메서드는 집입점 함수, 자바로 어떤 코드를 작성할 때 반드시 main 메서드가 있어야 하고  main 메서드로부터 코드의 흐름이 시작 
public static void main(String[] args) {
}
  • void : 반환 타입
  • main : 메서드 이름
  • String[] : 매개변수의 타입
  • args : 입력 데이터로 들어오는 값을 args라는 이름의 매개 변수에 할당

 

💡 변수(Variable) : 값이 변할 수 있는 데이터를 임시로 저장하기 위한 수단

➡️ 값을 저장할 수 있는 메모리 공간을 확보하고 사람이 식별할 수 있는 이름 붙인 것 

class Main {
  public static void main(String[] args) {
  	int num1 = 1;
	int num2 = 2;
	int num3 = 3;
    }
}

 

🔎변수의 선언과 할당 

  • 변수 선언 : 변수를 선언할 때는 저장하고자 하는 값의 데이터 타입과 함께 변수 이름 작성하면 됨 
class Main {
  public static void main(String[] args) {
	int num; //변수 선언
  }
}
변수를 선언하면 컴퓨터는 값을 저장할 메모리 공간을 확보하고, 확보한 메모리 공간에 사용자가 입력한 변수 이름으로 이름 붙임
📍변수 num은 int 형이다 → int 형은 4byte → 4byte 공간 확보 → 그 공간에 num 이름 붙여줌
  • 값 할당(대입) : 변수에 값을 저장하는 것
class Main {
  public static void main(String[] args) {
    int num; //변수 선언
    num = 1; //값 할당
  }
}

class Main {
	public static void main(String[] args) {
		int num = 1; // 선언과 동시에 초기화
	}
}
간단하게 대입 연산자 '=' 사용
좌항 = 우항, 좌항에는 변수 우항에는 값 -> 우항의 값이 좌항의 변수에 할당
📍 초기화 : 변수를 선언하고 나서 처음으로 값을 할당하는 것 
📍재할당 : 초기화 이후에 다른 값을 할당하는 것 

 

🔎 상수(Constant) : 변하지 말아야 할 데이터를 임시로 저장하기 위한 수단 

➡️ 변수와 같이 선언하고 할당하여 사용할 수 있지만 "재할당이 금지된 변수"

 

💡 타입 

  • 어떤 값의 유형 및 종류, 타입에 따라 값이 차지하는 메모리 공간의 크기와 값이 저장되는 방식 결정됨 
    • 값이 차지하는 메모리 공간의 크기
    • 값이 저장되는 방식(기본 타입과 참조 타입)

🔎 기본 타입과 참조 타입

  • 기본 타입(primitive type) : 저장하고자 하는 실제 값
    • 값이 저장할 때 데이터의 실제 값이 저장됨
    • 정수 타입(byte, short, long, int), 실수 타입(float, double), 문자 타입(char), 논리 타입(boolean)
  • 참조 타입(reference type) : 저장하고자 하는 값을 임의의 메모리 공간에 저장한 후 메모리 공간 주소를 저장 
    • 값을 저장할 때 데이터가 저장된 곳을 나타내는 주소값 저장
    • 객체의 주소를 저장, 8개의 기본형을 제외한 나머지 타입

💡 리터럴(Literal)

➡️ '문자 그대로의', 문자가 가리키는 값 그 자체 

➡️ '값'이라는 표현 대신에 리터럴 표현 사용

// 정수형 리터럴 20을 정수형 변수 currentAge에 할당
int currentAge = 20;

// 실수형 리터럴 3.14159를 실수형 변수 pi에 할당
double pi = 3.14159;

// 논리형 리터럴 true를 논리형 변수 boolean에 할당
boolean isGenius = true;

// 문자형 리터럴 'A'를 문자형 변수 firstAlphabet에 할당
char firstAlphabet = 'A';

 

💡 정수 타입 : 숫자를 나타내는 타입 

💡 실수 타입 : 소수점을 가지는 값

➡️ double형 리터럴에서는 d를 붙여도 되고 안 붙여도 됨,  float형 리터럴에서는 반드시 접미사 f 붙여야 함

 

💡 논리 타입 : boolean 한 가지뿐, 참 또는 거짓 저장할 수 있는 데이터 타입, 오직  true/false만 값으로 가짐, 1byte(8bit)

boolean isRainy = true;
boolean isAdult = false;

💡 문자 타입 : char  2byte

➡️ 문자 타입 변수 선언하면 해당 변수에 오직 하나의 문자형 리터럴 저장 가능 

➡️ 큰따옴표가 아닌 작은따옴표를 사용해야 함 -> 그렇지 않으면 "문자열 리터럴"로 인식

char letter1 = 'a';
char letter2 = 'ab'; // 에러 : 단 하나의 문자만 할당할 수 있습니다. 
char letter3 = "a"   // 에러 : 작은따옴표를 사용해야 합니다.

 

💡String 이란? 

➡️ 기본적으로 String 타입은 큰따옴표("")로 감싸진 문자열 의미

// 문자열 리터럴을 String 타입의 변수 name에 할당하는 방법
String name1 = "Kim Coding";

// String 클래스의 인스턴스를 생성하는 방법
String name2 = new String("Kim Coding");

 


드디어 자바에 입문했다. 분명히 본 건데도 다시 새로운 기분이다. 역시 반복을 계속 해서 넣어주지 않으면 잊어버리기는 너무 쉽다. 어느 정도는 안다고 생각하고 자신있게 코플릿 문제에 임했는데 웬걸 생각보다 어려웠다. 아직 부족한 게 많다는 뜻이겠지. 다시 천천히 복습하면서 개념들을 정리해 볼 예정이다. 위 개념들도 자세하게는 따로 정리할 예정 오늘도 이렇게 끝!

'SEB_BE_45 > 공부 정리' 카테고리의 다른 글

06. Java 기초 3 / 20230419  (0) 2023.04.20
05. Java 기초 2 / 20230418  (0) 2023.04.18
03 Git 기초/20230414  (0) 2023.04.14
02 Linux 기초 / 20230413  (0) 2023.04.14
01 웹개발 기초/20230412  (0) 2023.04.12

BELATED ARTICLES

more