목차
2차원 배열
public static void main(String[] args) {
int[][] arr = new int[3][4];
int num = 1;
// 배열에 값을 저장
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 4; j++) {
arr[i][j] = num;
num++;
}
}
// 배열에 저장된 값을 출력
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 4; j++) {
System.out.print(arr[i][j] + "\t");
}
System.out.println();
}
}
Java
복사
2차원 배열의 실제구조
2차원 배열의 초기화
public static void main(String[] args) {
int[][] arr = {
{11},
{22, 33},
{44, 55, 66}
};
// 배열의 구조대로 내용 출력
for(int i = 0; i < arr.length; i++) {
for(int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + "\t");
}
System.out.println();
}
}
Java
복사
실습 문제
문자형 2차원 배열 5행 5열을 만들고, 행과 열을 입력 받아 해당 좌표의 값을 'X'로 변환해
2차원 배열을 출력하시오.
또한 계속해서 반복 실행하도록 구현하고 행이나 열 입력 시 0미만 5이상의 수가 입력되면
프로그램을 종료하시오
그림 참조
코드
생성자
정의
인스턴스가 생성될 때 호출되는 ‘인스턴스 초기화 메서드’
새 키워드를 사용할 때 자바 생성자 목적은 새로 생성된 객체를 쓰기 전에 초기화하는 것.
생성자는 해당 클래스의 인스턴스(객체)를 초기화한다.
일반적으로 생성자는 초기화가 필요한 객체의 필드를 초기화한다.
조건
생성자의 이름은 클래스 이름과 같은 이름과 같아야 한다.
생성자는 리턴 값이 없다.
생성자는 중복 정의될 수 있다.
생성자는 객체를 초기화하는 작업만 하는 함수다.
생성자를 정의하지 않으면 컴파일러가 알아서 기본 생성자를 만들어 사용한다.
→ 단, 컴파일러가 자동적으로 기본 생성자를 추가해주는 경우는 ‘클래스 내에 생성자가 하나도 없을 때’ 뿐이다.
→ 즉, 매개변수가 있는 생성자를 정의 했다면 따로 만들어 주지 않는 한 기본 생성자는 추가되지 않는다.
# 관련 예시
class Data1 {
int value;
}
class Data2 {
int value;
Data2(int x) {
value = x;
}
}
public class Main {
public static void main(String[] args) {
Data1 data1 = new Data1();
Data2 data2 = new Data2(); //컴파일 에러 발생
}
}
Java
복사
예제
class Pizza {
int size;
String type;
public Pizza() {
size = 12;
type = "슈퍼슈프림 ";
}
public Pizza(int s, String t) {
size = s;
type = t;
}
public class PizzaTest {
public static void main(String[] args) {
Pizza obj1 = new Pizza();
System.out.println("(" + obj1.type + " , " + obj1.size + ",)");
Pizza obj2 = new Pizza(24, "포테이토");
System.out.println("(" + obj2.type + " , " + obj2.size + ",)");
}
}
}
Java
복사
public class SongTest {
public static void main(String[] args) {
Song song = new Song("Dancing queen","ABBA",1978,"스웨덴");
song.show();
}
static class Song {
private String title;
private String artist;
private int year;
private String country;
public Song() {
}
public Song(String title, String artist, int year, String country) {
this.title = title;
this.artist = artist;
this.year = year;
this.country = country;
}
public void show() {
System.out.println(year+"년" +country+"국적의 "+ artist+"가 부른"+title);
}
}
}
Java
복사
참조변수 this
this는 현재 객체 자신을 가리키는 참조 변수로 인스턴스의 주소가 저장되어 있음
this는 컴파일러에서 자동으로 생성
생성자에서 매개변수와 인스턴수변수 이름이 동일한 경우에 명확히 구별하기 위해 사용
this() 함수
this함수는 자기 자신에서 갖고 있는 생성자 함수를 호출
한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출 가능
→ 생성자 내에서 초기화 작업도중에 다른 생성자를 호출하게 되면, 호출된 다른 생성자 내에서도 멤버변수들의 값을 초기화 할 것이므로 다른 생성자를 호출하기 이전의 초기화 작업이 무의미해짐
실습 (TV)
자바 클래스를 작성하는 연습을 해보자.
다음 main() 메소드를 실행하였을 때 예시와 같이 출력되도록 TV 클래스를 작성하라.
실습(Grade)
생성자를 이용한 평균 구하기 실습
실습(song)
노래 한 곡을 나타내는 Song 클래스를 작성하라.
클래스와 객체 문제
연습 문제 1)
자바 클래스를 작성하는 연습을 해보자.
다음 main() 메소드를 실행하였을 때 예시와 같이 출력되도록 TV 클래스를 작성하라.
public static void main(String[] args) {
TV myTV = new TV("LG", 2017, 32); //LG에서 만든 2017년 32인치
myTV.show();
}
LG에서 만든 2017년형 32인치 TV
Java
복사
코드 보기
연습 문제 2)
Grade 클래스를 작성해보자.
3 과목의 점수를 입력받아 Grade 객체를 생성하고 성적 평균을 출력하는 main()과 실행 예시는 다음과 같다.
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.print("수학, 과학, 영어 순으로 3개의 정수 입력 >> ");
int math = sc.nextInt();
int science = sc.nextInt();
int english = sc.nextInt();
Grade me = new Grade(math, science, english);
System.out.println("평균은 "+me.average()); //average()는 평균을 계산하여 리턴
sc.close();
}
Java
복사
코드 보기
패키지와 클래스패스
•
패키지는 비슷한 성격의 자바 클래스들을 모아 놓은 자바 디렉토리
•
패키지를 사용하면 비슷한 성격의 클래스들끼리 묶을 수 있어 클래스의 분류가 용이하다
•
패키지 이름 짓기 ( com.lion.team )
◦
패키지 이름은 모두 소문자로 작성
◦
인터넷 도메인 이름의 역순으로 이름 구성
◦
이름 끝에 클래스를 정의한 주체 또는 팀 이름 추가
접근제어자
접근 제한자에 대한 이해
•
클래스 정의 대상: public, default
•
인스턴스 변수와 메소드 대상: public, protected, default, private
private
접근제어자가 private으로 설정되었다면 private 이 붙은 변수, 메소드는 해당 클래스에서만 접근이 가능하다.
default
접근 제어자를 별도로 설정하지 않는다면 접근 제어자가 없는 변수, 메소드는 default 접근 제어자가 되어 해당 패키지 내에서만 접근이 가능하다.
protected
접근제어자가 protected로 설정되었다면 protected가 붙은 변수, 메소드는 동일 패키지의 클래스 또는 해당 클래스를 상속받은 다른 패키지의 클래스에서만 접근이 가능하다.
public
접근제어자가 public으로 설정되었다면 public 접근제어자가 붙은 변수, 메소드는 어떤 클래스에서라도 접근이 가능하다.
정보 은닉
실무에서는 모든 변수 무조건 private 사용
하나의 java 파일에서 public은 한개만 가능 (관습적으로)
생성자 public 문제
시계(clock)로 예를 든 정보은닉
모든 변수는 무조건 private(다이렉트로 값이 들어가면 매우 위험)
모든 변수에 대해서 getter, setter 함수를 만들어서 값을 읽고 쓴다.(lombok)
public class Clock {
private int hour;
private int min; // 정보 은닉 0~60분
public int getHour() {
return hour;
}
public int getMin() {
return min;
}
public void setHour(int hour) {
if(hour<0 || hour>23){
System.out.println("시간을 다시 입력해주세요!");
return;
}
this.hour = hour;
}
public void setMin(int min) {
if (min < 0 || min > 59) {
System.out.println("분을 다시입력해주세요!");
return;
}
this.min = min;
}
}
Java
복사
클래스에서 public클래스가 1개인 이유
메인메소드(main)조차 public이 붙어야 jvm이 실행시켜줌
한 개의 파일에는 클래스를 한개만두는 관습이 존재
한개의 파일에서는 진입점이 되는 클래스만 public을 붙여줘야한다
public이 붙은 클래스가 대표클래스이며 한개의 클래스에서 public 클래스는 하나만 존재