본문 바로가기
BE/Java

JAVA 개념

by soohykim 2025. 4. 10.
728x90
반응형

📂 JAVA 개념

📌 특징

  • C++ 문법과 구문 + Small talk의 객체지향
  • 메모리 해제 (garbage collector)
  • 포인터 없음

✔ 구조

1) 운영체제
2) JVM (Java Virtual Machine)
3) Java API (클래스 라이브러리)
4) Java 언어

✔ java 실행과정

  • 확장자 : *.java
  • java ➡ class ➡ JVM 실행

✔ JVM과 JDK(자바 개발 키트) 설치

  • JDK 구성
    • java 프로그램 개발 도구 (컴파일러)
    • JRE -> JVM + 여러 표준 클래스
  • JDK 다운로드

✔ java 프로그래밍 툴

📌 표준 출력

✔ 프로그램 구조

public class 클래스명{ (1) 
    public static void main(String[] args) (2)
    {
        System.out.println("기본구조"); (3)
    }
}

(1) java의 기본 클래스, 클래스명
(2) 프로그램의 진입점
(3) java 프로그래밍
  • 클래스 앞에 public 붙는 경우 : 파일명 = 클래스명
  • 1개의 file에는 1개의 class만 사용

✔ 표준 출력

  • 출력
    • System.out.println("A : " + n);
    • System.out.pirnt(n);
    • System.out.printf("A : %d", n);
  • java.lang 패키지 안에 있는 클래스
    • Object : 최상위 클래스
    • System

📌 연산자

✔ 상수

  • 숫자 상수 + 문자 상수
  • 사용하는 모든 불변의 값

✔ 데이터형

  • 기본형
    • boolean (1 byte)
    • char (2 byte)
    • byte (1 byte)
    • short (2 byte)
    • int (4 byte)
    • long (8 byte)
    • float (4byte)
  • 참조형 (메모지 주소를 저장하는 데이터형)
    • 클래스
    • 배열
    • 인터페이스

✔ 변수

  • 데이터형 변수명;
  • 상수를 저장하는 메모리 공간

✔ 연산자

  • 산술 연산, 비교 연산 등 키워드
    • 증감 연산자 : ++, --
    • 산술 연산자 : +, -, *, /, %
    • 비교 연산자 : <, <=, >, >=, ==, !=
    • 시프트 연산자 : <<, >>
    • 비트 연산자 : &, |, ^, ~
    • 논리 연산자 : &&, ||, !
    • 조건 연산자 : (조건) ? (참) : (거짓)
    • 대입 연산자 : =, +=, -=, *=, /=, %=

📌 문법

✔ 반복문

1) for문 (초기화; 조건식; 증감)

for (int i = 0; i < 10; i++) {

}

2) while문 (조건식)

while(i != 0) {
}

3) do ~ while문 (조건식)

do {
}
while (i != 0) {
}

✔ 선택문

1) if ~ else문 (조건식)

if (i != 0)
	명령어;
else if (i >= 10)
	명령어;

2) switch문 (표현식)

switch(n) // 정수형 타입
{
	case 1:
    	break;
    case 2:
    	break;
    default:
    	break;
}

✔ break와 continue

  • break
    • 가장 가까운 반복문을 빠져나감 (goto 기능과 유사)
    • 기본 기능 + 라벨(label)
OUT : while(true)
{
	while(true)
    {
    	i++;
        if (i == 3)
        {
        	break OUT;
        }
    }
}

📂 JAVA 데이터형

📌 배열

  • 같은 변수명 + 같은 데이터형 + 다수의 변수
//참조형 배열변수
int nArray[]; 또는 int[] nArray;

//객체
nArray = new int[10];

✔ 일차원 배열

1) 배열 선언 형식

  • 참조형 배열변수
    • 데이터형 배열변수명[];
    • 데이터형[] 배열변수명;

2) 배열 생성

  • 배열변수명 = new 데이터형[개수];
  • 데이터형[] 배열변수 = new 데이터형[개수];

3) 초기화

  • 기본값
    • char형 : null
    • boolean형 : false
    • int형 : 0
    • float형 : 0.0
  • 선언과 동시에 초기화 하는 형식
//배열 선언
int nArray[]; 
int[] nArray;

// 배열 생성
nArray = new int[7];
int[] nArray = new int[7];

//초기화
int[] nArray = {1, 2, 3};

✔ 이차원 배열

1) 배열 선언 형식

  • 참조형 배열변수
    • 데이터형 배열변수명[][];
    • 데이터형[][] 배열변수명;

2) 배열 생성

  • 행/열 같은 배열 생성
    • 배열변수명 = new 데이터형[행개수][열개수];
    • 데이터형[][] 배열변수 = new 데이터형[행개수][열개수];
  • 행/열 다른 배열 생성
    • 배열변수명 = new 데이터형[행개수][];
      배열변수명[행번호] = new 데이터형[열개수];

3) 초기화

  • 행과 열 단위로 초기화
  • 선언과 동시에 초기화
//배열 선언
int nArray[][];
int[][] nArray;

//배열 생성
nArray = new int[2][2];
int[][] nArray = new int[2][2];

int[][] nArray;
nArray = new int[3][];
nArray[0] = new int[2];
nArray[1] = new int[3];
nArray[2] = new int[5];

//초기화
int[][] nArray = new int[2][2];
nArray[0][0] = 1;
nArray[0][1] = 2;
nArray[1][0] = 3;
nArray[1][1] = 4;

int[][] nArray1 = {{1, 2}, {3, 4}};
int[][] nArray2 = {{1, 2}, {3, 4, 5, 6}};

📂 JAVA 클래스

📌 클래스

✔ 개념

1) 형식

  • 멤버변수 (필드) : 클래스 안에 선언된 변수
    • 공용 변수 (전역 변수와 유사)
    • 클래스 안에서 사용
  • 메소드 (method) : 클래스 안에 선언된 함수
    • 일반 함수와 동일
class 클래스명 {
// field, constructor, and
// method declarations
}

✔ 객체 생성과 사용

1) new

  • 멤버변수와 메소드에 접근
public static void main(String[] args)
{
	Book JavaBook = new Book();
    JavaBook.SetTitle("Java Programming");
    System.out.println("Book Title" + JavaBook.GetTitle());
}

✔ 접근 제어자

  • private : 클래스 안에서만 접근 가능
  • public : 전체 접근 가능
  • protected : 같은 클래스와 패키지 + 하위 클래스에서 접근 가능
  • friendly or 생략 : 같은 클래스와 패키지 안에서만 접근 가능
public int m_nVar;

private int GetVar()
{
	return m_nVar;
}

✔ 오버로딩

  • 중복되는 메소드명을 클래스 안에서 정의 가능
  • 같은 함수명으로 다양한 값을 받아 처리

✔ 생성자

  • 객체가 생성될 때 1번 호출되는 메소드 (자동 호출)
  • 리턴형이 없고, 클래스명=함수명
  • public 필수
class MyClass
{
	public MyClass() {
    }
    public MyClass(int nVar1, int nVar2) {
    }
}

✔ this, this()

  • 객체 자신을 참조하는 참조형 클래스변수/키워드
    • this.멤버변수
    • this.메소드()
  • this
    • this 사용 전에 객체 생성이 되어야함
  • this()
    • 생성자에서 또 다른 생성자 호출 (첫 줄에서 호출)
class A
{
	public int m_nVar;
    public float m_fVar = 0.5f;
    
    public void SetPrint(int nVar)
    {
    	this.m_nVar = nVar;
        this.Print();
    }
    
    //this()
    public A()
    {
    	this(3.14f); //float 생성자 호출
        m_nVar = 12;
    }
    
    public A(float fVar)
    {
    	m_fVar = fVar;
    }
}

✔ static

1) 형식

  • 접근제어자 static 데이터형 멤버변수명;
  • 접근제어자 static 리턴형 메소드명(...);

2) 특징

  • 멤버변수는 생성되는 모든 객체에서 전역변수로 사용
  • static 멤버변수와 메소드 공통점
    • 객체가 생성되기 이전에 멤버변수와 메소드 사용 가능

3) 사용규칙

  • static 메소드 안에서 멤버 변수를 사용할 때 항상 static 선언
  • static 메소드는 같은 메소드 안의 메소드만 호출 가능
  • static 메소드 안에서는 this 사용 불가
  • static 메소드는 오버라이딩 불가

✔ package와 import

1) package 개념

  • 자주 사용되는 클래스를 모아둔 폴더
  • package 패키지명; (소문자)
  • package mypackage.utility;

2) import 개념

  • 클래스를 포함하고자 할 경우 (#include 역할)
  • import 패키지명.클래스명;
  • import 패키지명.*;

📌 상속

✔ 멤버 상속

1) 개념

  • 객체를 연관시키고 계층구조를 만들어 코드 재사용함
  • 오직 한 클래스만 상속 가능
  • 종류
    • 부모 클래스 (= 상위 클래스, super 클래스)
    • 자식 클래스 (= 하위 클래스, sub 클래스)

2) 상속 형식

  • class 클래스명 (자식) extends 상속 클래스명 (부모)
  • 최상위 부모 클래스 : Object
  • 상위 클래스의 접근지정자에 따라 접근이 제한

3) 멤버 상속

  • 상위 클래스에 지정된 private 멤버
    • 해당 클래스에서만 사용O
    • 하위 클래스는 사용X
  • 상위 클래스에 지정된 public
    • 해당 클래스와 하위 클래스에서 사용O
    • 외부에서도 사용O
  • 상위 클래스에 지정된 protected
    • 같은 패키지일 경우는 public 멤버처럼 사용O
    • 다른 패키지인 경우는 상위 멤버를 하위 클래스 안에서만 사용O, 외부는 사용X
  • 상위 클래스에 지정된 default
    • 같은 패키지일 경우는 public 멤버처럼 사용O
    • 다른 패키지일 경우는 하위 클래스에서 상위 클래스 default 멤버 사용X, 외부에서도 사용X
구분클래스 내부하위 클래스외부
private 사용 가능 사용 불가 사용 불가
public 사용 가능 사용 가능 사용 가능
protected 사용 가능 사용 가능 (같은 패키지) 사용 가능, (다른 패키지) 사용 불가
friendly 사용 가능 (같은 패키지) 사용 가능, (다른 패키지) 사용 불가 (같은 패키지) 사용 가능, (다른 패키지) 사용 불가
class A
{
	public int m_nVar1 = 11;
    public void PrintA() {
    	System.out.println("A Class" + m_nVar1);
    }
}

class B extends A // A 상속 받음
{
	public void Printc() {
    	PrintA();
        System.out.println(m_nVar1);
    }
}

✔ 오버라이딩

  • 부모 클래스의 메소드를 자식 클래스에서 다시 재정의하는 것
  • 주의 사항
    • 함수명이 같아야 함
    • 함수의 매개변수가 같아야 함
    • 리턴형이 같아야 함

✔ final

1) final이 클래스와 메소드에 붙는 경우

  • 상속과 오버라이딩 불가
  • 클래스와 메소드 맨 앞쪽에 위치

2) final이 변수에 붙는 경우

  • 변수의 값 수정 불가
final class A
{
	final void Print() {System.out.println("");}
}

class B extends A // 에러 (상속 불가)
{
	static final float m_nVar = 3.14f;
    
	public void Print() {System.out.println("");} // 에러 (오버라이딩 불가)
    
    public static void main (String[] args) {
    	m_nVar = 0.5f; // 에러 (수정 불가)
      }
}

✔ 상속관계에서 생성자 호출 순서

1) 상위 클래스 생성자 ➡ 하위 클래스 생성자 호출
2) 생성자에 매개변수가 있는 경우 자동호출X (super 키워드 사용)

✔ super

  • 하위 클래스에서 상위 클래스를 참조하여 접근할 때 사용 (상위 클래스의 참조변수 대신)
  • super.멤버변수명
  • super.메소드명(매개변수)
  • 사용
    • 하위 클래스에서 상위 클래스의 메소드/변수를 호출할 때 사용
    • 하위 클래스에서 상위 클래스의 생성자를 호출할 때 super(매개변수)/super() 처럼 사용

✔ 참조변수를 이용한 형 변환과 호출

  • 캐스트 연산자 사용 ()
  • 형 변환의 규칙
    • 하위 클래스에서 상위 클래스로 형 변환 가능
    • 생성된 하위 클래스에서 상위 클래스 형 변환을 통해 하위 클래스의 멤버에 접근X
    • 상위 클래스의 메소드가 하위 클래스에 오버라이딩(재정의)된 경우, 상위 클래스 참조변수에서 오버라이딩된 메소드를 호출하면 하위 클래스의 메소드 실행

📌 추상 클래스

✔ 개념

  • 하위에서 구현할 메소드의 원형을 가진 상위 클래스 (상위 클래스만 존재)
  • 자체를 객체로 생성할 수 없음
abstract class 클래스명 {
	일반 멤버 변수;
    메소드;
    생성자;
    abstact 반환명 메소드명();
}
  • extends 키워드를 이용하여 추상 클래스를 상속
  • 추상 메소드를 하위에서 모두 구현할 필요X
728x90
반응형

'BE > Java' 카테고리의 다른 글

자료구조 - 리스트, 연결리스트, 해쉬  (0) 2025.04.10
JAVA 개념  (0) 2025.04.10
이재환의 자바 프로그래밍 입문  (0) 2025.04.10
JAVA 개념  (1) 2025.04.10