int[][] arr = {
{11},
{22, 33},
{44, 55, 66}
};
🚩 실습문제 5
2차원 배열의 행과 열의 크기를 사용자에게 직접 입력받되, 1~10사이 숫자가 아니면
“반드시 1~10 사이의 정수를 입력해야 합니다.” 출력 후 다시 정수를 받게 하세요.
크기가 정해진 이차원 배열 안에는 영어 대문자가 랜덤으로 들어가게 한 뒤 출력하세요.
(char형은 숫자를 더해서 문자를 표현할 수 있고 65는 A를 나타냄, 알파벳은 총 26글자)
실행 화면
행 크기 : 5
열 크기 : 4
T P M B
U I H S
Q M B H
H B I X
G F X I
import java.util.Scanner;
import java.util.Random;
public class Java_05 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Random random = new Random();
int rows;
int columns;
// 행 크기 입력 받기
while (true) {
System.out.print("행 크기: ");
rows = scanner.nextInt();
if (rows >= 1 && rows <= 10) {
break; }
else {
System.out.println("반드시 1~10 사이의 정수를 입력해야 합니다."); }
}
// 열 크기 입력 받기
while (true) {
System.out.print("열 크기: ");
columns = scanner.nextInt();
if (columns >= 1 && columns <= 10) {
break; }
else {
System.out.println("반드시 1~10 사이의 정수를 입력해야 합니다."); }
}
// 이차원 배열 생성 및 랜덤 값 할당
char[][] arr = new char[rows][columns];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
arr[i][j] = (char) (random.nextInt(26) + 65); // 65부터 90까지의 랜덤 값으로 대문자 할당
}
}
// 배열 출력
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
🚩 실습문제 9
문제 ( 메서드명 : public void practice9( ) { } )
String 2차원 배열 6행 6열을 만들고 행의 맨 위와 제일 앞 열은 각 인덱스를 저장하세요.
그리고 사용자에게 행과 열을 입력 받아 해당 좌표의 값을 'X'로 변환해 2차원 배열을 출력하세요.
https://velog.io/@layssingcar/2%EC%B0%A8%EC%9B%90-%EB%B0%B0%EC%97%B4-%EC%8B%A4%EC%8A%B5%EB%AC%B8%EC%A0%9C
위의 주소 실습문제 9 번 참고
실행 화면
import java.util.Scanner;
public class Java_06 {
public static void main(String[] args) {
Example example = new Example();
example.practice9();
}
public void practice9() {
String[][] array = new String[6][6];
// 배열 초기화
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
if (i == 0) {
array[i][j] = String.valueOf(j);
} else if (j == 0) {
array[i][j] = String.valueOf(i);
} else {
array[i][j] = "O";
}
}
}
// 배열 출력
printArray(array);
// 사용자 입력 받아서 좌표 값 변경
Scanner scanner = new Scanner(System.in);
System.out.print("행 입력: ");
int row = scanner.nextInt();
System.out.print("열 입력: ");
int col = scanner.nextInt();
if (row >= 0 && row < array.length && col >= 0 && col < array[row].length) {
array[row][col] = "X";
} else {
System.out.println("유효하지 않은 좌표입니다.");
}
// 변경된 배열 출력
printArray(array);
}
private void printArray(String[][] array) {
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j] + " ");
}
System.out.println();
}
System.out.println();
}
}
class TV{
private int size;
public TV(int size) { this.size = size; }
public int getSize() { return size; }
}
[1번] 다음 main() 메소드와 실행 결과를 참고하여
TV를 상속받은 ColorTV 클래스를 작성하라.
public static void main(String[] args) {
ColorTV myTV = new ColorTV(32, 1024);
myTV.printProperty();
}
32인치 1024컬러
class TV{
private int size;
public TV(int size) { this.size = size; }
public int getSize() { return size; }
}
class ColorTV extends TV {
private int resolution;
public ColorTV(int size, int resolution) {
super(size);
this.resolution = resolution;
}
public void printProperty() {
System.out.println("size: " + getSize() + "인치");
System.out.println("해상도 : " + resolution + " 컬러");
}
}
public class Java_07_TV {
public static void main(String[] args) {
ColorTV myTV = new ColorTV(32, 1024);
myTV.printProperty();
}
}
[2번] 다음 main() 메소드와 실행 결과를 참고하여 ColorTV를 상속받는
IPTV 클래스를 작성하라.
public static void main(String[] args) {
IPTV iptv = new IPTV("192.1.1.2", 32, 2048); //"192.1.1.2" 주소에 32인치, 2048컬러
iptv.printProperty();
}
나의 IPTV는 192.1.1.2 주소의 32인치 2048컬러
class TV{
private int size;
public TV(int size) { this.size = size; }
public int getSize() { return size; }
}
class IPTV extends ColorTV {
private String ipTv;
public IPTV(String ipTv, int size, int resolution) {
super(size, resolution);
this.ipTv = ipTv;
}
public void printProperty() {
super.printProperty();
System.out.println("IP TV: " + ipTv);
}
}
public class Java_07_TV {
public static void main(String[] args) {
// 2048컬러
IPTV iptv = new IPTV("192.1.1.2", 32, 2048);
iptv.printProperty();
}
}
"Has-a" 관계
"Has-a" 관계는 한 객체가 다른 객체를 포함 또는 가지고 있는 관계를 나타낸다.
이 관계는 객체 간에 구성(composition) 또는 집합(aggregation)으로 표현될 수 있다.
예를 들어, 자동차 클래스(Car)가 엔진 클래스(Engine)를 가지고 있는 경우, 자동차는 엔진을 "가지고 있다"고 할 수 있고, 이는 "Car has-an Engine" 관계이다.
"Has-a" 관계는 한 객체가 다른 객체를 포함하는 경우를 나타내며, 객체 간에 구성 관계가 있는 경우 유용하게 사용된다.
"Is-a" 관계
"Is-a" 관계는 상속을 통해 표현되며, 한 클래스가 다른 클래스의 하위 클래스 또는 파생 클래스인 경우를 나타낸다.
이 관계는 일반화(generalization)로 표현될 수 있다.
예를 들어, 동물 클래스(Animal)가 포유류 클래스(Mammal)를 상속받는 경우, 동물은 포유류의 "일종"이라고 할 수 있고, 이는 "Animal is-a Mammal" 관계입니다.
"Is-a" 관계는 객체들 간의 계층 구조를 표현하고 다형성을 지원하기 위해 사용된다.
상속을 통해 부모 클래스의 속성과 동작을 하위 클래스가 상속받을 수 있게 되며, "is-a" 관계를 이용하여 코드의 재사용성과 확장성을 높일 수 있다.
- 객체 지향 프로그래밍에서 폴리멀티즘은 다형성이라고도 불리며, 다양한 형태를 가진 객체가 동일한 인터페이스를 사용하여 다양한 방식으로 동작할 수 있는 능력을 의미한다.
- 폴리멀티즘은 상속과 인터페이스를 기반으로 작동한다.
- 상속을 통해 클래스들은 다른 클래스의 속성과 동작을 상속받을 수 있으며, 인터페이스는 클래스가 구현해야 하는 메서드를 정의한다.
유연성
유지 보수 용이성
확장성
가독성
폴리멀티즘은 객체 지향 프로그래밍에서 중요한 개념이며, 객체 간의 유연하고 확장 가능한 상호작용을 가능하게 한다.