728x90
728x90

* 이 글은 제가 공부하기 위해 최대한 사실에 입각해 내용을 적으려고 하지만 일부 내용들이 정확하지 않을 수 있습니다.

   혹시나 잘못된 부분이 있으면 너그럽게 이해해주시고 피드백 부탁드려요!


2023.01.12 - [공부/풀스택 과정] - [풀스택과정] JAVA 6장 배열

 

[풀스택과정] JAVA 6장 배열

* 이 글은 제가 공부하기 위해 최대한 사실에 입각해 내용을 적으려고 하지만 일부 내용들이 정확하지 않을 수 있습니다. 혹시나 잘못된 부분이 있으면 너그럽게 이해해주시고 피드백 부탁드려

cloudjini.tistory.com


6.4 배열 복사

package chapter06;

import java.util.Arrays;

public class ArrEx13 {
	public static void main(String[] args) {
		
		// 원본 배열
		int[] arrInt = {1,2,3}; // 인덱스가 2번까지
		
		// 복사할 배열
		int[] arrInt2 = new int[5]; // 인덱스가 4번까지
		
		// 복사할 배열에 값 대입
		for (int i =0; i <arrInt.length;i++) { //i<arrInt2.length이면 OB남
			arrInt2[i] = arrInt[i];
		}
//		System.arraycopy(arrInt, 0, arrInt2, 2, arrInt.length);
		// 배열 값 출력
		arrInt = arrInt2; // 배열의 확장 arrInt를 주소가 늘림
//		for (int i=0;i<arrInt2.length;i++) {
//			System.out.println(arrInt2[i]);
//		}
		
		System.out.println(Arrays.toString(arrInt2)); // 위의 값이랑 같음 
	}
}
package chapter06;

public class ArrEx14 {
	public static void main(String[] args) {
		
		// 원본배열
		int[] arrInt = {1,2,3};
		
		// 복사할 배열
		int[] arrInt2 = new int[5];
		
//		System.arraycopy(arrInt, 0, arrInt2, 2, arrInt.length);
//		System.arraycopy(arrInt, 0, arrInt2, 2, arrInt.length - 1);
		System.arraycopy(arrInt, 1, arrInt2, 2, 2); 
		
		// 배열값 출력
		for(int i=0;i<arrInt2.length;i++) {
			System.out.println(arrInt2[i]);
		}
	}
}
package chapter06;

import java.util.Arrays;

public class ArrEx15 {
	public static void main(String[] args) {
		
		// 원본 배열
		int[] arrInt = {1,2,3};
		
		// 복사할 배열
		int[] arrInt2 = null;
		
		arrInt2 = Arrays.copyOf(arrInt, 5);
//		int[] arrInt2 = Arrays.copyOf(arrInt, 5);
		
		// 배열값 출력
//		for ( int i=0; i<arrInt2.length; i++) {
//			System.out.println(arrInt2[i]);
//		}
		System.out.println(Arrays.toString(arrInt2));
		
	}
}

6.5 향상된 for문

package chapter06;

import java.util.Arrays;

public class ArrEx16 {
	public static void main(String[] args) {
		
		// 배열
		int[] arrInt = {11,22,33,44,55};
		
		// 기존 for문을 이용한 출력
		for(int i=0; i<arrInt.length;i++) {
//			System.out.print(arrInt[i]);
			arrInt[i] = i * 10;
		}
		System.out.println(Arrays.toString(arrInt));
		System.out.println();
		// 향상된 for문을 이용한 출력
		for (int number : arrInt) {  // 왼쪽 요소값 자체 : 오른쪽 반복할 대상
//			System.out.print(number);
			number = 100;
		}
		System.out.println(Arrays.toString(arrInt));
		
//		for(int[]a : matrix) {
//			for(int i : a) {
//				System.out.println(i);
//			}
//			System.out.println();
//		}
		
	}
}

 

package chapter06;

public class Arrex17 {
	public static void main(String[] args) {
		
		// 배열 선언
		String[] names = {"홍길동", "이순신", "김유신"};
		int[] scores = {90, 80,100};
		
		int i = 0; // 인덱스 변수
		for(String name : names) {
			System.out.println(name + " : " + scores[i]);
			i++;
		}
	}
}

6.6 참조자료형

-- 차후 과정을 배운뒤 작성 예정

package chapter06;

public class arr {
	public static void main(String[] args) {
		int[] arr = {1,2,3,4,};
		System.out.println(arr);
		arr = new int[] {1,2,3,4};
		System.out.println(arr);
		
		// 위와 아래가 다른 거임
		
		
	}
}
package chapter06;

import java.util.Arrays;

public class Ref {
	public static void main(String[] args) {
		
		int a = 10;
		int b = a;
		
		b =20; // 주소가 복사 되는 것이 아니라 값이 복사되는 것
		// 그래서 그대로 a는 10, b는 20
		
		
		int[] arr1 = {1,2,3,4};  //502호
		int[] arr2 = arr1;       //502호
		int[] arr3 = {1,2,3,4};  //602호
		// arr1 == arr2 완전히 같은 값
		// arr3 은 완전히 다름
		
		arr2[3] = 10;
		// 주소가 저장되는 것
		
		System.out.println(Arrays.toString(arr1));
		System.out.println(Arrays.toString(arr2));
		System.out.println(Arrays.toString(arr3));
		
		System.out.println(arr1 == arr2);
		System.out.println(arr1 == arr3);
	}
}

7장 클래스

7.1 객체지향 프로그래밍

객체지향 프로그래밍(Object Oriented Progarmming)을 줄여서 OOP라고 부른다.

한마디로 주위 모든 사물을 듯하는 객체라는 개념을 프로그래밍에 도입해서 실제 세상에서 사물의 속성과 기능, 사물 간의 관계를 컴퓨터 프로그램에서도 사용할 수 있게 프로그래밍 하는 방법이다.

 

객체지향 프로그래밍 언어의 특징

상속(Inheritance), 다형성(Polymophism), 추상화(Abstraction), 캡슐화(Encapsulation)

 

7.2 클래스와 객체

클래스와 객체를 한마디로 정리하면 클래스는 설계도, 객체는 이 설계도로 만들어진 피조물이다.

클래스 자체만으로 구체화 될 수 없고, 객체를 생성하기 위해 미리 설계도를 만들어 놓고 이 설계도를 가지고 실제 객체를 만들게 되는 것이다.

 

예) 붕어빵을 만드는 틀 : 클래스 / 붕어빵 : 객체

 

객체 선언과 초기화 별도로

클래스명 변수명;
변수명 = new 클래스명;
객체 선언과 초기화 동시에

클래스명 변수명 = new 클래스명();

변수명 앞에 클래스 명이 오는데, 이 클래스명이 데이터 타입, 즉 자료형이 되는 것이다.

클래스를 이용해 객체를 생성하는 것을 인스턴스화 한다고 표현한다.

package chapter07;

public class Member {
	String id;
	int age;
}
package chapter07;

public class MemberMain {
	public static void main(String[] args) {
		// new : 인스턴스 생성
		// new : 생성자를 호출해 힙 영역에 필드를 초기화 후 주소를 확보해 반환하는 연산자
		
		// 메서드 ; 선언하는 파트 , 호출하는 파트
		// 필드는 클래스가 가지고 있는 변수
		// 
		
		String str = "abcd";  // string만 특별대우
		String str2 = new String(); // 원래는 이렇게 생성해야함
		
		
		Member m = new Member();  // 타입이 클래스인 Member 
		Member m2 = m;  // new => 인스턴스 생성
		// 개체 entity 객체 object
		
		
		if (m == m2) {
			System.out.println("m객체와 m2객체는 같다.");
		}
		else {
			System.out.println("m객체와 m2객체는 다르다.");
		}
		m.id = "hong";  // .의 의미는 "의"
		m2.age = 30;
		
		System.out.println(m.id + " , " + m.age);
		System.out.println(m2.id + " , " + m2.age);
	}
}

 

package chapter07;

public class Student {
	int no;
	String name;
	int kor;
	int eng;
	@Override
	public String toString() {
		return "Student [no=" + no + ", name=" + name + ", kor=" + kor + ", eng=" + eng + "]";
	}
}
package chapter07;

public class StudentEx {
	public static void main(String[] args) {
		Student s1 = new Student();
		Student s2 = new Student();
		Student s3 = new Student();
		
		s1.no = 1;
		s1.name = "홍길동";
		s1.kor = 80;
		s1.eng = 88;
		
		s2.no = 2;
		s2.name = "김철수";
		s2.kor = 90;
		s2.eng = 75;
		
		s3.no = 3;
		s3.name = "이징징";
		s3.kor = 80;
		s3.eng = 90;
				
		System.out.println(s1.no+" "+ s1.name+ " "+ s1.kor + " "+ +s1.eng);
		System.out.println(s2.no+" "+ s2.name+ " "+ s2.kor + " "+ +s2.eng);
		System.out.println(s3.no+" "+ s3.name+ " "+ s3.kor + " "+ +s3.eng);

		System.out.println(s1);
		System.out.println(s2);
		System.out.println(s3);
		
		Student[] students = {s1, s2, s3};
		
		for(Student s : students) {
			System.out.println(s);
		}
		System.out.println(students[0].name); // 해당 스튜던트 타입에 홍길동만 뽑아보기
	
	}
}

7.3 클래스의 구조

클래스는 크게 속성과 기능으로 나눌 수 있다. 속성은 클래스가 가지고 있는 특징, 변수로 표현하고, 기능은 메서드라고 표현한다. 클래스의 구조를 조금더 세분화하면 필드(Field), 생성자(Constructor), 메서드(Method)로 이루어진 구조이다.

 

필드

필드(Field)는 객체의 특징이나, 특성 값을 저장하는 곳이다. 클래스 안에 있는 변수라고 생각하면 쉽게 이해할 수 있다.

하지만 생성자나 메서드 안에 있는 변수와는 다르다. 생성자와 메서드 안의 변수는 그 안에서만 사용되지만 필드는 클래스 내부의 전체에서 사용된다.

 

생성자

생성자(Constructor)는 말 그대로 객체를 생성할 때 사용되는 부분으로 메서드와 비슷하게 생겼지만, 클래스명과 이름이 같고, 리턴값이 없다.( 있는 경우도 있음.)

 

메서드

메서드(Method)는 객체의 기능에 해당하는 영역으로 특정 기능 단위로 묶어 하나의 메서드로 정의되어 있다. 프로그램이 실행되는 곳에서 이 메서드로 값을 전달하고 메서드는 전달받은 값을 처리하거나 기능을 실행한 후 처리결과를 실행한 곳으로 돌려주기도 한다.

 

자료구조적인 개념의 클래스

변수 하나의 공간에 하나의 값만 저장할 수 있는 자료구조
배열 하나의 변수에 같은 자료형의 여러 값을 저장할 수 있는 자료구조
구조체 다양한 데이터타입의 값을 여러개 저장할 수 있는 자료구조
클래스 데이터와 기능을 함께 저장할 수 있는 자료구조
package chapter07;

public class TV {
	boolean power;
	int channel;
	int volumn;
	
	void power() {
		power = !power;
	}
	void channelUp() {
		channel++;
	}
	void channelDown() {
		channel--;
	}
	void print() {
		System.out.println("현재 TV의 전원은 "+ (power ? "켜" : "꺼")+ "져있습니다.");
		System.out.println("TV의 채널은 " + channel + "입니다.");
	}
//	@Override
//	public String toString() {
//		return "TV [power=" + power + ", channel=" + channel + ", volumn=" + volumn + "]";
//	}
	
}
package chapter07;

public class TVMain {
	public static void main(String[] args) {
		TV tv = new TV();
		tv.print();
		
		tv.power();
		
		tv.print();
		tv.channelUp();
		tv.channelUp();
		tv.print();
		
		TV tv2 = new TV();
		tv2.print();
		tv.channelUp();
		tv2.print();
		
		System.out.println(tv.channel);
		
	}
}

 

더보기

현재 TV의 전원은 꺼져있습니다.
TV의 채널은 0입니다.
현재 TV의 전원은 켜져있습니다.
TV의 채널은 0입니다.
현재 TV의 전원은 켜져있습니다.
TV의 채널은 2입니다.
현재 TV의 전원은 꺼져있습니다.
TV의 채널은 0입니다.
현재 TV의 전원은 꺼져있습니다.
TV의 채널은 0입니다.
3

package chapter07;

import java.util.Arrays;

public class TVMain2 {
	public static void main(String[] args) {
		TV[] tvs = new TV[3];
		tvs[0] = new TV();
		tvs[1] = new TV();
		tvs[2] = new TV();
		
//		tvs[1].channel = 10;
//		tvs[1].power = true;
//		tvs[1].volumn = 5;
//		System.out.println(tvs[1]);
		System.out.println(tvs[1].toString());
		for(int i=0;i < tvs.length ; i++) {
			tvs[i] = new TV();
			tvs[i].channel = 10;  // 여기까지만 타이핑하면 아주 많이 보게될 에러가 뜸(NullPointerException)
		}
		
		System.out.println(Arrays.toString(tvs)); // 주소를 표현한 상태
		// 또는 TV 클래스에서 제너레이트 투 스트링 하고 자료를 볼 수 있음
	}
}

 

 

728x90
300x250