염비 2024. 9. 2. 21:23

1. 배열(Array)

  • 동일한 특성을 갖는 여러 개의 변수의 모음
for(int i=0; i<1000; i++){
	stdName[i] = "knight." + stdName[i];
}
  • 배열은 자체적으로 length라는 변수를 보유
    => 배열의 길이가 얼마인가? ex) stdName.length
  • 값 한 개만 존재 : scalar
  • 값 여러 개가 존재하는 것 : vector
  • 값 여러 개가 여러 묶음 있는 것 : matrix
package day07;

import util.MyUtil;

public class ArrayEx {

	public static void main(String[] args) {
		MyUtil.p("Array Example");
		
		String[] str = new String[5];
		str[0] = "Eliot";
		str[3] = "Abdula";
		MyUtil.p("str.length? " + str.length);
		
		String[] stdName1 = new String[5];
		String[] stdName2 = {"A", "B", "C", "D", "Federer"};

		// String의 재사용성
		String aaa = new String("James");
		String bbb = "David";
		String ccc = new String("James");
		String ddd = "David";
		
		MyUtil.p("aaa == ccc? " + (aaa == ccc));
		MyUtil.p("bbb == ddd? " + (bbb == ddd));
		MyUtil.p("aaa === ccc? " + aaa.equals(ccc)); //값만 비교(공간 주소 신경 안 씀)
		
		int score = 100;
		Integer score1 = new Integer(100);
		
		
		MyUtil.p("===============================================");
		int[] score2 = {10, 20, 10, 30, 20};
		
		// 학생의 이름과 점수들을 출력해보세요.
		// 학생이름1 : **점
		// 학생이름2 : **점
		// ...
		for(int i=0; i<score2.length; i++) {
			MyUtil.p("학생이름" + (i+1) +  " : " + score2[i] + "점");
		}
		
		// 2-dimensional Array
		String[][] classStd = {{"A","B"},{"C","D"}};
		// classStd[0][0] ~ [1][1]
		// A학생의 위치는 classStd[0][0]
		// C학생의 위치는 classStd[1][0]
		// String[] class0 = classStd[0]
		
		// 모든 학생 이름 출력하기x
		MyUtil.p("===============================================");
		MyUtil.p("Display All Student's Name");
		MyUtil.p(MyUtil.GREEN + "[ General ]" + MyUtil.END);
		for(int i=0; i<stdName2.length; i++) {
			MyUtil.p(stdName2[i]);
		}
		
		MyUtil.p("===============================================");
		MyUtil.p("Display All Student's Name");
		MyUtil.p(MyUtil.RED + "[ Enhanced For문 ]" + MyUtil.END);
		// stdName2에서 하나를 꺼내서 name에 넣고 한 바퀴 수행
		for(String name : stdName2) { //stdName2는 String의 집합
			MyUtil.p(name);
			// 이름이 "C"이면 그만둠
			if(name.equals("C")) {
				break;
			}
		}
		
		// Enhanced For를 활용하여 점수를 출력하시오.
		for(int scores : score2) {
			System.out.println(scores);
			// MyUtil.p("" + scores);
		}
		
		// Enhanced For를 활용한 Difficulty GOD 문제
		// String[][] classStd = {{"A","B"},{"C","D"}};
		// Enhanced For를 활용하여 모든 학생을 출력하시오
		for(String[] cls : classStd) { //classStd[0], classStd[1]
			for(String cls2 : cls) {
				System.out.println(cls2);
			}
		}
		
//		Welcome welcome = new Welcome();
//		String[] zzz = null;
//		welcome.main(zzz);
		
	}
}

 

 

 

2. 클래스와 객체지향(Object-Oriented)

(1) 정의

클래스(class) 설계도
객체(object) 설계도로 만든 제품

 

클래스는 객체로 구현될 때 의미가 있다.

cf) Apple과 An Apple

 

객체지향언어는 코드 개발 최소화가 목적

객체지향 프로그래밍은 클래스를 디자인하는 것

 

학생A, 학생B, 학생C

다 학생

다 사람

다 동물

다 만물(모든 Class는 Object를 조상으로 삼고 있음)

 

 

(2) 객체지향언어의 특징

1) 상속(Inheritance)

(유전에 가까움)

하위 클래스가 상위 클래스를 물려받는 것

 

2) 다형성(Polymorphism)

같은 이름으로 호출하나, 호출 시 전달한 인자의 타입에 따라 다르게 설계

 

3) 추상화(Abstraction)

사물(객체)의 속성이나 특성을 추출하는 단계

 

4) 캡슐화(Encapsulation)

내부를 공개하지 않는 것(예 - 리모콘)

불필요하게 복잡한 것을 피하고 위험으로부터 보호