본문 바로가기
JAVA개념 시작하기

JAVA 6일차 - 클래스와 인스턴스

by 가므로 2022. 10. 31.
1.객체란 무엇인가?

클래스란 무엇인가

객체(Object)란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신과 다른 것을 식별가능한 것을 말한다. 예를 들어 물리적으로 존재하는 학생, 회원 등과 추상적인 생산, 주문, 배송 등이 모두 객체가 될 수 있다

 

2. 아래의 클래스에 대하여, 메모리 그림을 그리시오.

* 예제

Rectangle rec = new Rectangle();
 ==========================
public class Rectangle {
int height;
int width;
 
public int getHeight() {
return height;
}
 
public void setHeight(int height) {
this.height = height;
}
 
public int getWidth() {
return width;
}
 
public void setWidth(int width) {
this.width = width;
}
 
public int getArea() {
return width * height;
}
 
}

* 그림으로 설명1

* 그림으로 설명2

 

* 메모리 규칙

  • 주소는 임의로 설정할 수 있지만 Stack의 주소값이 Heap값보다 커서는 안된다. (3000은 임의값임)
  • 항상 프로그램은 위에서부터 아래로 메모리가 쌓인다는 것을 알아야 한다.

 

3.클래스와 객체의 차이는 무엇인가?

클래스와 객체(인스턴스)의 구분(차이)

클래스란, 객체를 만들기 위한 설계도이다.

해당 설계도를 통해 만들어진 무언가! 이를 객체 또 다른 표현으로 인스턴스(instance)라 한다.

 

4. 1 부터 num 까지 합을 구하는 class 를 작성하도록 하시오.

* 객체 부분

// 파일이름 : Assignment1_Mathod.java
// 작성자 : 박지인
// 작성일 : 2022년 10월 31일
// 목 적 : 1부터 1000 까지 합을 구하는 class를 작성하도록 하시오.


public class Assignment1_Mathod{
	public static void main(String[] args) {

		Rectangle rectangle = new Rectangle();

		rectangle.sum = 0;
		rectangle.n = 1000;
		System.out.println(rectangle.getArea1());
	}
}


	

// 결과
// 1부터0까지의 합 : 0
// 1부터10까지의 합 : 55
// 1부터1000까지의 합 : 500500

* 클래스 부분

// 파일이름 : Rectangle.java
// 작성자 : 박지인
// 작성일 : 2022년 10월 31일
// 목 적 : 1부터 1000 까지 합을 구하는 class를 작성하도록 하시오.

public class Rectangle {
	int sum;
	int n;
	
	int getArea1() {
        for (int i = 0; i <= n; i++) {
        	sum += i;
        	if (i % 10 == 0) {
            	System.out.println("1부터"+i+"까지의 합 : "+sum);
            }
        }
		return sum;
	}
}

//결과
//1부터0까지의 합 : 0
//1부터10까지의 합 : 55
//1부터1000까지의 합 : 500500

 

 

 

5.아래의 클래스를 작성하시오.

* 클래스 부분

// 파일이름 : Assignment1_StarPrint.java
// 작성자 : 박지인
// 작성일 : 2022년 10월 31일
// 목 적 : 객체, 클래스를 이용해서 정방향 3계단 별, 역방향 3계단 별을 만드시오



public class Assignment1_StarPrint{
	public static void main(String[] args) {

		StarPrint strPrint = new StarPrint();
		strPrint.printTriangle(3);
		strPrint.printReverseTriangle(3); 
		
	}
}

//결과
//*
//**
//***
//***
//**
//*

* 객체 부분

// 파일이름 : StarPrint.java
// 작성자 : 박지인
// 작성일 : 2022년 10월 31일
// 목 적 : 객체, 클래스를 이용해서 정방향 3계단 별, 역방향 3계단 별을 만드시오

public class StarPrint {

	void printTriangle(int age) {
		for (int i = 1; i <= age; i++) {
			for (int j = 1; j <= i; j++) {
				System.out.print("*");
			}
			System.out.println();
		}

}
	
    void printReverseTriangle(int num) {
    	for(int i = 1; i <= num; i++) {
        	for(int j = 1; j <= 4-i; j++) {
            	System.out.print("*");
            }
            System.out.println();
        }

	}
}

// 결과
// *
// **
// ***
// ***
// **
// *
6.생성자란 무엇인가?

생성자의 선언 방법

생성자(영어: constructor, 혹은 약자로 ctor)는 객체 지향 프로그래밍에서 객체의 초기화를 담당하는 서브루틴을 가리킨다. 생성자는 객체가 처음 생성될 때 호출되어 멤버 변수를 초기화하고, 필요에 따라 자원을 할당하기도 한다.

 

7.디폴트 생성자란 무엇인가?

디폴트 생성자의 차이 (출처 : https://hunit.tistory.com/155)

생성자를 정의하지 않았을 때 자바 컴파일러에서 자동으로 만들어주는 생성자를 디폴트 생성자라고 한다.

디폴트 생성자는 매개변수가 없고 코드도 없다.

 

8.생성자의 용도에 대하여 설명하시오.

생성자 호출 방법

생성자의 사용용도는 객체의 초기화 과정을 처리하기 위함입니다. 결국 생성자는 객체가 생성될 때 한번만 수행되는 특수한 메소드입니다. 이러한 생성자는 new키워드가 수행되면서 생성자가 호출됩니다. 객체 생성시 자바에서 자동으로 생성자를 만들어 줍니다.

 

9.null 에 대하여 설명하시오.

Null을 쉽게 이해하는 법

null은 어떤 변수가 값을 가지지 않음을 나타내는 특별한 값으로 '널'이라 부릅니다. 상수이고 null 유형의 유일한 값이며, 대소문자를 구별하지 않습니다. null은 공백('')과 다른 값으로, '=='의 비교에서는 같은 것으로 간주됩니다.

 

10.자바의 명명 규칙에 대하여 설명하시오.

1. 클래스

Ex)public class HelloWorld {}
  • 클래스명에는 파스칼을 사용한다.
Ex) public interface Animal {}

 

  • 인터페이스에는 특별한 접두사나 접미사를 사용하지 않고 파스칼을 사용한다.
Ex) public class Tiger implements animal{}

 

  • 인터페이스를 구현한 클래스에는 특별한 접두사나 접미사를 사용하지 않고 파스칼을 사용한다.
Ex) public abstract class Animal {}

 

  • 추상 클래스에는 특별한 접두사 접미사를 사용하지 않고 파스칼을 사용한다.

[키워드]

1) 파스칼 : 자바에서는 클래스의 명명 규칙인 첫 글자를 대문자로 한다는 규칙에 캐멀 표기법이 합쳐진 형태이다

2) 캐멀 표기법 : '카멜'은 '낙타'를 뜻한다. '카멜백 표기법(camelback case)'이라고도 불렀지만 요즘은 거의 쓰이지 않는다. 낙타의 등에 혹이 불룩하게 나와 있는 것에서 따온 이름으로, 각 단어의 첫 글자를 대문자로 표기하되 첫 단어의 첫 글자는 소문자로 표기하는 방식이다.

 

2. 메소드와 변수

* 메소드

Ex) public void SendMessage(String message) {}
  • 메소드명에는 파스칼 표기법을 사용한다.
Ex) public void setDisplayName
Ex) public void getDisplayName
  • 속성에 접근하는 메소드명의 접두사는 'get','set'을 사용한다.
Ex) public void findData(String data){}
  • 데이터를 조회하는 메소드명의 접두사는 find를 사용한다.
Ex) public void inputData(HashMap data){}
  • 데이터를 입력하는 메소드명의 접두사는 input을 사용한다.
Ex) public void modifyData(HashMap data){}
  • 데이터를 변경하는 메소드명의 접두사는 modify를 사용한다.
Ex) public void deleteData(String data){}
  • 데이터를 삭제하는 메소드명의 접두사는 delete를 사용한다.
Ex) public void initData(String data){}
  • 데이터를 초기화 하는 메소드명의 접두사는 initialize을 사용한다.
Ex) public void isData(String Data){}
  • 반환값의 타입이 boolean인 메소드는 접두사로 is를 사용한다.
Ex) public void loadData(){}
  • 데이터를 불러오는 메소드명의 접두사는 load를 사용한다.
Ex) public void hasData(){}
  • 데이터가 있는지 확인하는 메소드명의 접두사는 has를 사용한다.
Ex) public void registerAccount(){}
  • 보다 지능적인 set이 요구될때 사용하는 메소드명의 접두사는 register를 사용한다.
Ex) public void createAccount(){}

 

  • 새로운 객체를 만든뒤 해당 객체를 리턴해주는 메소드명의 접두사는 create를 사용한다.
Ex) public void toString(){}

 

  • 해당 객체를 다른 형태의 객체로 변환해주는 메소드명의 접두사는 to를 사용한다.
Ex) public void getMembers(){}

 

  • 해당 객체가 복수인지 단일인지 구분하는 메서드명의 접미사는 s를 사용한다.
Ex) public void getUserByName(String name){}

 

  • B를 기준으로 A를 하겠다는 메소드명의 전치사는 By를 사용한다.
Ex) public void isData(String Data){}

 

  • 반환값의 타입이 boolean인 메소드는 접두사로 is를 사용한다.
Ex) public void loadData(){}

 

  • 데이터를 불러오는 메소드명의 접두사는 load를 사용한다.
Ex) public void hasData(){}

 

  • 데이터가 있는지 확인하는 메소드명의 접두사는 has를 사용한다.
Ex) public void registerAccount(){}

 

  • 보다 지능적인 set이 요구될때 사용하는 메소드명의 접두사는 register를 사용한다.
Ex) public void createAccount(){}

 

  • 새로운 객체를 만든뒤 해당 객체를 리턴해주는 메소드명의 접두사는 create를 사용한다.
Ex) public void toString(){}

 

  • 해당 객체를 다른 형태의 객체로 변환해주는 메소드명의 접두사는 to를 사용한다.
Ex) public void getMembers(){}

 

  • 해당 객체가 복수인지 단일인지 구분하는 메서드명의 접미사는 s를 사용한다.
Ex) public void getUserByName(String name){}

 

  • B를 기준으로 A를 하겠다는 메소드명의 전치사는 By를 사용한다.

 

3. 변수

Ex) for(int i = 0; i < 10; i++){}
  • 반복문에서 인덱스로 사용할 변수는 i,j,k 등으로 사용한다.
  • 변수와 메소드의 파라미터에는 카멜표기법을 사용한다.
  •  변수에 약어를 사용하지 않고 모든 의미를 충분히 담는다.
  •  한 글자로 된 이름을 사용하지 않는다.
  • 선언된 지점에서 초기화하며, 가능한 사용범위를 최소화 한다. 숫자 0 레퍼런스 null
  • 지역변수와 멤버변수(전역변수)는 변수명 앞에 밑줄(_)을 사용하여 구별한다.
  • boolean타입의 변수는 접두사로 is를 사용한다 (ex.isCheck)


4. 상수

EX) int MAX_AGE;
  • 상수는 모든 글자에 대문자를 사용하며 여러 단어를 연결시에는 _를 사용한다

 

 

5. camel case

kebab-case
android-studio​
  • 첫 문자는 소문자로 표기하고 그 이후에 연결되는 문자들의 첫자는 대문자로 표기. 

6. snake case

snake_case
android_studio​
  • 모든 문자의 첫 자는 소문자로 표기하고 문자들 사이는 _(언더바)로 연결
11. 노래 한 곡을 나타내는 Song클래스를 작성하라. (객체, 클래스 생성)

* 문제 예시

노래 한 곡을 나타내는 Song 클래스를 작성하라. 
Song은 다음 필드로 구성된다.

- 노래의 제목을 나타내는 title
- 가수를 나타내는 artist
- 노래가 발표된 연도를 나타내는 year
- 국적을 나타내는 country

또한 Song 클래스에 다음 생성자와 메소드를 작성하라.
- 생성자 2개: 기본 생성자와 매개변수로 모든 필드를 초기화하는 생성자
- 노래 정보를 출력하는 show() 메소드
- main() 메소드에서는 1978년, 스웨덴 국적의 ABBA가 부른 "Dancing Queen"을

song 객체로 생성하고 show()를 이용하여 노래의 정보를 다음과 같이 출력하라.
1978년 스웨덴국적의 ABBA가 부른 Dancing Queen

* 클래스 부분

// 파일이름 : Assignment1_Song2
// 작성자 : 박지인
// 작성일 : 2022년 10월 31일
// 목 적 : 문장 표출 (클래스+객체)

public class Assignment1_Song2 {
	public static void main(String[] args) {

		Song2 song2 = new Song2();
		song2.title = "Dancing Queen";
		song2.artist = "abba";
		song2.year = 1978;
		song2.country = "스웨덴 ";
		song2.space = "  ";

		System.out.println(song2.show());

	}
}

// 결과
// 1978년 스웨덴국적의 abba가 부른 Dancing Quee

* 객체 부분

// 파일이름 : Song2
// 작성자 : 박지인
// 작성일 : 2022년 10월 31일
// 목 적 : 문장 표출 (클래스+객체)

public class Song2 {

	String title;
	String artist;
	int year;
	String country;
	String space;
	

	String show() {

		System.out.println(year + "년 " + country + "국적의 " + artist + "가 부른 " + title);
		return this.space;
	}

}

//결과
//객체기 때문에 이쪽은 실행이 안됨.

 

12. 평균값 구하기 (객체+클래스 생성)

* 클래스 부분

// 파일이름 : Assignment1_Grade 
// 작성자 : 박지인
// 작성일 : 2022년 10월 31일
// 목 적 : 객체+클래스를 이용해 평균값 구하기

public class Assignment1_Grade {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Grade grade = new Grade(90, 70, 100);

		System.out.println(grade.average());

	}

}

// 결과
// 86

   * 객체 부분

// 파일이름 : Assignment1_Grade 
// 작성자 : 박지인
// 작성일 : 2022년 10월 31일
// 목 적 : 객채+클래스를 이용해 평균값 구하기

public class Grade {
	int m;
	int e;
	int k;
	int sum;

	public Grade(int m, int e, int k) {
		this.sum = m + e + k;
	}
	
	
	
	int average() {
		return (sum / 3);
	
	}

}

//결과
//86

 

13.문장 출력하기 (객체+클래스 생성)
// 파일이름 : Assignment1_TV.java
// 작성자 : 박지인
// 작성일 : 2022년 10월 31일
// 목 적 : 문장 출력하기

public class Assignment1_TV {

	String manu;
	int year;
	int width;

	Assignment1_TV(String manu, int year, int width) {
		this.manu = manu;
		this.year = year;
		this.width = width;
	}

	void show() {
		System.out.println("LG" + "에서 만든 " + year + "년 " + width + "인치 TV");
	}

	public static void main(String[] args) {
		Assignment1_TV myTV = new Assignment1_TV("LG", 2017, 32); // LG에서 만든 2017년 32인치
		myTV.show();
	}
}

// ============================
// 출력결과
// LG에서 만든 2017년형 32인치 TV

 

14. 아래의 BankAccount 객체에 대하여 그림을 그리시오.

* 예제

BankAccount ref1 = new BankAccount();
BankAccount ref2 = ref1;

* 그림 설명

 

15.n수를 입력해 구구단을 구하기 (객체+클래스)

* 클래스 부분

// 파일이름 : Assignment1_Gugudan.java
// 작성자 : 박지인
// 작성일 : 2022년 10월 31일
// 목 적 : 객채+클래스를 이용해 구구단 구하기

public class Assignment1_Gugudan{
	public static void main(String[]args) {
    	Gugudan gugudan = new Gugudan();
        System.out.println("<10>");
    	gugudan.printGugu(10);
        System.out.println("<20>");
        gugudan.printGugu(20);
    }
}

//결과
// <10>
// 1 * 1 = 1 .. 10 * 10 = 100
// <20>
// 1 * 1 = 1 .. 20 * 20 = 400

* 객체 부분

// 파일이름 : Gugudan.java
// 작성자 : 박지인
// 작성일 : 2022년 10월 31일
// 목 적 : 객채+클래스를 이용해 구구단 구하기

public class Gugudan{
	void printGugu(int n) {
    	for(int i = 1; i <= n; i++) {
        	for(int j = 1; j <= 9; j++) {
            	System.out.println(i+" * "+j+" = "+(i * j));
            }
            System.out.println();
        }
    }
}

// 결과
// 객체라 단일 실행 불가능

 

* 참고 사이트
 

자바(Java)〃생성자의 조건 / 필드 초기화

   자바에서 클래스의 3대 구성요소는 필드와 메소드 그리고 생성자로 이루어져 있는데요. 저번글에서 필드의 선언, 전역변수와 지역변수의 차이, 필드의 사용 예제들을 다루었고 이번에는 제

hunit.tistory.com

 

 

Java의 정석 제 6 장 객체지향개념 I-3 Java 정석 남궁성 강의 - ppt download

객체지향개념 I-1 객체지향개념 I-2 객체지향개념 I-3 Java 1. 객체지향언어란? 2. 클래스와 객체 의 정석 Chapter 6. 객체지향개념 I 1. 객체지향언어란? 객체지향개념 I-1 2. 클래스와 객체 3. 변수와 메

slidesplayer.org