[Lecture/Java] 03강 - Java 기본 문법(2), 클래스와 상속(1)

김찬미·2025년 5월 27일

3강 - Java 기본 문법(2), 클래스와 상속(1)

  • 배열
  • 문자열
  • Scanner 클래스
  • 클래스 정의
  • 객체의 사용

✅ 배열

같은 자료형의 원소를 정해진 개수만큼 가지고 있는 객체

🔹배열의 선언

//형식: 자료형[] 변수이름; or 자료형 변수이름[];
int[] a; int b[];
int [][] c; int d[][]; int[] e[];
int f[10]; //오류

🔹배열의 초기화

선언과 동시에 중괄호를 이용하여 초기값 지정

  • 자동으로 메모리 공간 확보
  • 초기화 또는 생성 과정을 거쳐야 배열의 원소 사용 가능


🔹배열의 생성

new 연산자 이용
✔️ 배열의 크기를 정하고 메모리 공간 확보
✔️ new 연산자는 메모리의 주소값을 리턴
✔️ 원소가 숫자일 경우 0, 참조형인 경우 null로 자동 초기화

int a[] = new int[3]; //선언과 생성
int b[]; b = new int[10];
int anArray4[][] = new int[3][2];

🔸배열의 크기

배열은 크기를 가지는 내장 속성 length를 가짐
→ 사용법: 배열이름.length

public class Main {
    public static void main(String args[]) {
        int twoArray[][] = { { 0, 1 }, { 10, 11, 12 } };
        
        for (int i = 0; i < twoArray.length; i++) {
            for (int j = 0; j < twoArray[i].length; j++) {
                System.out.println(twoArray[i][j]);
            }
        }
    }
}

✅ 문자열

  • String 클래스는 문자열을 표현하고 처리하기 위한 참조형
  • String형의 변수는 참조형이나 기본형 변수처럼 사용할 수 있음
// 이중 따옴표 사용
String s1 = "Java";
String s2 = new String("Java"); // 생성자 사용

// 참조형 변수에는 null이라는 특별한 값을 지정할 수 있음
if (s1 != null) {...}

🔹문자열의 + 연산자

  • 두 문자열을 연결하는 것
  • (문자열 + 기본형) 또는 (문자열 + 다른 참조형)도 가능
    • + 연산자 사용 시, 다른 형의 값은 문자열로 자동 형변환⭕
  • print()println()에서 자주 사용됨
    • 1개 매개변수를 문자열로 바꾸어 출력함
    • System.out은 화면 출력을 위한 객체
System.out.println("result=" + " " + result);
System.out.println('A'+ 0); //65
System.out.println("A" + 0);

Scanner 클래스

키보드나 파일로부터 다양한 자료를 입력 받을 때 사용한다.

  • 기본적으로 공백 문자로 구분되는 단어(토큰) 단위로 입력됨
  • 문자열이나 기본형 값의 입력을 위해 next(), nextInt()와 같은 메소드 제공
Scanner sc = new Scanner(System.in);
String name = sc.next();

🔸입력용 메소드

Scanner s = new Scanner(System.in);
String name = s.next()
import java.util.Scanner;

public class Main {
	public static void main(String args[]) {
    Scanner sc = new Scanner(System.in);
    
    while (sc.hasNextInt()) {
    	System.out.println(sc.nextInt());
    }
}

✅ 클래스 정의

동종 객체를 표현하기 위한 데이터 필드(멤버 변수)메소드를 정의함

  • 부모 클래스의 상속, 인터페이스의 구현, 추상 클래스, final 클래스 등을 정함
[접근제어자] class 클래스이름
	[extends 부모 클래스 이름] [implements 인터페이스 이름]
{
	<데이터필드 선언>;
    <생성자 선언>;
    <메소드 선언>;
}

메소드 정의

  • 헤더몸체로 구성됨
  • 클래스 정의 내부에 존재함
[접근제어자] 반환형 메소드이름([자료형 인자[, 자료형 인자...]]) 
												[throws 예외이름]
	{
    	<문장> ...
    }
class Circle {
...
	public double getArea() {
    	return this.r * this.r * 3.14;
    }
}

클래스 정의와 사용

클래스 정의에서 데이터 필드와 메소드

  • 인스턴스 변수(메소드)와 클래스 변수(메소드)
    ✔️ 개별 객체가 소유하는 인스턴스 변수와 인스턴스 메소드
    ✔️ 클래스에 속한 객체가 공유하는 클래스변수와 클래스 메소드
  • 객체의 상태는 데이터 필드로, 행위는 메소드로 구현됨
  • 메소드는 저장된 데이터를 이용해 기능을 수행

💡 언제 클래스를 사용할까?

  • 클래스형 변수를 선언할 때 (클래스는 객체의 자료형)
  • 객체를 생성할 때
  • 상속받아 클래스를 정의할 때

클래스 접근 제어자

클래스의 사용 범위를 제한하는 것

  • 생략, public, private, protected
    ✔️ privateprotected는 내부 클래스에서만 사용

공개 범위: public  >  protected  >  default(생략)  >  private

🔓 1. public: 모든 클래스에서 사용 가능

🛡️ 2. protected: 같은 패키지 + 자식 클래스에서 사용 가능

📦 3. default: 같은 패키지에서만 사용 가능

🔐 4. private: 같은 클래스 내부에서만 사용 가능


✅ 객체의 사용

기본 생성자

클래스 정의에서 단 하나의 생성자 정의도 없다면 컴파일러가 다음과 같은 것을 자동으로 만들어줌

public Circle() {}

생성자 몸체의 첫 줄에 부모 생성자의 명시적 호출이 없다면, 다음 코드가 자동으로 들어감

super(); // 부모 클래스의 기본 생성자를 호출

따라서 부모 클래스에서 기본 생성자의 존재를 확인해야 함


profile
백엔드 지망 학부생

0개의 댓글