TIL 8일차. 객체지향

김기현·2025년 2월 19일

1)2차원 배열

1차원 배열 : 변수를 하나의 묶음으로 다루는 것
2차원 배열 : 1차원 배열을 묶음으로 다루는 것
3차원 배열 : 2차원 배열을 묶음으로 다루는 것

2차원 배열은 할당된 공간마다 인덱스 번호 두개 부여(앞 번호는 행, 뒷 번호는 열)
ex) arr[m][n]

2차원 배열 선언과 할당

배열 선언 : 자료형[][] 배열명; // 자료형 배열명[][]; // 자료형[] 배열명[];

배열 할당 : =new 자료형[행크기][열크기]
ex) int [][] arr = new int[2][4];

int[][]를 참조하는 변수 arr 선언
-Heap 영역에 새로운 2행 4열짜리 int 2차원 배열을 새로 할당
생성된 int2차원 배열의 주소를 arr에 대입

*2차원 배열에는 1차원 배열 대입이 불가능하다

2차원 배열 초기화

인덱스를 이용한 초기화 ex) arr[0][0] =1; // arr[1][1]=2;
선언과 동시에 초기화 ex) int[][] arr = {{1,2,3,4},{5,6,7,8}}; //
for문을 이용한 초기화 ex) int[][] arr = new int {{1,2,3,4},{5,6,7,8}};

다음은 2차원 배열의 초기화에 대한 예제이다

public void ex2() {
	//2차원 배열 선언과 동시에 초기화
	//3행3열 정수형 2차원 배열 선언과 동시에
	//1~9까지 초기화
	int[][] arr= {{1,2,3},{4,5,6},{7,8,9}};
	
	//행별로 합 출력
	//0행의 합 :6
	//1행의 합 :15
	//2행의 합 :24
	
	for(int row=0;row<arr.length;row++) {
		
		int sum=0;
		for(int col=0; col<arr[row].length; col++) {
		
			sum+=arr[row][col];
			
		}
		System.out.println(row+"행의 합 : "+sum);
	}
	
	System.out.println("=============================");
	
	//열 별로 합 출력
	for(int i=0; i<arr[0].length;i++) {
		
		int sum=0;
		
		for(int x=0; x<arr.length;x++) {
			
			sum+=arr[x][i];
			
		}System.out.println(i+"열의 합 : "+sum);
	}
	
	
	
}

가변 배열 : 다차원 배열 생성 시 마지막 배열차수의 크기를 지정하지 않고 나중에 서로 크기가 다른 배열로 지정한 배열
ex) int[][] arr = new int[2][]; // arr[0] = new int[3] // arr[1] = new int[4]

2)객체 지향(Object Oriented Programming)

객체란 무엇인가?
-사전적 의미 : 독립적으로 속성과 기능을 다른것들과 구분해서 인식할 수 있는 모든 것
-자바에서 의미 : 클래스에 정의된 내용대로 new 연산자를 통해 메모리 영역에 생성된 것

객체지향언어 : 독립적으로 구분되는 모든 것은 서로 상호작용하여 사건에 작용한다는 것을 바탕으로 하는 언어

-객체 지향 언어의 특징
캡슐화 : 외부로부터 보호하기 위함
상속 + 추상화 : 공통된 코드를 한 곳에 모으고(추상화) 재사용(상속)한다
다형성 : 다양한 형태로 변화함 // 상속 관계의 객체간의 변화가 가능

추상화 : 작성하려는 클래스의 속성과 기능에서 프로그램에 필요한 공통적인 부분을 추출하고 불필요한 부분을 제거하는 것

MVC 패턴 : Model View Controller // 애플리케이션의 역할을 세가지로 분리하는 설계 패턴
-Model : 프로그램 로직과 관련된 데이터를 저장하고 비즈니스 로직을 처리하는 부분 (DB, 서비스, 객체)
vo(Value Object) : 값 저장용 객체를 만들기 위한 클래스를 모아두는 패키지
Service : 특정 기능(비즈니스 로직)을 제공하는 패키지
-View : 사용자에게 보여지는 화면 (UI-HTML, JSP, React)
-Controller : 사용자의 요청을 받고 모델과 뷰를 연결하는 역할(응답)

객체 지향 언어 - 클래스

클래스 : 객체의 특성(속성과 기능)에 대한 정의를 한 것으로 객체를 만들기 위한 설계도와 같다. 반드시 추상화와 캡슐화가 적용되어야 한다.

필드 : 클래스에서 사용할 변수들을 나열하는 공간 ex) Scanner 불러오기

클래스를 이용하여 객체를 생성하는 예시로서 People p1 = new People(); 을 들자면
새로운 People 객체를 Heap 영역에 생성하고 People 객체의 주소를 저장하여 참조하는 변수 p1을 stack에 생성한다는 뜻이다. 이를 클래스의 인스턴스(객체)화라고 한다. 이때 클래스(People)의 이름이 자료형처럼 사용된다 하여 클래스를 “사용자 정의 자료형”이라고도 부른다.

캡슐화란?
추상화를 통해 정리된 데이터들과 기능을 하나로 묶어 관리하는 것으로 클래스의 가장 중요한 목적인 데이터의 직접 접근제한을 원칙으로 한다. 따라서 기능을 통한 간접접근만이 허용된다. 이는 getter와 setter를 통해 이루어진다.

캡슐화의 원칙
클래스의 멤버 변수에 대한 접근 권한은 private(접근제한자)를 원칙으로 한다
클래스의 멤버 변수에 대한 연산처리를 목적으로 하는 멤버 메소드는 클래스 내부에 작성한다
멤버 메소드는 클래스 외부에서도 접근 가능하도록 public으로 설정한다

캡슐화는 다음과 같은 논리로 진행된다

기능용 메서드가 포함된 클래스A와 호출용 메서드B가 존재한다
A라는 클래스에 포함된 메서드 private String name(){}에 접근하기 위해서는 getter를 위한 간접접근용 메서드 public String getName(){}와 setter를 위한 간접접근용 메서드
public void setName(){}를 생성한다.
setName에는 클래스B에서 전달받을 전달인자를 매계변수를 통해 A클래스의 name 변수에 대입하기 위해 this.name=name을 작성한다.
getName에는 setName을 통해 대입된 name값을 반환하기 위해 return name;을 작성한다
코드로 작성시 다음과 같다

클래스 A
public String getName() {
	return name;
	//return : 현제 메서드를 종료하고 호출한 쪽으로 되돌아감
	//return 갑/변수 : 현제 메서드 종료하고 값/변수 가지고 호출한 쪽으로 되돌아감
	
}

//getter() : 반환형이 무조건 있음
//getter는 필드에 작성도니 변수값을 되돌려주는것
//변수는 자료형이 있을 것
//그 변수를 되돌려준다면 당연히 반환형도 존재할 것

//name 변수에 값을 세팅하는 간접접근 기능 중 setter
//                   매개변수
public void setName(String name) {
	//this : 현제 객체
	this.name=name;
	//setter에 전달된 전달인자 "홍길동"이 매배변수 String name으로 대입되고
	//매개변수 name을 현재겍체의 name(private)이라는 변수에 대입한다는 뜻이다
	
	
}

클래스 B

p1.setName("홍길동");
	System.out.println(p1.getName());
	
	
	//p1.getName();//name을 얻어올 수 있으므로 getter
	
	//전달하는 값 : 전달인자
	
	p1.setGender('남');
	System.out.println(p1.getGender());
	
	
	p1.setpNo("123456-1234567");
	System.out.println(p1.getpNo());
	
	
	p1.setAddress("서울시 중구 남대문로 120");
	System.out.println(p1.getAddress());
	
	
	p1.setPhone("010-1234-5678");
	System.out.println(p1.getPhone());
	
	
	p1.setAge(20);
	System.out.println(p1.getAge());

클래스 A에서 작성되는 getter와 setter를 위한 단축키는 다음과 같다
-alt+shift+s → Generate getter and setter

profile
모든게 처음

0개의 댓글