본문 바로가기

JAVA/스터디모임

[JAVA]자바 기초 개념 이해

1. 자바의 역사 및 특징

✔ 1995년 썬 마이크로시스템즈(Sun Microsystems)에서 제임스 고슬링(James Gosling)을 비롯한 개발팀에 의해 개발된 객체지향 프로그래밍 언어

✔ 단순하고 이식성이 뛰어나며, 다양한 플랫폼에서 실행 가능

 

역사

  • 1991년 : 프로젝트 “Oak” (with 제임스 고슬링 & 팀원) => 자바로 발전
  • 1995년 5월 23일 : (썬 마이크로시스템즈) 자바 공식 발표
  • 1996년 1월 23일 : 자바 1.0 버전 출시
  • 이후 현재까지 지속적으로 업데이트 진행중

 

특징

  1. 이식성(Platform Independence)
    Write Once, Run Anywhere(WORA) : 한 번 작성한 프로그램은 어떤 플랫폼에서든 실행 가능

  2. 객체 지향(Object-Oriented)
    객체 지향 프로그래밍 언어 => 코드의 재사용성을 높이고 유지보수가 쉬워짐

  3. 멀티스레딩(Multithreading)
    멀티스레딩을 지원 => 여러 작업 동시 처리 가능 => 병렬성 향상 & 성능 개선

  4. 동적(Interpreted) 및 정적(Compiled) 언어 특성
    바이트코드로 컴파일되어 JVM(Java Virtual Machine)에서 실행
    => 코드의 플랫폼에 대한 종속성을 줄이고 보안을 강화

  5. 자동 메모리 관리(Automatic Memory Management)
    가비지 컬렉션(Garbage Collection)으로 메모리 관리 자동화 => 개발자가 직접 메모리 할당 및 해제할 필요 X

  6. 네트워크 및 분산 처리(Network and Distributed Computing)
    네트워크 및 분산 환경에서의 프로그래밍을 지원 => 웹 애플리케이션 및 서버 개발 매우 적합

 


 

📌 주요 키워드

1. 객체지향 프로그래밍 언어로 개발한 이유는 무엇인가?

    💡 객체지향 이전의 방식인 절차지향, 메소드의 문제점을 보완하기 위함
        => 기존 프로그래밍 언어에 몇가지 규칙을 추가
    💡 객체지향 장점  
      ✔ 코드의 재사용성  
      ✔ 쉬운 코드 변경 -> 관리 용이  
      ✔ 코드 중복 제거 -> 오동작 방지

참고사이트> https://limsungju.tistory.com/13, https://www.codestates.com/blog/content/%EA%B0%9D%EC%B2%B4-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8A%B9%EC%A7%95

 

2. 이식성이란 무엇이며, 자바가 이식성이 뛰어난 이유는 무엇인가?

    💡 이식성 : 서로 다른 실행 환경을 가진 시스템 간에 프로그램을 옮겨 실행할 수 있는 것
        => 이식성이 좋다 = 어느 플랫폼에도 독립적이다
    💡 자바언어로 개발된 프로그램은 자바 실행 환경(JRE: Java Runtime Environment)이 설치되어 있는 모든 운영체제에서 실행 가능 
      ✔ JRE : 자바 클래스 라이브러리(Java class libraries) + 자바 가상 머신(JVM) + 자바 클래스 로더(Java class loader)  
      ✔ 자바 응용프로그램은 운영체제나 하드웨어가 아닌 JVM으로만 통신하기때문  

참고사이트>https://m.blog.naver.com/upright_3rd/90167025198, https://growingarchive.tistory.com/242, https://ieatt.tistory.com/8

 

3. 플랫폼이란 무엇인가?

	💡 하드웨어나 소프트웨어의 환경
	  ✔ 개발자가 특정 환경에서 소프트웨어를 구축하고 실행하는 데 필요한 도구와 기술을 제공
	  ✔ 효율적인 플랫폼 선택은 소프트웨어 개발 및 실행에 있어서 중요한 결정 사항 
	💡 Java 애플릿 및 애플리케이션을 개발 및 관리하기 위한 환경  
          ✔ Java SE (Standard Edition)  
           기본 에디션, 자바 언어 대부분의 패키지 포함  
          ✔ Java EE (Enterprise Edition)  
           현업에서 사용되는 API 집약 에디션, 웹프로그래밍과 DB 연동 기술 포함  
          ✔ Java ME (Micro Edition)  
           모바일 기기 등에서 사용되는 API 포함 에디션. 스마트폰 자체 OS 로 거의 사용 X

참고사이트>https://feastforall.tistory.com/115

 

4. 자바는 WORA 원칙에 따라 개발된 이유가 무엇인가?

    💡 운영 체제에 따라 소스 코드를 수정해야하는 문제를 해결하기 위함
        ✔ 한 번 쓰고 모든 곳에서 실행한다(Write Once, Run Anywhere, WORA)

참고사이트>https://jaeseongdev.github.io/development/2021/03/08/%EC%9E%90%EB%B0%94%EC%9D%98_%EA%B0%80%EC%9E%A5_%ED%81%B0_%EC%9E%A5%EC%A0%90_%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EC%97%90_%EB%8F%85%EB%A6%BD%EC%A0%81%EC%9D%B4%EB%8B%A4/

 

5. 객체 지향 프로그래밍 언어가 코드의 재사용성을 높이고 유지보수를 쉽게 만드는 이유가 무엇인가?

    💡 시간이 지나도 쉽게 수정, 확장하여 효율적으로 코드를 작성하기 위함  

참고사이트>https://canada-coder.tistory.com/entry/SOLID-%EC%9B%90%EC%B9%99-SOLID-Principle-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%EB%94%94%EC%9E%90%EC%9D%B8

 

6. 멀티스레딩이란 무엇인가?

    💡 CPU를 최대한 활용하기 위해 두 개 이상의 스레드를 동시에 실행하는 과정  

참고사이트>https://harostudio.co.kr/%EC%9E%90%EB%B0%94-%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C-%EA%B0%9C%EB%85%90%EA%B3%BC-%ED%99%9C%EC%9A%A9-%EB%B0%A9%EB%B2%95/

 

7. 동적 및 정적 언어 특성이란 무엇인가?

    💡 동적 타입 언어  
      ✔ 런타임시 자료형 결정 - 타입 없이 변수만 선언하여 값 지정 가능  
      ✔ 빠른 코드 작성 가능, 유연성  
      ✔ 타입에러 발생 가능성  
      ✔ JS, PYTHON
    💡 정적 타입 언어  
      ✔ 컴파일시 변수 타입 결정  
      ✔ 빠른 실행속도, 안정성  
      ✔ 매번 변수형 결정 -> 번거로움  
      ✔ JAVA, C 등  

참고사이트>https://sangseophwang.tistory.com/101

 

8. 자동 메모리 관리, 가비지 컬렉션이란 무엇인가?

    💡 자동 메모리 관리  
      ✔ 오브젝트 생성시 자동으로 메모리에 할당, 더 이상 필요하지 않으면 자동으로 해제  
      ✔ 명시적 관리보다 코딩이 덜 필요, 메모리 누수 현상 가능성 낮음  
    💡 가비지 컬렉션
      ✔ 동적 할당된 메모리 영역 가운데 어떤 변수도 가리키지 않는 메모리 영역을 탐지하여 자동으로 해제

참고사이트>https://velog.io/@wejaan/%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B4%80%EB%A6%AC-JS

 

9. 네트워크 및 분산처리란 무엇인가?

    💡 네트워크 : 컴퓨터들이 통신 기술을 이용하여 그물망처럼 연결된 통신 이용 형태  
    💡 분산처리 : 개별 CPU가 동일한 프로그램, 기능 또는 시스템에서 작동하여 컴퓨터나 기타 장치에 더 많은 기능을 제공하는 설정 
      ✔ 여러 컴퓨터 또는 장치들이 네트워크를 통해 연결되어 작업을 분산하고 처리하는 방식  
      ✔ JAVA API(기본 내장 라이브러리)에 TCP/IP 포함, HTTP 프로토콜 지원  

참고사이트>https://rlg1133.tistory.com/111, https://wonsjung.tistory.com/573, https://wonsjung.tistory.com/573, https://velog.io/@kansun12/%EC%9E%90%EB%B0%94JAVA%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C1

 


 

2. 자바 개발 환경 설정

1. JDK(Java Development Kit) 설치

Windows

  1. Oracle JDK 다운로드 페이지에서 최신 버전의 JDK를 다운로드
  2. 다운로드한 파일 실행 및 설치
  3. [환경 변수 설정] 시스템의 속성 창 > 환경 변수
  4. 시스템 변수 새로만들기 > 변수 : JAVA_HOME 추가 & 값 : JDK 설치 경로 설정
    ex) C:\\Program Files\\Java\\jdk-11.
  5. 시스템 변수 중 Path > 편집 > %JAVA_HOME%\\bin  추가
    • 추천하는 패키지 관리자 : scoop(검색속도는 느리지만 사용하기 편한 패키지 관리자)

 

macOS

  1. macOS는 기본적으로 JDK가 설치되어 있음
    - Terminal > java -version 명령어로 설치 여부 확인
  2. JDK 설치 X 경우, Oracle JDK 다운로드 페이지에서 macOS용 JDK 다운로드 및 설치
  3. Terminal에서 nano ~/.bash_profile 명령어 사용 
  4. [JAVA_HOME 환경 변수 설정] bash profile 에 아래 코드 추가
    export JAVA_HOME=$(/usr/libexec/java_home) export PATH=$JAVA_HOME/bin:$PATH
  5. 변경 사항 저장 > Terminal 재시작 or source ~/.bash_profile 명령어 실행
    • 추천하는 패키지 관리자 : homebrew(패키지 관리 매우 간편한 패키지 관리자)

 

Linux

  1. 패키지 관리자를 통해 OpenJDK 설치
    Ubuntu와 같은 Debian 계열의 시스템에서는 다음과 같이 설치
  2. sudo apt update sudo apt install default-jdk
  3. java -version 명령어로 JDK 설치 여부 확인
  4. 환경 변수는 필요한 경우에만 설정, 대부분 기본적으로 설정 O



2. 개발 환경 설정

1. IntelliJ IDEA

1. IntelliJ IDEA

  1. JetBrains 공식 사이트에서 IntelliJ IDEA 다운로드 및 설치

2. JDK 설정

  1. IntelliJ IDEA를 실행
  2. 메뉴 > File > Project Structure
  3. Project 탭에서 프로젝트 SDK로 사용할 JDK를 선택
    - JDK가 리스트에 없는 경우 : New > JDK 추가
  4. 설정 완료

3. 프로젝트 생성

  1. IntelliJ IDEA를 실행 후 "Create New Project"
  2. 프로젝트 유형 선택
  3. 프로젝트 이름, 위치 및 JDK 선택
  4. 프로젝트 생성 완료시 자동으로 설정



2. Eclipse

1. Eclipse 다운로드 및 설치

  1. Eclipse 다운로드 페이지에서 Eclipse IDE for Java Developers 다운로드 및 설치

 

2. JDK 설정

  1. Eclipse 실행
  2. 메뉴 > Window > Preferences
  3. 왼쪽 탐색창 Java > Installed JREs
  4. 사용 가능한 JRE 목록에서 JDK 추가 및 선택
    - JDK가 목록에 없는 경우 : Add > JDK 추가

 

3. 프로젝트 생성

  1. 실행 후 File > New > Java Project
  2. 프로젝트 이름 입력 > Next
  3. 사용할 JRE를 선택 > Finish > 프로젝트 생성



3. Visual Studio Code (VSCode)

1. Visual Studio Code 설치

  1. VSCode 공식 사이트에서 Visual Studio Code 다운로드 및 설치

 

2. JDK 설치

 

3. Java 확장 팩 설치

  1. Visual Studio Code를 실행
  2. 왼쪽 사이드바 Extensions(확장 기능)
  3. 검색 창에 "Java"를 입력하여 Java 확장 팩을 찾아 설치

 

4. 프로젝트 생성

  1. VSCode를 실행 후 File > Open Folder
  2. 프로젝트 디렉토리를 선택하고 "열기"
  3. 프로젝트 디렉토리에서 Java 파일을 만들거나 열어서 작업 시작

 


 

3. 기본적인 프로그래밍 개념

1. 변수(Variables)

데이터를 저장하는 메모리 공간

변수를 사용할 때는 먼저 선언해야 하며, 선언시 해당 변수의 이름과 데이터 타입을 지정

int number = 30; // 정수형 변수 number를 정의
double salary; // 실수형 변수 salary를 선언
char grade; // 문자형 변수 grade를 선언
String name; // 문자열 변수 name을 선언
boolean isPassed; // 논리형 변수 isPassed를 선언

위의 예시에서 int, double, char, **boolean**은 각각 변수의 데이터 타입을 나타냄

 

2. 자료형(Data Types)

변수가 저장할 데이터의 종류

기본 자료형(Primitive Data Types)

  • 정수형: byte, short, int, long
  • 실수형: float, double
  • 문자형: char
  • 논리형: boolean

참조 자료형(Reference Data Types)

  • 객체(Object): 클래스로부터 생성된 인스턴스
  • 배열(Array): 같은 타입의 데이터를 여러 개 저장하는 자료구조

 

3. 연산자(Operators)

연산을 수행하는 기호

산술 연산자

  • +: 덧셈
  • -: 뺄셈
  • *: 곱셈
  • /: 나눗셈
  • %: 나머지

대입 연산자

  • =: 변수에 값을 할당하는 연산자

비교 연산자

  • ==: 같음
  • !=: 같지 않음
  • >: 크다
  • <: 작다
  • >=: 크거나 같다
  • <=: 작거나 같다

논리 연산자

  • &&: AND (논리곱)
  • ||: OR (논리합)
  • !: NOT (논리부정)

 

4. 조건문(Conditional Statements)

주어진 조건에 따라 다른 코드 블록을 실행하는 제어 구조

if문

if (조건) {
    // 조건이 참일 때 실행될 코드
} else if (다른 조건) {
    // 다른 조건이 참일 때 실행될 코드
} else {
    // 모든 조건이 거짓일 때 실행될 코드
}

switch문

switch (변수) {
    case 값1:
        // 변수가 값1과 같을 때 실행될 코드
        break;
    case 값2:
        // 변수가 값2와 같을 때 실행될 코드
        break;
    default:
        // 변수가 위의 값들과 모두 다를 때 실행될 코드
        break;
}

 

5. 반복문(Loop Statements)

조건이 참인 동안 코드 블록을 반복해서 실행하는 제어 구조

for문

for (int i = 0; i<10; i++) {
    // 조건이 참일 때 실행될 코드
}

while문

while (조건) {
    // 조건이 참일 때 실행될 코드
}

do-while문

do {
    // 일단 한 번은 실행되고, 그 후에 조건을 검사하여 반복 여부를 결정하는 코드
} while (조건);

 


 

📌 주요 키워드

1. 메모리 공간이란 무엇인가?

    💡 프로그램이 실행되면 JVM은 OS로부터 메모리를 할당받고, 그 메모리를 목적에 따라서 여러 영역으로 나누어 관리  
      ✔ Heap : 참조형(Reference Type)의 데이터 타입을 갖는 객체, 배열  
      ✔ Stack : 기본 자료형을 생성할 때 저장하는 공간, 임시적으로 사용되는 변수나 정보들이 저장  
      ✔ Static(Method) : 필드 부분에서 선언된 전역변수, 정적 맴버 변수(static 으로 선언되는 것) 데이터  

참고사이트>https://lucas-owner.tistory.com/38, https://velog.io/@shin_stealer/%EC%9E%90%EB%B0%94%EC%9D%98-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B5%AC%EC%A1%B0, https://hyunki99.tistory.com/3

 

2. 변수를 선언한다는건 무슨 의미인가?

    💡 변수를 사용하겠다고 미리 컴파일러에게 알리는 것(변수를 사용하기 위해 이름 생성)  

참고사이트>https://ittrue.tistory.com/99, https://7942yongdae.tistory.com/22, https://velog.io/@tjdus9503/%EC%9E%90%EB%B0%94-%EC%84%A0%EC%96%B8-%EC%A0%95%EC%9D%98-%EC%B4%88%EA%B8%B0%ED%99%94-%EA%B5%AC%ED%98%84

 

3. 기본 자료형과 참조 자료형의 차이점은 무엇인가?

    💡 기본자료형  
      ✔ 자바 컴파일러에 의해 해석되는 자료형태  
      ✔ 비객체타입 -> NULL X  
      ✔ 스택메모리 저장됨
    💡 참조자료형  
      ✔ 기본형 제외 모든 타입  
      ✔ NULL O  
      ✔ HEAP 메모리에 생성  

참고사이트>https://vanslog.io/posts/language/java/primitive-type-and-reference-type/, https://sublivan.tistory.com/4

 

4. 객체(Object)란 무엇인가?

    💡 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중 자신의 속성을 가지고 있으면서 식별 가능한 것  

참고사이트>https://velog.io/@luna001631/%EC%9E%90%EB%B0%94JAVA-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5%EC%96%B8%EC%96%B4OOP%EB%9E%80-%EA%B0%9D%EC%B2%B4%EB%9E%80-%EA%B0%9D%EC%B2%B4%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EC%A7%80-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B3%A0-%EA%B0%9D%EC%B2%B4%EC%9D%98-%EC%83%81%ED%98%B8%EC%9E%91%EC%9A%A9%EC%97%90-%EB%8C%80%ED%95%B4-%EC%9D%B4%ED%95%B4%ED%95%B4%EB%B3%B4%EC%9E%90

 

5. 인스턴스란 무엇인가?

    💡 객체 지향 프로그래밍(Object Oriented Programming)에서 class에 소속된 개별적인 객체(= 클래스를 통해 생성된 객체)  

참고사이트>https://velog.io/@k7nsuy/%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%EB%9E%80, https://ittrue.tistory.com/117

'JAVA > 스터디모임' 카테고리의 다른 글

[JAVA]객체 지향 프로그래밍(OOP)  (2) 2024.02.14