진짜 뒤질것같다 오늘꺼 개어렵다
머리에 들어온거 하나도없는데
일단 필기갈겨본다
뒤졌다
모조리 머리속에 넣어주마
클래스
- 객체를 만들어 내는 설계도
- 행위, 기능(메서드) + 특성, 데이타(변수)
- Object를 행위와 특성으로 바라보고 그것을 코드로 옮겨 놓은 것
▶클래스 디자인
[1] 클래스명 설정
- class 이름 {
[2] 메소드 만들기
▽ [1][2] 를 활용한
덧셈, 뺄셈 계산기 클래스 디자인
class Calculator{
public double add(double a, double b){ // 덧셈
double d = a+b;
return d;
}
public double subtract(double a, double b){ // 뺄셈
return a-b;
}
▽ 위에서 디자인한 클래스
객체 생성 및 사용하기
1. main 위쪽에 class 이름 설정
2. 클래스명 이름 = new 클래스명();
=> Calculator ca = new Calculator();
3. 결과값 받을변수 = 이름.메소드명(매개변수);
=> double result = ca.add(a, b); (=ca 로 설정된 클래스에서 add 메소드를 가져오겠다)
public class CalculatorTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("두실수를 입력하세요");
double a = sc.nextDouble();
double b = sc.nextDouble();
Calculator ca = new Calculator();
double result = ca.add(a, b);
System.out.println("a=" +a +",b="+ b);
System.out.println("a+b = "+ result);
result = ca.subtract(a, b);
System.out.println("a-b = "+ result);
※생성자(Constructor)
- 멤버변수의 초기화를 목적으로 정의되는 메서드
- 객체가 생성될 때 자동 호출되어 가장 먼저 실행되는 메서드
▶ 생성자가 되기 위한 조건
- 클래스의 이름과 동일한 이름의 메서드
- 매개변수는 가질 수 있으나 반환값은 가질 수 없다
▶ 객체 생성 문장에는 생성자 호출하는 부분이 존재함
- 클래스명 변수명 = new 클래스명();
ex ) Account acc = new Account();
=> new 의 오른편 부분이 생성자 호출하는 부분
기본생성자 (default 생성자) - 매개변수를 가지지 않는 생성자
- 클래스내에 생성자가 하나도 없으면 컴파일러가 자동으로 기본생성자를 추가해줌
- 하지만 다른 생성자가 있으면 컴파일러에 의해 기본 생성자가 만들어지지않음 !
▶ 기본생성자 특징
- 클래스명과 동일한 이름 사용
- 반환값도 없고, void 도 아님
- 매개변수가 없음
- 모든 필드를 0 (숫자필드), false(논리형), null(참조형)로 초기화
▽ 생성자 문법
class Account{
//생성자
Account(){
}
}
재정의 생성자 - 매개변수가 있는 생성자
- 사용자가 임의로 다시만들어놓은 생성자
▶클래스 생성에 생성자 넣어보기
class Account{
- 멤버변수 넣기
class Account{
String accId;
String name;
int balance
- 기본생성자 추가 (매개변수 있는 생성자)
class Account{
String accId;
String name;
int balance;
Account(){
}
- 메서드 만들기
class Account{
String accId;
String name;
int balance;
Account(){
}
public void deposit(int money) {
balance += money;
}
public void showInfo() {
System.out.println("계좌번호 : " + accId);
System.out.println("이름 : " + name);
System.out.println("잔액 : " + balance+"\n");
}
- 객체생성
class Account{
String accId;
String name;
int balance;
Account(){
}
public void deposit(int money) {
balance += money;
}
public void showInfo() {
System.out.println("계좌번호 : " + accId);
System.out.println("이름 : " + name);
System.out.println("잔액 : " + balance+"\n");
}
public class AccountTest {
public static void main(String[] args) {
Account acc2 = new Account();
- 멤버변수사용
class Account{
String accId;
String name;
int balance;
Account(){
}
public void deposit(int money) {
balance += money;
}
public void showInfo() {
System.out.println("계좌번호 : " + accId);
System.out.println("이름 : " + name);
System.out.println("잔액 : " + balance+"\n");
}
public class AccountTest {
public static void main(String[] args) {
Account acc2 = new Account();
acc2.accId="100-001-2000";
acc2.name="홍길동";
acc2.balance=100000;
- 메서드 사용
class Account{
String accId;
String name;
int balance;
Account(){
}
public void deposit(int money) {
balance += money;
}
public void showInfo() {
System.out.println("계좌번호 : " + accId);
System.out.println("이름 : " + name);
System.out.println("잔액 : " + balance+"\n");
}
public class AccountTest {
public static void main(String[] args) {
Account acc2 = new Account();
acc2.accId="100-001-2000";
acc2.name="홍길동";
acc2.balance=100000;
acc2.deposit(30000); //30000원 입금
acc2.showInfo();
외전 ) 매개변수 있는 생성자
- 생성자 추가
Account(String p_accId, String p_name, int p_balance){
accId=p_accId;
name=p_name;
balance=p_balance;
}
- 생성자 사용
Account acc = new Account("200-001-3000","김길동",200000);
acc.showInfo();
▶클래스 생성에 생성자 넣어보기 또해보기
- 원의 넓이 구하기
class Circle {
int radius; // 멤버변수
Circle(int p_radius){
radius=p_radius;
} //매개변수가 있는 생성자
public double findArea() {
double area = radius*radius*3.14;
return area;
} //메서드만들기
public class CircleTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("반지름 입력!");
int r = sc.nextInt();
Circle c = new Circle(r); // 객체생성
double area=c.findArea();
double girth=c.findGirth(); // 생성자를 이용해서 멤버변수의 값 초기화
=> 생성자 new Circle(r) 을 통해
변수 area 와 girth 에 값을 넣는다
c.radius = 20;
area=c.findArea(); //멤버변수 값 변경도 가능
▶클래스 생성에 생성자 넣어보기 또또해보기
- 직사각형 넓이 구하기
class Rectangle{
double width, height;
Rectangle(double w, double h){
width = w;
height = h;
}
public double findArea(){
return width * height;
}
public class RectangleTest {
public static void main(String[] args) {
System.out.println("사각형의 가로, 세로를 입력하세요");
Scanner sc = new Scanner(System.in);
double w = sc.nextDouble();
double h = sc.nextDouble();
Rectangle r = new Rectangle(w, h);
double area = r.findArea();
double girth = r.findGirth();
System.out.println("사각형의 넓이 : " + area);
}
}
※접근 제한자 (접근 제어자)
- 멤버나 클래스에 사용되어, 외부에서 접금하지 못하도록 제한하는 역할 (데이터를 보호하기위해)
- 클래스 내부의 멤버를 노출하거나 숨길 때 사용
★★★★★
private - 같은 클래스 내에서만 접근 가능
default (생략형) - 같은 패키지 내에서만 접근 가능
protected - 같은 패키지는 물론 다른 패키지일지라도 상속관계가 있으면 접근가능
public - 어디서나 접근 가능
private < default < protected < public
Q. 접근 제어자가 사용될 수 있는 곳은? - 클래스, 멤버변수, 메서드, 생성자
클래스 - public, default 만 사용 가능
메서드, 멤버변수 - public, protected, default, private
지역변수 - 사용불가
~보통~
클래스 - 일반적으로 멤버변수는 외부에 대해 숨기고, 대부분의 메서드는 노출함
▽
멤버변수 - private으로 선언
- private인 멤버변수의 값을 가져오거나 변경하기 위해서 getter/setter 만들어 사용
메서드는 - public으로 선언
※getter / setter
- private 으로 선언되어 접근할 수 없는 멤버변수의 값을
get ~(), set ~() 메서드를 만들어 값을 가져오거나 변경한다.
- 멤버변수 하나당 한 쌍의 get~(), set~() 메서드 필요
▶getter / setter 쓰임새 알아보기
- 멤버변수가 private 으로 선언됨
class Man{
private int age;
int height;
- get 이용하여 age 멤버변수의 값 읽기
public int getAge() {
return age;
}
- set 이용하여 age 멤버변수 값 수정하여 저장하기
- setter 는 무조건 void !
public void setAge(int p_age) {
age=p_age;
}
- setter 를 이용한 멤버변수의 값 변경
- getter 를 이용해 값을 읽어오기
public class ManTest {
public static void main(String[] args) {
Man m = new Man();
m.height=180;
//m.age=20; //error
m.setAge(20); //setter이용해서 값을 저장
System.out.println("키 : "+ m.height);
System.out.println("나이 : "+ m.getAge()); //getter이용해서 값을 읽어온다
▽위의 과정 하나로 합치기
package com.day12;
/*
멤버변수 - private으로 선언
메서드 - public으로 선언
멤버변수의 값을 가져오거나 변경하기 위해서 getter/setter 만들어 사용
*/
class Man{
private int age; //20
int height; //180
public int getAge() { //읽기
return age;
}
public void setAge(int p_age) { //쓰기, 저장
age=p_age;
}
}
public class ManTest {
public static void main(String[] args) {
Man m = new Man();
m.height=180;
//m.age=20; //error
m.setAge(20); //setter이용해서 값을 저장
System.out.println("키 : "+ m.height);
//System.out.println("나이 : "+ m.age); //error
System.out.println("나이 : "+ m.getAge()); //getter이용해서 값을 읽어온다
}
}
▶getter / setter 쓰임새 하나 더 보기
class Triangle3{
private int width;
private int height;
Triangle3(int p_width, int p_height){
width=p_width;
height=p_height;
}
public int getWidth() {
return width;
} //getter 이용width 값 가져오기
public void setWidth(int w) {
width=w;
} // setter 이용 width 값 다시쓰기
public int getHeight() {
return height;
} //getter 이용 height 값 가져오기
public void setHeight(int h) {
height=h;
} /// setter 이용 height 값 다시쓰기
//메서드
public double findArea() {
return width*height/2.0;
}
public class TriangleTest5 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("밑변, 높이 입력!");
int w=sc.nextInt();
int h=sc.nextInt();
//(1) 생성자를 이용한 멤버변수 초기화
Triangle3 tr = new Triangle3(w, h);
double area=tr.findArea();
System.out.println("\n면적:"+ area);
//(2) setter를 이용한 멤버변수의 값 변경
tr.setWidth(30);
tr.setHeight(40);
System.out.println("\n\n변경한 밑변 : " + tr.getWidth());
System.out.println("높이 : " + tr.getHeight());
System.out.println("삼각형 면적 : " + tr.findArea());
}
}
'JAVA' 카테고리의 다른 글
[JAVA] 클래스배열 (0) | 2022.02.24 |
---|---|
[JAVA] Static (0) | 2022.02.23 |
[JAVA] 객체와 클래스 (0) | 2022.02.21 |
[JAVA] 배열 (0) | 2022.02.19 |
[JAVA] 오버로딩 / 재귀호출 메서드 생성 / Math.random (0) | 2022.02.18 |