목차
2차원 배열
예제 2) 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차원 배열의 실제구조
예제 4) 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
복사
생성자
생성자도 메소드이다
객체가 생성될 때에 필드에 초기값을 제공하고 초기화 절차를 실행하는 메소드이다.
생성자는 return 타입이 없고 클래스와 이름이 똑같다.
기본 생성자
•
기본 생성자는 매개변수가 없는 생성자이다.
•
만약 개발자가 생성자를 하나도 정의하지 않으면 자바 컴파일러는 기본생성자를 자동으로 만든다. 하지만 생성자를 재정의 한다면 디폴트 생성자는 사라진다.
•
중요! 생성자를 재정의 했다면 디폴트 생성자를 직접 만들어 줘야한다
this의 2가지 종류
1.
객체 자기 자기 자신을 가르키는 this
2.
this 생성자
this에 대한 이해
•
this는 현재 객체 자신을 가리키는 참조 변수리다.
•
this는 컴파일러에서 자동으로 생성한다.
•
생성자에서 매개변수 이름과 필드 이름이 동일한 경우에 혼동을 막기위해서 사용한다.
1. 객체의 필드를 가르키는 this
2. this() 함수
this함수는 자기 자신에서 갖고 있는 생성자 함수를 호출한다
용도는 자기자신이 가지고있는 또다른 생성자 함수를 호출한다.
this() 함수는 로직에서 제일위에 존재해야한다
실습 (TV)
자바 클래스를 작성하는 연습을 해보자. 다음 main() 메소드를 실행하였을 때 예시와 같이 출력되도록 TV 클래스를 작성하라.
public static void main(String[] args) {
TV myTV = new TV("LG", 2017, 32); //LG에서 만든 2017년 32인치
myTV.show();}
출력 : LG에서 만든 2017년형 32인치 TV
public class TelvisionTest {
public static void main(String[] args) {
TV tv = new TV("LG",2017,32);
tv.show();
}
static class TV{
private String brand;
private int year;
private int inch;
public TV() {;}
public TV(String brand, int year, int inch) {
this.brand = brand;
this.year = year;
this.inch = inch;
}
public void show() {
System.out.println(brand + "에서 만든" + year + "년형" + inch + "인치");
}
}
}
Java
복사
실습(Grade)
생성자를 이용한 평균 구하기 실습
public class GradeTest {
public static void main(String[] args) {
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();
}
static class Grade{
private int math;
private int science;
private int english;
public Grade() {;}
public Grade(int math, int science, int english) {
this.math = math;
this.science = science;
this.english = english;
}
public int getSum() {
return math + science + english;
}
public double average() {
return getSum() / 3.0;
}
}
}
Java
복사
실습(song)
노래 한 곡을 나타내는 Song 클래스를 작성하라. Song은 다음 필드로 구성된다.노래의 제목을 나타내는 title
가수를 나타내는 artist
노래가 발표된 연도를 나타내는 year
국적을 나타내는 country
또한 Song 클래스에 다음 생성자와 메소드를 작성하라.생성자 2개: 기본 생성자와 매개변수로 모든 필드를 초기화하는 생성자
노래 정보를 출력하는 show() 메소드
main() 메소드에서는 1978년, 스웨덴 국적의 ABBA가 부른 "Dancing Queen"을
song 객체로 생성하고 show()를 이용하여 노래의 정보를 다음과 같이 출력하라.
1978년 스웨덴국적의 ABBA가 부른 Dancing Queen
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
복사
패키지와 클래스패스
•
패키지는 비슷한 성격의 자바 클래스들을 모아 놓은 자바 디렉토리
•
패키지를 사용하면 비슷한 성격의 클래스들끼리 묶을 수 있어 클래스의 분류가 용이하다
접근제어자
private
접근제어자가 private으로 설정되었다면 private 이 붙은 변수, 메소드는 해당 클래스에서만 접근이 가능하다.
default
접근 제어자를 별도로 설정하지 않는다면 접근 제어자가 없는 변수, 메소드는 default 접근 제어자가 되어 해당 패키지 내에서만 접근이 가능하다.
※ 우리가 지금까지 진행했던 대부분의 예제는 특별한 경우가 아니라면 모두 default 접근 제어자를 사용했다.
protected
접근제어자가 protected로 설정되었다면 protected가 붙은 변수, 메소드는 동일 패키지의 클래스 또는 해당 클래스를 상속받은 다른 패키지의 클래스에서만 접근이 가능하다.
public
접근제어자가 public으로 설정되었다면 public 접근제어자가 붙은 변수, 메소드는 어떤 클래스에서라도 접근이 가능하다.
시계(clock)로 예를 든 정보은닉
1.
모든 변수는 무조건 private(다이렉트로 값이 들어가면 매우 위험)
2.
모든 변수에 대해서 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 클래스는 하나만 존재해야 한다.
목차
2차원 배열
예제 2) 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차원 배열의 실제구조
예제 4) 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
복사
생성자
생성자도 메소드이다
객체가 생성될 때에 필드에 초기값을 제공하고 초기화 절차를 실행하는 메소드이다.
생성자는 return 타입이 없고 클래스와 이름이 똑같다.
기본 생성자
•
기본 생성자는 매개변수가 없는 생성자이다.
•
만약 개발자가 생성자를 하나도 정의하지 않으면 자바 컴파일러는 기본생성자를 자동으로 만든다. 하지만 생성자를 재정의 한다면 디폴트 생성자는 사라진다.
•
중요! 생성자를 재정의 했다면 디폴트 생성자를 직접 만들어 줘야한다
this의 2가지 종류
1.
객체 자기 자기 자신을 가르키는 this
2.
this 생성자
this에 대한 이해
•
this는 현재 객체 자신을 가리키는 참조 변수리다.
•
this는 컴파일러에서 자동으로 생성한다.
•
생성자에서 매개변수 이름과 필드 이름이 동일한 경우에 혼동을 막기위해서 사용한다.
1. 객체의 필드를 가르키는 this
2. this() 함수
this함수는 자기 자신에서 갖고 있는 생성자 함수를 호출한다
용도는 자기자신이 가지고있는 또다른 생성자 함수를 호출한다.
this() 함수는 로직에서 제일위에 존재해야한다
실습 (TV)
자바 클래스를 작성하는 연습을 해보자. 다음 main() 메소드를 실행하였을 때 예시와 같이 출력되도록 TV 클래스를 작성하라.
public static void main(String[] args) {
TV myTV = new TV("LG", 2017, 32); //LG에서 만든 2017년 32인치
myTV.show();}
출력 : LG에서 만든 2017년형 32인치 TV
public class TelvisionTest {
public static void main(String[] args) {
TV tv = new TV("LG",2017,32);
tv.show();
}
static class TV{
private String brand;
private int year;
private int inch;
public TV() {;}
public TV(String brand, int year, int inch) {
this.brand = brand;
this.year = year;
this.inch = inch;
}
public void show() {
System.out.println(brand + "에서 만든" + year + "년형" + inch + "인치");
}
}
}
Java
복사
실습(Grade)
생성자를 이용한 평균 구하기 실습
public class GradeTest {
public static void main(String[] args) {
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();
}
static class Grade{
private int math;
private int science;
private int english;
public Grade() {;}
public Grade(int math, int science, int english) {
this.math = math;
this.science = science;
this.english = english;
}
public int getSum() {
return math + science + english;
}
public double average() {
return getSum() / 3.0;
}
}
}
Java
복사
실습(song)
노래 한 곡을 나타내는 Song 클래스를 작성하라. Song은 다음 필드로 구성된다.노래의 제목을 나타내는 title
가수를 나타내는 artist
노래가 발표된 연도를 나타내는 year
국적을 나타내는 country
또한 Song 클래스에 다음 생성자와 메소드를 작성하라.생성자 2개: 기본 생성자와 매개변수로 모든 필드를 초기화하는 생성자
노래 정보를 출력하는 show() 메소드
main() 메소드에서는 1978년, 스웨덴 국적의 ABBA가 부른 "Dancing Queen"을
song 객체로 생성하고 show()를 이용하여 노래의 정보를 다음과 같이 출력하라.
1978년 스웨덴국적의 ABBA가 부른 Dancing Queen
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
복사
패키지와 클래스패스
•
패키지는 비슷한 성격의 자바 클래스들을 모아 놓은 자바 디렉토리
•
패키지를 사용하면 비슷한 성격의 클래스들끼리 묶을 수 있어 클래스의 분류가 용이하다
접근제어자
private
접근제어자가 private으로 설정되었다면 private 이 붙은 변수, 메소드는 해당 클래스에서만 접근이 가능하다.
default
접근 제어자를 별도로 설정하지 않는다면 접근 제어자가 없는 변수, 메소드는 default 접근 제어자가 되어 해당 패키지 내에서만 접근이 가능하다.
※ 우리가 지금까지 진행했던 대부분의 예제는 특별한 경우가 아니라면 모두 default 접근 제어자를 사용했다.
protected
접근제어자가 protected로 설정되었다면 protected가 붙은 변수, 메소드는 동일 패키지의 클래스 또는 해당 클래스를 상속받은 다른 패키지의 클래스에서만 접근이 가능하다.
public
접근제어자가 public으로 설정되었다면 public 접근제어자가 붙은 변수, 메소드는 어떤 클래스에서라도 접근이 가능하다.
시계(clock)로 예를 든 정보은닉
1.
모든 변수는 무조건 private(다이렉트로 값이 들어가면 매우 위험)
2.
모든 변수에 대해서 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 클래스는 하나만 존재