본문 바로가기

Java

반응형

이번 글에서는 클래스 내부에 동작(기능)을 구현하는 메서드(method)를 정의하고,
객체를 통해 메서드를 호출하는 기본 구조를 학습합니다.
메서드는 객체의 동작을 정의하는 핵심 요소이며,
입력값(매개변수)을 받아 결과를 반환하거나 단순 동작을 수행합니다.


📦 클래스 코드 (Calculator.java)

package ch06.sec08.exam01;

public class Calculator {
	void powerOn() {
		System.out.println("전원을 켭니다.");
	}

	void powerOff() {
		System.out.println("전원을 끕니다.");
	}

	int plus(int x, int y) {
		return x + y;
	}

	double divide(int x, int y) {
		return (double) x / (double) y;
	}
}

📌 실행 코드 (CalculatorExample.java)

package ch06.sec08.exam01;

public class CalculatorExample {
	public static void main(String[] args) {
		Calculator cal = new Calculator();

		cal.powerOn();

		int re1 = cal.plus(5, 6);
		System.out.println("result1 : " + re1);

		int x = 10, y = 4;
		double b = cal.divide(x, y);
		System.out.println("result2 : " + b);

		cal.powerOff();
	}
}

💬 코드 설명

  • void powerOn() / powerOff()
    반환값 없이 콘솔 메시지를 출력하는 기능 메서드
  • int plus(int x, int y)
    → 두 정수 값을 받아 합계를 반환하는 정수 연산 메서드
  • double divide(int x, int y)
    → 정수 두 개를 받아 실수로 나눈 결과를 반환
  • Calculator cal = new Calculator();
    → Calculator 객체 생성 후, 해당 메서드들을 호출

💻 실행 결과

전원을 켭니다.
result1 : 11
result2 : 2.5
전원을 끕니다.

📌 간단 정리

메서드 설명
void powerOn() 전원 켜기 메시지 출력
int plus(x, y) 정수 덧셈 결과 반환
double divide(x, y) 정수 나눗셈 결과를 실수로 반환
void powerOff() 전원 끄기 메시지 출력

💡 포인트 정리

  • 메서드는 객체의 동작(기능)을 정의하는 구성 요소
  • void → 반환값 없음 / int, double → 결과 반환
  • 메서드는 객체를 통해 호출해야 동작함 (cal.메서드명() 형태)
  • 연산 메서드는 결과를 변수에 저장하거나 직접 출력 가능
  • 나눗셈 결과를 실수로 얻으려면 형변환 필요
댓글
반응형

이번 글에서는 자바의 생성자 오버로딩(Constructor Overloading)을 통해
객체를 다양한 방식으로 초기화하는 방법을 배웁니다.
생성자 오버로딩이란, 같은 이름의 생성자를 매개변수의 수나 타입에 따라 여러 개 정의하는 것을 말합니다.


📦 클래스 코드 (Car.java)

package ch06.sec07.exam04;

public class Car {
	String company = "현대";
	String model;
	String color;
	int maxSpeed;

	Car() {
	}

	Car(String model) {
		this.model = model;
	}

	Car(String model, String color) {
		this.model = model;
		this.color = color;
	}

	Car(String model, String color, int maxSpeed) {
		this.model = model;
		this.color = color;
		this.maxSpeed = maxSpeed;
	}
}

📌 실행 코드 (CarExample.java)

package ch06.sec07.exam04;

public class CarExample {
	public static void main(String[] args) {
		Car car = new Car();

		System.out.println("car.company : " + car.company);
		System.out.println("-".repeat(40));

		car = new Car("자가용");
		System.out.println("car.company : " + car.company);
		System.out.println("car.model : " + car.model);
		System.out.println("-".repeat(40));

		car = new Car("자가용", "빨강");
		System.out.println("car.company : " + car.company);
		System.out.println("car.model : " + car.model);
		System.out.println("car.color : " + car.color);
		System.out.println("-".repeat(40));

		car = new Car("택시", "검정", 200);
		System.out.println("car.company : " + car.company);
		System.out.println("car.model : " + car.model);
		System.out.println("car.color : " + car.color);
		System.out.println("car.maxSpeed : " + car.maxSpeed);
	}
}

💬 코드 설명

  • Car()
    → 매개변수 없는 기본 생성자
  • Car(String model)
    → 모델명만 초기화
  • Car(String model, String color)
    → 모델명과 색상 초기화
  • Car(String model, String color, int maxSpeed)
    → 모델명, 색상, 최고속도까지 모두 초기화
  • 각각의 생성자는 this.필드 = 매개변수 형식으로 필드를 초기화함

💻 실행 결과

car.company : 현대
----------------------------------------
car.company : 현대
car.model : 자가용
----------------------------------------
car.company : 현대
car.model : 자가용
car.color : 빨강
----------------------------------------
car.company : 현대
car.model : 택시
car.color : 검정
car.maxSpeed : 200

📌 간단 정리

생성자 호출 초기화 내용
new Car() company만 초기값 ("현대")
new Car("자가용") model만 설정
new Car("자가용", "빨강") model + color 설정
new Car("택시", "검정", 200) model + color + maxSpeed 설정

💡 포인트 정리

  • 생성자 오버로딩은 매개변수의 개수나 타입이 다르면 여러 개 정의 가능
  • 필요한 정보만 넣어 객체를 생성할 수 있어 유연한 객체 생성이 가능
  • 모든 생성자에서 공통 필드는 기본값으로 설정되거나, 일부만 지정 가능
  • this.필드 = 매개변수 구문은 필드와 매개변수 이름이 동일할 때 사용
댓글
반응형

이번 글에서는 생성자를 사용하여 객체의 필드 값을 초기화하는 방법을 학습합니다.
this 키워드를 통해 매개변수를 필드에 대입하고,
같은 클래스로 서로 다른 데이터를 가진 객체를 여러 개 생성하여 활용하는 예제를 실습합니다.


📦 클래스 코드 (Korean.java)

package ch06.sec07.exam02;

public class Korean {
	String nation = "대한민국";
	String name;
	String ssn;

	public Korean(String name, String ssn) {
		this.name = name;
		this.ssn = ssn;
	}
}

📌 실행 코드 (KoreanExample.java)

package ch06.sec07.exam02;

public class KoreanExample {
	public static void main(String[] args) {
		String name = "박자바";
		String ssn = "011225-1234567";

		Korean korean1 = new Korean(name, ssn);
		System.out.println("korean1.nation : " + korean1.nation);
		System.out.println("korean1.name : " + korean1.name);
		System.out.println("korean1.ssn : " + korean1.ssn);

		System.out.println("-".repeat(40));

		name = "김자바";
		ssn = "930525-0654321";

		Korean korean2 = new Korean(name, ssn);
		System.out.println("korean2.nation : " + korean2.nation);
		System.out.println("korean2.name : " + korean2.name);
		System.out.println("korean2.ssn : " + korean2.ssn);
	}
}

💬 코드 설명

  • String nation = "대한민국";
    모든 객체에 공통 적용되는 필드값
  • this.name = name;
    → 생성자 매개변수 name을 필드 name에 저장
    → 이름이 같기 때문에 this로 필드와 매개변수 구분
  • new Korean(...)
    → 생성자 호출 시 각각의 객체에 맞는 데이터를 전달하여 상태 초기화

💻 실행 결과

korean1.nation : 대한민국
korean1.name : 박자바
korean1.ssn : 011225-1234567
----------------------------------------
korean2.nation : 대한민국
korean2.name : 김자바
korean2.ssn : 930525-0654321

📌 간단 정리

필드 설명 값 (예시)
nation 모든 객체 공통값 "대한민국"
name 객체마다 다른 값 "박자바", "김자바"
ssn 객체마다 다른 주민등록번호 각 객체별 입력값

💡 포인트 정리

  • 생성자는 객체 생성 시 필드 초기화를 담당
  • this.필드명 = 매개변수명 형태로 필드와 지역변수 구분
  • 여러 객체를 생성해도 공통 필드는 유지되며,
    매개변수에 따라 다른 상태를 가진 객체 생성 가능
  • 객체지향 프로그래밍의 기본은 "상태 + 동작" → 지금은 상태 설정 중심
댓글
반응형

이번 글에서는 자바 클래스에서 객체를 생성할 때 초기값을 지정하는 생성자(Constructor)에 대해 배웁니다.
생성자는 클래스 이름과 동일하며, 객체가 생성될 때 자동으로 호출되어 필드를 초기화하는 역할을 합니다.


📦 클래스 코드 (Car.java)

package ch06.sec07.exam01;

public class Car {
	Car(String model, String color, int maxspeed) {
		// 생성자 본문
	}
}

📌 실행 코드 (CarExample.java)

package ch06.sec07.exam01;

public class CarExample {
	public static void main(String[] args) {
		Car car = new Car("그랜저", "검정", 20);
	}
}

💬 코드 설명

  • Car(String model, String color, int maxspeed)
    → Car 클래스의 생성자
    → 매개변수를 받아 객체 생성 시 필요한 값을 전달받음
  • new Car("그랜저", "검정", 20);
    → 생성자 호출과 동시에 객체 생성
  • 아직 필드 정의나 초기화 내용은 없지만, 형식을 갖춘 생성자 사용을 시작하는 예제

💻 실행 결과

(화면 출력 없음 — 생성자만 호출되고, 출력하는 내용이 없기 때문)


📌 간단 정리

요소 설명
생성자(Constructor) 클래스와 동일한 이름을 가지며, 객체 생성 시 자동 호출됨
매개변수 객체 생성 시 전달되는 값
반환 타입 생성자는 반환 타입이 없음 (void도 X)
목적 객체 생성과 동시에 초기값을 설정

💡 포인트 정리

  • 생성자는 클래스 이름과 같아야 하며, 리턴 타입을 쓰지 않음
  • 객체 생성 시 new 클래스명(값1, 값2, ...) 으로 호출됨
  • 생성자를 사용하면 객체 생성과 동시에 필드 초기화를 편리하게 처리할 수 있음
  • 현재 예제는 구조만 보여주며, 다음 단계에서는 실제 필드와 연결할 예정
댓글
반응형

이번 글에서는 클래스의 객체를 생성한 뒤,
객체의 필드 값을 직접 대입하고 출력해보는 실습을 진행합니다.
이 과정을 통해 객체의 속성(상태)을 설정하고 사용하는 기본적인 방법을 이해할 수 있습니다.


📦 클래스 코드 (Car.java)

package ch06.sec06.exam02;

class Car {
	String company;
	String model;
	String color;
	int maxspeed;
	int speed;
}

📌 실행 코드 (CarExample.java)

package ch06.sec06.exam02;

public class CarExample {
	public static void main(String[] args) {
		Car car = new Car();

		car.company = "현대자동차";
		car.model = "그랜저";
		car.color = "검정";
		car.maxspeed = 350;

		System.out.println("company : " + car.company);
		System.out.println("model : " + car.model);
		System.out.println("color : " + car.color);
		System.out.println("maxspeed : " + car.maxspeed);
		System.out.println("speed : " + car.speed);

		car.speed = 60;
		System.out.println("new speed : " + car.speed);
	}
}

💬 코드 설명

  • Car car = new Car();
    → Car 클래스의 인스턴스 생성
  • car.필드명 = 값;
    → 필드 값을 직접 대입하여 객체의 상태 설정
  • System.out.println(...)
    → 필드 값 확인 출력
  • car.speed = 60;
    → 기존 기본값 0이었던 속도를 사용자가 설정한 값(60) 으로 변경

💻 실행 결과

company : 현대자동차
model : 그랜저
color : 검정
maxspeed : 350
speed : 0
new speed : 60

📌 간단 정리

필드 설명
company 제조사 현대자동차
model 모델명 그랜저
color 색상 검정
maxspeed 최고 속도 350
speed 현재 속도 0 → 60 (수정됨)

💡 포인트 정리

  • 객체를 생성한 후, 필드에 직접 값을 할당할 수 있다
  • 필드는 클래스의 속성(데이터) 역할을 하며, 객체의 상태를 나타낸다
  • 기본값을 그대로 둘 수도 있고, 후에 변경도 가능
  • 객체는 상태(필드) + 동작(메서드)로 구성됨 → 이번엔 상태에 집중
댓글
반응형

이번 글부터는 자바의 객체지향 프로그래밍(OOP)의 핵심 요소인
클래스와 객체 생성을 배우게 됩니다.
클래스를 통해 속성(필드)을 정의하고,
객체를 생성한 뒤 초기 상태의 값을 확인하는 기본 구조를 학습합니다.


📦 클래스 코드 (Car.java)

package ch06.sec06.exam01;

public class Car {
	String model;
	boolean start;
	int speed;
}

📌 실행 코드 (CarExample.java)

package ch06.sec06.exam01;

public class CarExample {
	public static void main(String[] args) {
		Car car = new Car();

		System.out.println("model : " + car.model);
		System.out.println("start : " + car.start);
		System.out.println("speed : " + car.speed);
	}
}

💬 코드 설명

  • Car 클래스
    → model, start, speed라는 3개의 필드(멤버 변수) 정의
    → 데이터 타입은 각각 String, boolean, int
  • Car car = new Car();
    → Car 클래스의 객체(인스턴스) 생성
  • 각 필드 값 출력
    초기화하지 않은 경우에도 자바는 기본값을 자동으로 할당

💻 실행 결과

model : null
start : false
speed : 0

📌 필드의 기본값

타입 기본값
String (참조형) null
boolean FALSE
int 0

💡 포인트 정리

  • 클래스는 객체의 설계도, 객체는 클래스를 기반으로 생성된 실체
  • 필드는 객체가 가지는 데이터(속성)
  • 객체를 new로 생성하면 필드들은 자동으로 기본값으로 초기화
  • 초기값을 따로 설정하지 않아도 출력 가능하지만, 보통은 생성자나 메서드로 초기화함
댓글
반응형

오전 수업 요약

1. 문자열 참조 비교 (== vs .equals())

strArray[0] = "Java";
strArray[2] = new String("Java");
  • == : 주소(참조) 비교
  • .equals() : 문자열 내용 비교
  • 결과:
    • strArray[0] == strArray[1] → true
    • strArray[0] == strArray[2] → false
    • strArray[0].equals(strArray[2]) → true

2. 향상된 for문 (for-each)

int[] x = {95, 71, 84, 93, 87};
for (int y : x) sum += y;
  • 배열 전체 반복을 간단하게
  • 평균 계산 실습

3. main 메서드의 인자 사용 (args[])

String str1 = args[0];
int num1 = Integer.parseInt(str1);
  • 실행 시 인자 2개 필요
  • 두 정수의 합 계산 및 출력
  • 입력값 없을 경우 종료 처리

오후 수업 요약 (실습 중심)

1. mission6 - 2차원 배열 구조 확인

static void mission6() {
		int[][] array = { { 95, 86 }, { 83, 92, 96 }, { 78, 83, 93, 87, 88 } };

		System.out.println("배열의 줄 : " + array.length);
		for (int i = 0; i < array.length; i++)
			System.out.println((i + 1) + "번째 배열의 칸 : " + array[i].length);

	}
int[][] array = { {95, 86}, {83, 92, 96}, {78, 83, 93, 87, 88} };

 

  • .length로 줄(행) 수와 칸(열) 수 확인
  • 출력 예:
배열의 줄 : 3
1번째 배열의 칸 : 2

 

2. mission7 - 최대값 구하기

static void mission7() {
		int array[] = { 1, 5, 3, 8, 2 }, max = 0;

		for (int num : array)
			if (num > max)
				max = num;

		System.out.println("max num : " + max);
	}
int[] array = {1, 5, 3, 8, 2};
  • 향상된 for문 사용
  • 조건문으로 최대값 판별

3. mission8 - 2차원 배열 총합 및 평균

static void mission8() {
		int array[][] = { { 95, 86 }, { 83, 92, 96 }, { 78, 83, 93, 87, 88 } }, sum = 0, count = 0;

		for (int i = 0; i < array.length; i++) {
			count += array[i].length;
			for (int j = 0; j < array[i].length; j++)
				sum += array[i][j];
		}

		System.out.println("점수의 전체 합 : " + sum);
		System.out.println("점수 전체의 평균 : " + (double) sum / count);
	}
  • 합산 및 요소 수 카운트 → 평균 출력
sum += array[i][j];
count += array[i].length;

4. mission9 - 학생 점수 관리 프로그램

static void mission9() {
		Scanner sc = new Scanner(System.in);
		String str;
		int count = 0, scores[] = null, sum = 0;

		while (true) {
			System.out.println("-".repeat(40));
			System.out.println("1. 학생수 | 2. 점수입력 | 3. 점수리스트 | 4. 분석 | 5. 종료");
			System.out.println("-".repeat(40));
			System.out.print("선택> ");
			str = sc.nextLine();

			if (str.equals("1")) {
				System.out.print("학생수> ");
				str = sc.nextLine();
				count = Integer.parseInt(str);
				scores = new int[count];
			} else if (str.equals("2")) {
				if (scores == null) {
					System.out.println("현재 정해진 학생 수가 없습니다.");
					continue;
				}

				for (int i = 0; i < scores.length; i++) {
					System.out.print("scores[" + i + "]>");
					str = sc.nextLine();
					count = Integer.parseInt(str);
					scores[i] = count;
				}
			} else if (str.equals("3")) {
				for (int i = 0; i < scores.length; i++)
					System.out.println("scores[" + i + "] : " + scores[i]);
			} else if (str.equals("4")) {
				for (int i : scores) {
					if (i > count)
						count = i;
					sum += i;
				}

				System.out.println("최고 점수 : " + count);
				System.out.println("평균 점수 : " + (double) sum / scores.length);
			} else if (str.equals("5"))
				break;
		}

		System.out.println("프로그램 종료");
	}
  • 메뉴 기능 구성:
    1. 학생 수 설정
    2. 점수 입력
    3. 점수 출력
    4. 최고 점수 및 평균 분석
    5. 종료
  • 입력/출력 및 예외 처리 포함

🧠 9일차 핵심 요약표

주제 내용
문자열 비교 == (참조), .equals() (내용)
향상된 for문 배열 반복 간단화
main 인자 외부 입력값 처리 및 타입 변환
2차원 배열 구조 확인, 평균 계산
실습 문제 최대값, 총합, 점수 분석 프로그램 구현

 

댓글
반응형

이번 글에서는 자바 애플리케이션 실행 시 외부에서 값을 입력받는 방식인
main 메서드의 매개변수 String[] args를 사용해 명령행 인자를 처리하는 방법을 학습합니다.
실행 시 입력값을 활용하여 유연한 프로그램을 만드는 기초가 됩니다.


📌 예제 코드

public class MainStringArrayArgument {
	public static void main(String[] args) {
		if (args.length != 2) {
			System.out.println("프로그램 입력값 부족");
			System.exit(0);
		}

		String str1 = args[0], str2 = args[1];

		int num1 = Integer.parseInt(str1), num2 = Integer.parseInt(str2);
		int sum = num1 + num2;
		System.out.println(num1 + " + " + num2 + " = " + sum);
	}
}

💬 코드 설명

  • String[] args
    → 프로그램 실행 시 외부에서 전달되는 문자열 배열
    → 입력값이 없으면 args.length == 0
  • args.length != 2
    → 인자가 2개가 아닐 경우 오류 메시지 출력 후 프로그램 종료
  • args[0], args[1]
    → 입력값 2개를 문자열로 받아서 각각 저장
  • Integer.parseInt()
    → 문자열을 정수로 변환
  • System.exit(0)
    → 프로그램 즉시 종료

💻 실행 예시 (명령행 입력)

> java MainStringArrayArgument 10 20
10 + 20 = 30

→ 인자가 2개이므로 정상 실행됨

> java MainStringArrayArgument 10
프로그램 입력값 부족

→ 인자가 1개이므로 종료됨


📌 간단 정리

요소 설명
main(String[] args) 자바 프로그램의 진입점, 외부 입력을 배열로 받음
args.length 입력된 인자의 개수
args[i] 인자 접근 (i번째)
Integer.parseInt() 문자열을 정수로 변환

💡 포인트 정리

  • main(String[] args)는 외부에서 실행 시 데이터를 입력받을 수 있도록 설계된 구조
  • args.length를 활용해 입력값 유무를 검증해야 함
  • 숫자 입력은 반드시 parseInt() 등으로 형변환 필요
  • System.exit(0)은 정상 종료, System.exit(1)은 오류 종료로 사용 가능
댓글