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 |