자바로 프로그래밍을 하다보면 맨 처음에 클래스를 설정해야 한다.
하나의 프로젝트는 우리가 출력을 해야 하는 main 클래스와 여러개의 클래스로 구성된다.
main 클래스에서는 하나의 main 함수와 여러개의 함수들로 구성된다.
그 중 우리가 살펴볼 것은 다음과 같다.
1. 클래스와 클래스간의 관계
2. 클래스와 객체간의 관계
3. 객체와 객체간의 관계
1. 클래스와 클래스간의 관계
import com.삼성.Mouse;
import.com.엘지.Moniter;
public class 컴퓨터{
Mouse mouse = new Mouse(); // 삼성 마우스 연결
Moniter moniter = new Moniter(); // 엘지 마우스 연결
}
package com.엘지
public class Moniter{
public int Hz = 120;
private boolean speicalScreen = true;
public boolean getspeicalScreen(){
return speicalScreen;
}
}
package com.삼성;
public class Mouse{
public int dpi = 1000;
private boolean specialButton = true;
public boolean getspeicalButton(){
return speicalButton;
}
}

삼성의 마우스와 엘지의 모니터를 사서 컴퓨터에 연결을 하려고 할 때
엘지의 모니터를 연결하면 기본적인 주사율을 120으로 설정할 수 있지만 LG 제품들끼리의 호환성이 맞아 떨어질 경우에만 사용될 수 있는 스페셜스크린기능은 사용할 수 없다.
삼성의 마우스를 연결하면 기본적인 dpi을 1000으로 설정할 수 있지만 삼성 제품들끼리의 호환이 될 경우에만 스페셜 버튼이 활성화 되기 때문에 사용할 수 없다.
이럴 경우에는 private 제한자의 객체의 정보를 얻기위해 public 함수의 get함수로 접근할 수 밖에 없다. get함수를 통해서만 객체에 접근할 수 있기 때문에 복잡한 기능관계를 가진 경우에는 여러가지의 기능을 제한시킬 수 있다.
이처럼 ,클래스들 간에 함수나 변수에 접근할 수 있도록 허용여부를 결정하는 것이 접근제한자이다.
접근 제한자 | 제한 대상 | 제한 범위 |
public | 클래스,필드,생성자,메소드 | 없음 |
protected | 필드, 생성자, 메소드 | 같은패키지 or 자식객체 |
default | 클래스,필드,생성자,메소드 | 같은패키지 |
private | 필드,생성자,메소드 | 객체 내부 |
2. 클래스와 객체간의 관계
public class 송도{
public static void main(String[] args){
아파트 TheShopFirstWorld = new 아파트(20,3,42,더샵퍼스트월드,true); // 객체 1 생성
아파트 TheShopCentralCity = new 아파트(20,4,39,더샵센트럴시티,false); // 객체 2 생성
}
}
class 아파트{
int 층; //층의 개수
int 호; //호의 개수
int 평수; // 평수
String 이름; // 아파트 이름
boolean 지하주차장; // 지하 주차장이 있는지 없는지
아파트(int c, int h,int a,String n, boolean g){
층 = c;
호 = h;
평수 = a;
이름 = n;
지하주차장 = g;
}
}
위의 코드에서 우리가 살펴볼 것은 바로 클래스와 객체의 관계이다. 송도에는 아파트가 여러채 있는데 그 중 아파트들도 여러 종류가 있다.

아파트에 대한 정보
1. 층의 개수
2. 호의 개수
3. 평수
4. 이름
5. 지하주차장 유무
(아파트) 클래스는 기본적인 정보로 구성된 하나의 (아파트) 설계도가 된다.
그리고 메인함수라는 건설사가 이 설계도를 가지고 아파트를 짓게 되는데, 더샵 퍼스트 월드와 더샵 센트럴 시티를 짓기로 한다. 이 때 더샵 퍼스트 월드와 더샵 센트럴 시티를 아파트 클래스의
객체 또는 인스턴스라 한다.
다음은 클래스와 객체의 심화관계를 설명하는 단계이다.
위에서 나온 접근 제한자와 클래스의 객체를 통해서 하나의 객체에만 접근 가능하도록 하는 싱글톤 패턴이 정형화된 디자인 패턴들 중 하나이다.
public class 클래스 {
// private 접근 권한을 갖는 정적 필드 선언 및 초기화
private static 클래스 singleton = new 클래스();
private 클래스() {} // 외부 접근 제한
// public 접근 권한을 갖는 정적 메소드 선언
public static 클래스 getInstance(){
return singleton;
}
}
public class Main{
클래스 class1 = 클래스.getInstance();
클래스 class2 = 클래스.getInstance();
// 하나의 객체로만 참조하도록 하는
}

3. 객체와 객체간의 관계
1) 객체의 외부와 내부간의 관계
마지막으로 살펴볼 것은 객체들간의 관계인데 자바에는 자료구조형 클래스가 기본적으로 제공된다.
이때 ArrayList에 자료를 저장할때 기본형 변수를 저장할 수도 있지만 객체를 저장할 수도 있기 때문에 객체안에 또다른 객체를 넣을 수 있다.
import java.util.ArrayList;
public class Main{
public static void main(String[] args){
spot s1 = new spot(1,4);
spot s2 = new spot(2,1);
ArrayList<spot> arraylist = new ArrayList<spot>();
arraylist.add(s1);
arraylist.add(s2);
for(spot m : arraylist) {
System.out.println(m.x + m.y);
}
}
}
class spot{
int x;
int y;
spot(int x,int y){
this.x= x;
this.y =y;
}
}
/*
5
3
*/

ArrayList는 연결리스트를 나타내는 것으로 <> 안에 어떤유형의 객체를 넣을지 결정한다.
ArrayList의 객체 arraylist를 하나 생성하고 그 안에 spot 클래스의 객체 s1과 s2를 각각 넣어주면 연결리스트의 원소로 들어간다.
2) 객체의 부모와 자식간의 관계
또 한가지는 부모와 자식간의 관계이다.
package main
public class coffee{
int shot ; // 샷 추가
boolean esspresso = true ; // 에스프레소 = true
boolean ice ; // 아이스 = true , 핫 = false
String name; // 커피이름
int price = 2000; // 가격 2,000원
coffee(int s,boolean i,String n){
shot =s;
ice = i;
name = n;
}
public coffee() { }
void print(String n){
System.out.println(n+"나왔습니다. "+"가격은"+price+"원입니다.);
}
}
package main;
public class CafeLatte extends coffee{
int price = 4500;
CafeLatte(int s, boolean i, String n) {
super();
shot = s;
ice = i;
name = n;
}
@Override
void print(String n){
System.out.println("주문하신 "+n+"나왔습니다. "+"가격은"+price+"원입니다.");
}
}
package main
public class Main{
public static void main(String[] args){
coffee cfe = new coffeee(1,true,"커피");
CafeLatte cfl = new CafeLatte(2,true"카페라떼");
}
}
부모 객체인 coffee를 상속해서 자식객체인 CafeLatte에서 기본 변수와 함수를 상속받는다.
CafeLatte extends coffee

자식객체를 생성 할때 부모객체의 생성자를 먼저 상속받고 자식객체의 변수를 할당한다.
CafeLatte(int s, boolean i, String n) {
super();
shot = s;
ice = i;
name = n;
}
@Override
void print(String n){
System.out.println("주문하신 "+n+"나왔습니다. "+"가격은"+price+"원입니다.");
}
그러면 coffee에 저장된 변수와 함수를 자식클래스가 상속받고 shot , ice, name , print 부분을 다시 선언하거나 재정의 할 수 있다.
댓글