17일차 - 2023.1.17

문우림·2023년 1월 17일
0

Java

목록 보기
5/23

1. 생성자

생성자란?
객채를 만드는 특별한 메소드.

생성자의 역할
1.객체 생성 - 객체를 만드는 것

클래스이름 + 변수이름 = new + 클래스이름();

new 옆클래스 이름과 같은 함수 사용(생성자)

2.객체 초기화 - 객체의 필드 값을 설정하는 것

주위⚠

  • 생성자의 이름은 클래스이름과 동일시켜야 한다.

  • 생성자는 값을 반환하지 않는다.(return type표기하지 않음)

  • 생성자 또한 메소드 이므로 사용을 위해 먼저 정의해야 된다.

[before]

/* 1. 객체 생성 */
Cat c = new Cat();
/* 2. 필드 초기화 */
c.name = "네로";
c.weight = 3.78;
c.age = 3;
  • 객체를 만들고, 초기화는 따로 진행

[after]

/* 객체 생성과 동시에 초기화 */
Cat c = new Cat("네로", 3.78, 3); 
  • 객체 생성과 동시에 초기화.

1-1. 예제


class BankAccount {
	String accNumber; // 계좌번호
	String ssNumber; // 주민번호
	int balance = 0; // 예금 잔액

	public BankAccount(String acc, String ss, int bal) {
		accNumber = acc;
		ssNumber = ss;
		balance = bal;
		
		System.out.println("객체 생성");
	}

	public int deposit(int amount) {
		balance += amount;
		return balance;
	}

	public int withdraw(int amount) {
		balance -= amount;
		return balance;
	}

	public int checkMyBalance() {
		System.out.println("계좌번호 :" + balance);
		System.out.println("주민번호:" + ssNumber);
		System.out.println("잔 액 :" + balance + '\n');
		return balance;
	}

}

class BankAccountConstructor {
	public static void main(String[] args) {
		BankAccount yoon = new BankAccount("12-34-89", "990990-9090990", 10000);
		BankAccount park = new BankAccount("33-55-09", "770088-5959007", 10000);

		yoon.deposit(5000);
		park.deposit(3000);

		yoon.withdraw(2000);
		park.withdraw(2000);

		yoon.checkMyBalance();
		park.checkMyBalance();
	}
}

[결과]
객체 생성
객체 생성
계좌번호 :13000
주민번호:990990-9090990
잔 액 :13000

계좌번호 :11000
주민번호:770088-5959007
잔 액 :11000

1-1. 디폴트(default) 생성자

  • 디폴트 생성자는 객체가 생성될 떄 개발자가 초깃값을 명시하지 않으면, 컴파일가 자동으로 제공하는 생성자.
  • 개발자로 부터 인수를 전달 받지 않으므로, 매개변수를 가지지 않는다.


개발자가 생성자 함수를 하나라도 만들게되면 컴파일러는 디폴트 생성자를 안 만든다.
그래서 개발자가 디폴트 생성자(클래스(){}) 를 만들어 줘야지 에러가 안 난다.

2. 이름 정하는 규칙

2-1. 클래스 이름 규칙

CamelCase표기법

  • 첫 문자는 대문자
  • 둘 이상의 단어가 묶여서 하나의 이름을 지을 떄, 뛰어쓰기 대신 서로 시작하는 단어의 첫 문자를 대문자로 한다.
    ex)Circle + Point = CirclePoint

폴더 이름 = main함수를 가진 클래스의 이름

2-2. 메소드, 변수이름 규칙

변형 된 CamelCase표기법

  • 첫 문자는 소문자러 구성
  • 둘 이상의 단어가 묶여서 하나의 이름을 지을 때, 서로 시작하는 단어는 대문자로 한다.
    ex)Add + Your + Money = addYourMoney

2-2. 상수 이름 규칙

snake_case 표기법

  • 상수의 이름은 모든 문자를 대문자로 구성
  • 둘 이상의 단어가 묶여서 하나의 이름을 지을 때, 뛰어쓰기 대신 단어 사이를 언더바로 연결한다.
    ex)final int COLOR_RAINBOW = 7;

3. 패키지(Package)


⬆자동으로 패키지 생성

3-1. 패키지(Package)란?

패키지는 클래스의 묶음으로서 하나의 디렉토리(폴더) 이다.

  • 패키지는 다른 패키지를 포함할 수 있고, 디렉토리 계층 구조는 점(.)으로 구분된다.
    ex)package com.global.ex;

패키지를 사용하는 이유

  • 같은 이름의 클래스는 한 패키지에 넣을 수 없기 때문에 같은 이름의 클래스르 가진 파일을 사용해야 할 경우, 다른 폴더에 저장되기 떄문에 별도로 관리할 수 있다.

  • 서로 다른 패키지의 두 클래스는 인스턴스 생성 시 사용하는 이름이 다르다.

  • 서로 다른 패키지의 두 클래스 파일은 저장되는 위치가 다르다.

패키지 이름 짓는 큐칙

  • 모두 소문자로 구성

  • 인터넷 도메인 이름의 역순으로 이름을 구성

  • 이름 끝에 클래스를 정의한 주체 또는 팀의 이름 추가

    ex)package com.wxfx.snart; / package com.fxmx.simple;

장점
협업 시, 서로 작업한 클래스 사이에서 발생할 수있는 이름 충돌 문제를 피할 수 있다.

3-2. 패키지(package) 선언

문법 : package 패키지이름

  • 패키지 이름에는 패키지 경로까지 포함한 풀 네임을 명시
  • 패키지문은 반드시 한번만 사용 가능
  • 클래스 선언보다 먼저 선언
  • 서로 다른 패키지로 만든 클래스들끼리는 서로 접근할 수 없다.

예제

package com.wxfx.smart 만들면서 패키지 안에 Baby클래스 생성

package com.wxfx.smart;
public class Circle {
	public Circle() {
		System.out.println("B회사 입니다." + "com.wxfx.smart");
	}
}

package com.fxmx.simple 만들면서 패키지 안에 Baby 클래스 생성

package com.fxmx.simple;
public class Circle {
	public Circle() {
		System.out.println("A회사 입니다." + "com.fxmx.simple");
	}
}

위 2개의 package 클래스 참조해서 객체 생성

public class CircleObjectTest {
	public static void main(String[] args) {
		com.fxmx.simple.Circle c1 = new com.fxmx.simple.Circle();
		com.wxfx.smart.Circle c2 = new com.wxfx.smart.Circle();
	}
}

[결과]
A회사 입니다.com.fxmx.simple
B회사 입니다.com.wxfx.smart

노래를 나타내는 Song이라는 클래스를 설계하시오.

  • 노래의 제목을 나타내는 title
  • 가수를 나타내는 artist
  • 노래가 속한 앨범 제목을 나타내는 album
  • 노래의 작곡가를 나타내는 composer, 작곡가는 여러 명 있을 수 있다.
  • 노래가 발표된 연도를 나타내는 year
  • 노래가 속한 앨범에서의 트랙 번호를 나타내는 track
  • 기본 생성자와 모든 필드를 초기화하는 생성자를 작성
  • ABBA의 “Dancing Queen"노래를 Song 객체로 생성하고 show()를 이용하여 이 노래의 정보를 출력하는 프로그램을 작성하라.
public class Song {
	String title;
	String artist;
	String album;
	String composer;
	int year;
	int track;
	String local;

    // 똑같은 파일에서는 참조하는 경우 public 없어도 됨.
	Song(String title, String artist, int year, String local) {
		this.title = title;
		this.artist = artist;
		this.year = year;
		this.local = local;
	}
    // 모든 필드를 초기화 시키는 생성자
	Song(String title, String artist, String album, String composer, int year, int track, String local) {
		this.title = title;
		this.artist = artist;
		this.album = album;
		this.composer = composer;
		this.year = year;
		this.track = track;
		this.local = local;
	}
    // 디폴트 생성자(기본 생성자)
	Song() {

	}

	void show() {
		System.out.println(year + "년" + local + "국적의" + artist + "가 부른" + title);
	}

	public static void main(String[] args) {
		Song song = new Song("Dancing Queen", "ABBA", 1978, "스웨덴");
		song.show();
	}

}

[결과]
1978년스웨덴국적의ABBA가 부른Dancing Queen

0개의 댓글