본문 바로가기
Kosta DevOps 과정 280기/Java

Class-2

by 롯슈83 2024. 5. 16.
package com.kosta.exam04;
class Book{
	private String title;
	private String author;
	
	public void setTitle(String t) {
		title = t;
	}
	public void setAuthor(String a) {
		author = a;
	}
	public String getTitle() {
		return title;
	}
	public String getAuthor() {
		return author;
	}
	
	
	Book(){
		System.out.println("생성자 동작함");
		title = "헤드퍼스트 자바";
		author = "캐시 시에라, 버트베이츠, 트리샤 지";
	}
}
public class BookTest {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Book b1 = new Book();
		Book b2 = new Book();
		
		b1.setTitle("재밌는 자바");
		b1.setAuthor("홍길동");
		
		System.out.println(b1.getTitle());
		System.out.println(b1.getAuthor());
		System.out.println("===============================");
		System.out.println(b2.getTitle());
		System.out.println(b2.getAuthor());
	}

}

 

매개변수 있게 사용

 

 

객체

  • 자바, C++ => 객체 지향 프로그래밍 (Object Oriented Programming)
  • 현실세계의 모든 것을 객체화 할 수 있다.

객체의 정의

  • 객체
    • 이 세상에서 유일한 것.
    • 이 세상은 수 많은 객체들로 구성이 되어 있어요
    • 여기에 앉아있는 여러분 모두 한명 한명이 모두 객체입니다.
    • 변시우 책상에 놓여있는 "에이스" 과자도 객체이고
    • 임유나 책상에 놓여있는 4색볼펜도 객체이고
    • 최모래, 최가은 책상에 놓여있는 각각의 덤블러도 객체입니다.
    • 제 책상에 놓여있는 리모콘도 모두 객체입니다. 
    • 각각의 객체는 그 객체를 나타내기 위한 여러가지 "속성"들로 구성되어 있어요.
    • 선풍기에는 날개 펜이 있고, 덮개가 있고 받침대가 있고 동작시키기 위한 버튼으로 구성되어있어요.
    • 에이스 과자에서 날개 펜을 찾을 수는 없어요.

객체와 클래스

  • 자바 언어로 "객체지향 프로그래밍을 할 때는 먼저, 내가 표현하고자 하는 객체에 대하여 "속성"과 "동작"을 분석합니다. 클래스를 만들어요.
  • 클래스 : 객체를 만들기 위한 틀(설계도)에 해당합니다. 
  • 객체를 만들기 전에는 먼저 그 객체를 표현하기 위한 속성과 동작을 분석하여 "클래스"를 만들어야 합니다. 
  • 하나의 파일에 하나의 클래스가 있는것이 일반적이며, public 은 반드시 파일명과 똑같은 클래스에만 붙일 수 있다.
  • public 을 붙이면 외부 파일에서도 사용이 가능하다. 
  • 부득이하게 하나의 파일에 여러 개의 클래스를 만들 때에는 파일명과 동일한 클래스에만 public 을 붙이고, 그 클래스에 main 메소드를 포함시킨다.

객체의 구성

  • 속성: 멤버 변수
  • 동작: 멤버 메소드
/*
//사람(Person)
class Person{
	속성
    	이름		String name		"임유나"
    	성별		String gender   "남자", "여자"
        나이		int age			24
    동작
    	먹는다		void eat(String food)
        걷는다		void walk(String where)
}
//표현해야되는 상태에 따라 다른 모양의 사람이 나올 수 있다. 
*/

객체지향프로그래밍

특징

  • 은닉성(encapsulation) : 일반적으로 외부의 다른 클래스로부터 속성(멤버변수)를 보호하는 것을 말합니다. 
  • 접근명시자
    • pivate (=전용부) : 외부로부터 접근을 허용하지 않는 접근 명시자. 속성이 주로 있음.
    • public (=공용부) : 외부의 어떤 클래스라도 접근할 수 있는 접근 명시자. 메소드가 주로 있음.
    • 설정자: pivate 속성값 할당하기
      • 클래스 내부의 set(public) 함수를 통하여 private 속성에 값을 할당한다.
      • 값을 변경하는 동작 ===> setXXX()    setter 설정자
    • 접근자 : private 속성값 읽어오기
      • 클래스 내부의 get(public) 함수를 통하여 private 속성값을 읽어온다.
      • 값을 읽어오는 동작 ===> getXXX()    getter 접근자
    • 객체 지향 프로그래밍의 첫번째 특징이 은닉성에 맞춰 Person 클래스를 만들면 다음과 같이 모든 속성들을 private 영역에 둡니다.
      • private String name;
      • private String gender;
      • private int age
    • 위와 같이 private 영역에 있으면 외부의 다른 클래스에서는 직접멤버변수에 접근할 수 없고 public 에 있는 메소드를 통해서 접근할 수 있도록 만들어야 합니다. 접근하여 값을 변경시키는 동작도 필요하고 접근하여 값을 읽어오는 동작도 필요합니다. 
package com.kosta.exam08;

class Employee{
	private String name;
	private String phoneNums;
	private int yearMoney;
	
	public Employee() {
		name = "임유나";
		phoneNums = "010-1234-5678";
		yearMoney = 4009;
	}
	
	public void setName(String n) {
		name = n;
	}
	public void setPhoneNums(String p) {
		phoneNums = p;
	}
	public void setYearMoney(int m) {
		yearMoney = m;
	}
	public String getName() {
		return name;
	}
	public String getPhoneNums() {
		return phoneNums;
	}
	public int getYearMoney() {
		return yearMoney;
	}
}
public class RectangleTest {
	public static void main(String[] args) {
		Employee EmployeeTest = new Employee();
		System.out.printf("이름 : %s\n번호 : %s\n연봉 : %d",EmployeeTest.getName(),EmployeeTest.getPhoneNums(), EmployeeTest.getYearMoney());
	}
}

생성자

정의 및 형태

  • 객체 생성과 동시에 멤버 변수들을 초기화 시키고 싶을 때 사용하는 함수
  • 클래스 이름과 같은 이름의 특수한 메소드
  • 객체 생성 시에 자동 수행되어 멤버 변수들의 값을 초기화할 목적으로 사용
  • 일반 메소드는 호출문에 의해 동작하지만 생성자는 객체생성시에 자동 수행되기 때문에 return 의 개념이 없다.
  • 따라서 생성자 앞에는 일반 메소드 처럼 return type 을 쓰지 않는다.(void 라고도 쓰지 않는다. 값이 없는것이 아니라 return 자체가 없기때문이다.)
    • void 는 리턴이 없는 것이 아니라 리턴할 때 반환해주는 값이 없다는 것을 뜻한다.

사용법

  • 매개 변수가 없을 때는 정해진 값을 줄 수 있지만 매개변수를 받는다면 처음 생성자를 쓸 때 바로 전달을 줄 수 있다.
package com.kosta.exam04;
class Book{
	private String title;
	private String author;
	
	public void setTitle(String t) {
		title = t;
	}
	public void setAuthor(String a) {
		author = a;
	}
	public String getTitle() {
		return title;
	}
	public String getAuthor() {
		return author;
	}
	
	
	Book(){
		System.out.println("생성자 동작함");
		title = "헤드퍼스트 자바";
		author = "캐시 시에라, 버트베이츠, 트리샤 지";
	}
}
public class BookTest {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Book b1 = new Book();
		Book b2 = new Book();
		
		b1.setTitle("재밌는 자바");
		b1.setAuthor("홍길동");
		
		System.out.println(b1.getTitle());
		System.out.println(b1.getAuthor());
		System.out.println("===============================");
		System.out.println(b2.getTitle());
		System.out.println(b2.getAuthor());
	}

}

  • 매개변수가 외부 변수보다 더 순위가 높기 때문에 같은 이름으로 하면 초기화가 되지 않는다. (매개변수에 매개변수를 넣는 행위이다.) 이럴 때 외부변수임을 this(식별자)로 명시하면, 해결이 가능하다.
public Book(String title, String author){
		this.title = title;
		this.author = author;
	}
  • 생성자의 중복(생성자의 overloading) : 이 때, 매개 위와 같이 만들 경우 매개 변수 없거나, 매개변수가 적을 때 new Book () 할 경우 오류가 난다. 여러 해당 상황들을 만들고 싶을 때, 생성자를 여러 개 만들면 가능하다. 
    • 매개변수의 갯수가 다르거나, 자료형이 달라야한다.(이 때, 이름이 아닌 갯수와 타입을 가지고 구분한다.)
public Book(String title, String author){
		this.title = title;
		this.author = author;
	}
	public Book() {
		//이 경우는 this 를 써도 되고, 안써도 된다.
		title = "제목없음";
		this.author = "저자없음";
	}
    /*
    public Book() {
		this("제목없음", "저자없음");	
	}
    */
	public Book(String title) {
		this(title, "저자없음")
	}
  • 생성자안에서 자신 말고 다른 생성자를 동작 시킬 수 있는데, 그것을 this 라고 한다.
    • 반드시 첫번째에 와야한다. (다른 명령어가 필요할 경우 저 this 아래에 써야한다.) 
  •  this의 구분
    • this ==> 생성자나 메소드의 매개변수 이름을 의미 있는 이름으로 정해주다보면 멤버변수명과 겹치게 된다. 멤버 자신을 구별할 목적으로 사용한다. 
    • this() ==> 생성자가 중복정의 되어 있을 때 생성자 안에서 또 다른 생성자를 동작 시키고자 할 때 사용하는 문장이고, 반드시 생성자의 첫번째 문장에 와야한다.

기본 생성자

  • 매개변수를 하나도 갖지 않는 생성자를 말하며 사용자가 생성자를 만들지 않으며 자바가 "기본생성자"를 제공해주며 기본각각의 자료형에 따라 초기화해준다
  • 참조자료형은 null, int 는 0, double 은 0.0, boolean = false
package com.kosta.exam13;
class Person{
	private String name;
	private int age;
	private double height;
	
	public String getName() {
		return name;
	}
	public int getAge() {
		return age;
	}
	public double getHeight() {
		return height;
	}
}
public class BookTest {
	public static void main(String[] args) {
		Person man1 = new Person();
		System.out.println(man1.getName());
		System.out.println(man1.getAge());
		System.out.println(man1.getHeight());
	}
}

 

  • 그러나, 사용자가 생성자를 1개라도 만들기 시작하면 더 이상 "기본 생성자"를 제공하지 않는다.
  • 필요하다면 사용자가 직접 만들어서 사용해야 한다.
package com.kosta.exam15;
class Person{
	private String name;
	private int age;
	private double height;
	
	public Person(String name, int age, double height) {
		this.name = name;
		this.age = age;
		this.height = height;
	}
	public Person() {
		
	}
	
	public String getName() {
		return name;
	}
	public int getAge() {
		return age;
	}
	public double getHeight() {
		return height;
	}
}
public class BookTest {
	public static void main(String[] args) {
		//사용자가 생성자를 만들기 시작하면 더이상 기본 생성자를 제공하지 않아요.
		//필요하다면 사용자가 만들어서 사용해야합니다.
		Person man1 = new Person();
		System.out.println(man1.getName());
		System.out.println(man1.getAge());
		System.out.println(man1.getHeight());
		Person man2 = new Person("홍길동", 29, 155.5);
		
	}
}

 

 

Class와 이클립스 자동완성 기능

생성자함수 자동완성

  • 마우스 뒷키 > Source(Alt+Shift+S) > Generate Constructor using Fields
    매개변수를 갖는 생성자 자동완성
  • 마우스 뒷키 > Source(Alt+Shift+S) > Generate Constructor form Superclass...
    매개변수를 갖지 않는 생성자 자동완성

 

Getter와 Setter 자동완성

마우스 뒷키 > Source(Alt+Shift+S) > Generate Getter > Select All> Generate

++UML 이란

package com.kosta.exam06;

class Rectangle{
	private double length;
	private double width;
	
	public void setLength(double l) {
		length = l;
	}
	public void setWidth(double w) {
		width = w;
	}
	public double getLength() {
		return length;
	}
	public double getWidth() {
		return width;
	}
}
public class RectangleTest {
	public static void main(String[] args) {
		
	}
}

 

++ Math.random() -> 0~1 사이의 난수를 발생시켜주는 함수

package com.kosta.exam23;

public class Dice {
	private int face;
	public void roll() {
		face = (int)(Math.random() * 6)+1;
	}
	public int getFace() {
		return face;
	}
}
package com.kosta.exam23;

public class DiceTest {
	
	public static void main(String[] args) {
		Dice d1 = new Dice();
		Dice d2 = new Dice();
		
		d1.roll();
		d2.roll();
		
		System.out.println("첫 번째 주사위의 면 :"+d1.getFace());
		System.out.println("두 번째 주사위의 면 :"+d2.getFace());
	}
}

 

 

'Kosta DevOps 과정 280기 > Java' 카테고리의 다른 글

메소드 중복(Method Overloading)  (0) 2024.05.20
Class-3  (0) 2024.05.17
Class-1  (0) 2024.05.16
메소드 호출  (0) 2024.05.16
정렬하기  (0) 2024.05.16