SW과정 JAVA 4일차 - 0729

JAVA 오프라인 강의 4일차


1. 마방진 만들기

대각선 방향으로 수열 채우기 5x5, 7x7, 9x9 ...
배열의 가로, 세로, 가로 대각선의 합의 값이 모두 같은 2차원 배열
홀수 정방 배열에만 가능 (정사각형 배열)

2. 5x5 일반 마방진 규칙성

1) 중간 열에서 시작
2) 오른쪽 대각선 상향 방향으로 진행
3) 행이 0배열을 벗어나면 마지막 행으로
4) 열이 5열을 벗어나면 첫번째 열로
5) 5의 배수일 경우 +1 행만 이동
6) SQ(R,C(행,열))

/1열2열3열4열5열
1행17241815
2행23571416
3행46182022
4행101219213
5행11182529
package com.busan.fullstack;

public class Mabang {
	public Mabang(int num) {
		start(num);
	}
	
	int[][] mabang;
	
	public void start(int num) {
		mabang = new int[num][num];
		int x = 0;
		int y = num/2;
		
		mabang[x][y]=1;
		
		for(int pos=2;pos<=num*num;pos++) {
//			1. 왼쪽 대각선위로 먼저 이동시킴
			x= x-1;
			y= y-1;
			
//			1. 위치(x,y) 이동 후 위로 벗어나는 경우; x<0
//			2. 위치(x,y) 이동 후 왼쪽으로 벗어나는 경우; y<0
//			3. 위치(x,y) 이동 후 북서쪽으로 벗어나는 경우; x<0 and y<0
//			4. 위치(x,y) 이동 후 배열을 벗어나지는 않지만 이동한 위치가 이미 다른값이 있을 경우 : mabang[x][y] !=0
			
			if(x<0) {
				if(y<0) {
					x=x+2;
					y=y+1;
				}else{
				x=x+num;
				}
			}else{
				if(y<0) {
					y=y+num;
				}else {
					if(mabang[x][y]!=0){
						x=x+2;
						y=y+1;
				}
				
			}
		}
			
			mabang[x][y] = pos;
		}
		for(int[] first : mabang) {
			for(int value : first) {
				System.out.print("["+value+"]"+" ");
			}
			System.out.println();
		}
	}
}

3. Object 클래스 메서드

equals 좌측과 우측의 주소를 비교

4. toString() method

자기가 가지고 있는 스트링을 스스로 이전함

5. Wrapper 클래스

뭔가를 감싸는 클래스로 정의됨
byte, short, int, long, char, float, double, boolean(primitive type)

Wrapper class로 변환 Byte, Short, Integer, Long, Character, Float, Double, Boolean

6. hashCode() 메서드

hash : 정보를 저장, 검색하기 위해 사용하는 자료 구조
자료의 특정 값(키 값)에 대해 저장 위치를 반환해주는 해쉬 함수
hashCode() 메서드는 인스턴스의 저장 주소를 반환

7. String 클래스로 문자열 연결

문자열 연결을 계속해서 garbage가 생길 수 있음

8. StringBuilder, StringBuffer(ver 1.5 이후) 사용하기

내부적으로 가변적인 char[]배열을 가지고 있는 클래스
문자열을 여러 번 연결하거나 변경할 때 사용하면 유용함
StringBuffer는 멀티 쓰레드 프로그래밍에서 동기화(sybchronization)를 보장

문자열을 클라이언트가 보내면 스트링버퍼가 문자열을 받아서 작업을 함, 클라이언트가 아무리 많은 문자열을 보내도 순서대로 문자열이 입력됨
기차표 예약을 할 때, 한명이 자리를 차지하면 다른 사람은 진입이 안됨(동기화)
스트링빌더 동기화 x, 스트링버퍼 동기화 o

9. 클래스

1) public : 접근 제한이 없음
2) 디폴트 접근 제한자(아무것도 안붙어 있는 것) ex) class AccessTest{ } : 같은 패키지내에 있는 클래스만 접근 가능
3) private는 붙을 수 없음
4) final : 상속 받을 수 없음

10. 메소드

1) public : 접근 제한이 없음
2) 디폴트 접근 제한자(아무것도 안붙어 있는 것) : 같은 패키지내에 있는 클래스만 접근 가능
3) private : 다른 클래스에서 접근 못함 → 싱글톤 만들 때 사용하게 됨
4) final : 오버라이딩 할 수 없음

11. 변수

1) public : 접근 제한이 없음
2) 디폴트 접근 제한자(아무것도 안붙어 있는 것) : 같은 패키지내에 있는 클래스만 접근 가능
3) private : 다른 클래스에서 접근 못함
4) final : 상수가 됨

좋은 웹페이지 즐겨찾기