[수업] 25.09.02

장성욱·2025년 9월 2일

자바의 특징

  1. 자바는 객체로 시작해서 객체로 끝남
  2. 객체지향 프로그래밍에 특화된 언어 → 사람이 쓰기 편하게 만들어진 언어
  3. 자바는 클래스 없이 코드를 작성할 수 없음 → 클래스가 객체고, 객체가 클래스

객체 (OBJECT)

주체(스스로)를 제외한 모든 것

언어에서의 객체

  • 모든 것 → 모든 것을 언어로 표현
  • 연관성이 있는 복수개의 데이터를 다루기 위해 사용하는 문법
class Main {
	public static void main(String[] args) [
	
	int a = 10;
	// 변수 선언 및 초기화
	
	int[] arr = new int[3];
	// 변수 선언 및 초기화
	// 객체 - 배열(데이터의 순서 존재 -> index)
	// int[] : 정수들
	// arr : 변수명
	// = : 대입연산자
	// new : 객체 하나를 만들겠다
	// int[3] : new를 통해 만들어질 객체의 모양
	
	int[0] = 10;
	int[1] = 20;
	int[2] = 30;
	
	System.out.println(arr[0]);
	System.out.println(arr[1]);
	System.out.println(arr[2]);
	// 각각 10,20,30 출력
	// 인덱스에 접근하기 위해 배열이 리모컨을 누르는 방법
	
	System.out.println(arr.length);
	// 객체에 접근하기 위해서 리모컨을 누르는 방법
	
	System.out.println(arr);
	// arr의 주소 출력
	
	int[] arr2 = {10,20,30};
	// 배열 객체를 만드는 방법 -> 비어있는 공간을 만들 수 없어 잘 사용하지 않음
	// 자바에서 유일하게 new 없이 객체를 만드는 방법 (배열)
	
	int[][] arr3 = new int[3][5];
	// 이차원배열 -> 정수 배열들 -> 객체 안에 객체를 저장
	
	arr3[0][0] = 10;
	arr3[0][1] = 20;
	arr3[0][2] = 30;
	arr3[0][3] = 40;
	arr3[0][4] = 50;

캡처.PNG

오직 정수형 데이터들만 들어갈 수 있는 arr이라는 변수(하나의 공간)를 만들고,
int[3]모양으로 된 객체 하나를 만들고 해당 객체를 컨트롤 할 수 있는 리모컨을 연결 시킴

객체를 사용하는 이유

다량의 데이터를 한번에 빠르게 처리하기 위해서

ㄴ 객체를 사용하는 것이 무조건 좋은 것은 아님

배열 문제

public class Main{
	public static void main(String[] args) {
		
		// 크기 10짜리 배열 생성하기
		int[] arr = new int[10];
		
		// 10씩 증가하는 값을 하나씩 직접 넣기
		arr[0] = 10;
		arr[1] = 20;
		arr[2] = 30;
		arr[3] = 40;
		arr[4] = 50;
		arr[5] = 60;
		arr[6] = 70;
		arr[7] = 80;
		arr[8] = 90;
		arr[9] = 100;
		
		// 반복문으로 값 넣기
		for(int i = 0; i < arr.length; i ++) {
			arr[i] = (i + 1) * 10; 
			// 인덱스는 0부터 1씩 증가, 값은 10부터 10씩 증가
		}
		
		// 배열 값 순서대로 출력하기
		for(int i = 0; i < arr.length; i ++) {
			System.out.println(arr[i]);
		}
		
		// 배열의 모든 값 합계 구하기
		int s = 0;
		for (int i = 0; i <arr.length; i ++) {
			s += arr[i];
		}
		System.out.println("합계: " + s);
		
		// 배열의 모든 값 평균 구하기
		System.out.println("평균: ": + s / arr.length);
	}
}

예외처리

  • 예외가 발생하면 프로그램이 바로 종료될 수 있는데, 예외처리를 통해 프로그램이 안전하게 실행 / 종료하게 만들어줌
  • 먼저 발생한 문제에 대해서 예외처리 → 캐치 블럭은 여러 개의 일을 동시에 처리하지 않음
  • finally는 예외 상관없이 무조건 출력
public class Main{
	public static void main(String[] args) {
		
		try {
			int[] arr = new int[5];
			
			for(int i = 0; i < 10; i ++) {
				arr[i] = (i + 1) * 10;
					System.out.println(arr[i]);  // 예외가 발생할 가능성이 있는 코드 
			}
		} catch (ArrayIndexOutOfBoundsException e) {  // 예외가 발생했을 때 처리할 코드
			System.out.println("배열의 인덱스 범위초과");
		} catch (NumberFormatException e) {
			System.out.println("숫자 양식 예외 발생");
		} catch (Exception e) {
			System.out.println("포괄적인 예외 발생");
		} finally {
			System.out.println("???");  // 선택 사항: 예외 발생 여부와 상관없이 항상 실행되는 코드
	}
}

전역변수

  • 전 지역에서 사용 가능한 변수
  • 변수의 생명주기가 전 지역에서 사용 가능하게끔 설정되어 있음
  • 자바에는 실질적인 전역변수가 존재하지 않음
    • 자바는 클래스없이 코드를 작성할 수 없기 때문

자바에서 전역변수의 개념을 대체할 수 있는 변수

클래스 변수 (static변수)

  • 멤버변수, 필드
    • 클래스 안에서, 메서드 밖에서 선언된 변수
    • 같은 클래스 내부의 전 지역에서 사용 가능
    • 변수를 선언하고 최초 초기화를 하지 않으면, 기본값으로 초기화 됨
      • 값이 없다면 기본 값이 출력됨

지역변수

  • 제한된 지역 (본인이 만들어진 지역)에서 사용 가능한 변수
  • 메서드 안에서 선언된 변수 → 코드 블럭 내에서 선언된 변수 ( class Main{ } 제외)
  • 지역변수는 값을 초기화 하지 않으면 사용 불가
    • 값이 없다면 사용 불가

같은 공간 내에서 동일한 이름으로 변수를 선언할 수 없음

전역변수와 지역변수명이 값다면 지역변수가 쓰임

기본 자료형 타입

데이터 타입은 모두 클래스로 존재함

byte -> Byte
short -> Short
int -> Integer
long -> Long
floar -> Float
double -> Double
boolean -> Boolean
char -> Character


객체지향 프로그래밍의 특징 (OOP)

  1. 추상화
  2. 상속
  3. 다형성
  4. 캡슐화

사용자 정의 객체

변수, 메서드

객체의 속성

변수(속성) → 객체를 표현하기 위한 데이터를 저장

public class Main {
	public static void main(String[] args) {
		
		// 사용자 정의 객체
		// 각각의 이름과 나이
		
		사람 a철수 = new 사람();
		a철수.이름 = "철수";
		a철수.나이 = 10;
		
		System.out.println(a철수.이름 + ": " + a철수.나이);
		
		사람 a영수 = new 사람();
		a영수.이름 = "영수";
		a영수.나이 = 20;
		
		System.out.println(a영수.이름 + ": " + a영수.나이);
		
		사람 a영희 = new 사람();
		a영희.이름 = "영희";
		a영희.나이 = 30;
		
		System.out.println(a영희.이름 + ": " + a영희.나이);
	}
}

// 설계도
class 사람 {
	String 이름;
	int 나이;
}

위 코드에는 3개의 객체가 존재 → new가 3번 쓰였기 때문

캡처.PNG

객체의 기능

메서드(기능) → 실행을 위한 기능, 동작

메서드를 만드는 방법

class 사람 {
	String 이름;
	int 나이;
	
	void 메서드명() {
		System.out.prinln(이름 + ": " + 나이)
	}
}

// 메인클래스에 사용 불가
// 이름, 나이와 순서는 상관없지만, 일반적으로 메서드를 아래에 사용
// 메서드 안에 출력문, 조건문, 반복문 등 다 사용 가능

void : 허공이라는 의미 → 리턴을 안하겠다

메서드 활용법

public class Main {
	public static void main(String[] args) {
		
		// 사용자 정의 객체
		// 각각의 이름과 나이
		사람 a철수 = new 사람();
		a철수.이름 = "철수";
		a철수.나이 = 10;
		
		a철수.메서드명();  // 메서드 호출문, 메서드 실행문, 함수 호출문, 함수 실행문
		
		사람 a영수 = new 사람();
		a영수.이름 = "영수";
		a영수.나이 = 20;
		
		a영수.메서드명();
	}
}

// 설계도
class 사람 {
	String 이름;
	int 나이;
	
	void 메서드명() {
		System.out.println(이름 + ": " + 나이);
	}
}

함수

전역공간에서 만들어진 함수

메서드

클래스 내부에서 만들어진 함수

→ 자바에서는 함수, 메서드를 같은 의미로 사용함

public class Main{
	public static void main(String[] args) {
		사람 a사람 = new 사람();
		a사람.name = "Tom";
		a사람.test();
	}
}

class 사람{
	String name;
	int age;
	
	void test() {
		String name = "John";
		System.out.println(this.name);		
	}
}
// this가 없다면 John이 출력됨
profile
https://frost-puck-b0f.notion.site/B-2610fdaef71d80c49d1bccdcb575dcb5

0개의 댓글