190415 Day7 this, interface, mission, 배열, 자바빈즈, 추상클래스
복습
System.out.println(); 에서 out은 필드인데 어떻게 메소드인 println()을 포함하고 있지?
- out은 PrintSteam이라는 메소드로 정의되어 있음 PrintStream out; 이렇게
명시하는 this
-
this는 보통 생략하지만 명시할 때도 있다. 생성자가 두개 있을 때
-
public class Abc { int su; public Abc() { } public Abc(int su) { su = su; } public void hello() { } } /* 객체생성1 abc a = new Abc(); System.out.println(a.su); -> 이렇게 하면 0 출력됨 객체생성2 Abc a = new Abc(500); // 2번생성자 호출 System.out.println(a.su); -> 이렇게 하면 0이 나옴, su = su는 지역변수에 500을 넣어라가 되어버림 -> 500이 나오게끔 하고 싶다면 멤버와 지역변수의 이름을 다르게 한다 -> 하지만 이런 경우는 많이 없다. 연관성 주기 위해 이름 같게 함 보통, 그래서 this.su = su 이렇게 명시하면 된다. -> Abc(){this(100);} 을 넣어주면 Abc(int su)에 su 값에 100을 넣어주게 된다. */
interface
-
객체를 연결해주는 매개체, 메뉴판 같은, 손님과 주방장을 이어주는!
-
//내가 만든 것 class A implements Common { void hello() { System.out.print("신짜오") } } //이미 Commmon에는 hello()가 정의되어있다. /* Common c; c = new A(); c.hello(); */ class implements Common { void hello() { System.out.print("봉쥬르"); } } /* c = new B(); c.hello(); */ Common이라는 interface를 통해서 A와 B 클래스를 필요할때마다 쓴다 느슨한 관계!
mission
package com.encore.$0415.misson;
import java.io.IOException;
/*
* 기능정의
* -단입력
* int inputDan ()
* {
* int dan = read() 또는 readLine() 을 사용해서 받기 //그리고 단출력에 전달해야 함, return 타입 통해
* }
*
* -단출력
* void outputDan ()
* {
* //전달받은 dan에 대한 출력
* }
* -계속여부
* char continueDan ()
* {
* read() 또는 readLine()
* }
*/
public class Gugudan
{
//public int dan;//=0
//public char continuedan;//='\u0000'
int inputDan() throws IOException
{
System.out.println("원하시는 단을 입력해주세요");
int dan = System.in.read() - 48;
System.in.read();
System.in.read();
return dan;
}
void outputDan(int dan)
{
System.out.println(dan + "단 구구단 출력");
for (int i = 1; i <10; i++)
{
System.out.println(dan + "X" + i + " = " + dan*i) ;
}
}
char continueDan() throws IOException
{
System.out.println("계속하시겠습니까?");
char continuedan = (char) (System.in.read());
System.out.println(continuedan);
System.in.read();
System.in.read();
return continuedan;
}
}
//===
package com.encore.$0415.misson;
import java.io.IOException;
/*
* main() 포함
* 반복적인 실행을 할 것(while 또는 do~while 사용 하면 됨)
* 이번은 while로 해보자!
* 반복문 내에서 Gugudan클래스 안에 3개의 메소드가 있는데 3개의 메소드들을 적당히 호출.
*/
public class GugudanTest extends Gugudan
{
public static void main( String[] args) throws IOException
{
Gugudan g = new Gugudan();
System.out.println("구구단");
int dan = g.inputDan();
g.outputDan(dan);
//
// g.inputDan();
// g.outputDan(dan);
// g.continueDan();
//
while(g.continueDan() == 'y' )
{
dan = g.inputDan();
g.outputDan(dan);
}
System.out.println("종료");
}
}
//선생님이 설명해주시는 것
//MyTest.java
public class MyTest {
public static void main(String[] args) {
My my = new My();
You you = new You();
int su = my.juwon();
you.lime(su);
}
}
//My.java
public class My {
int su; // 멤버변수, 필드 ==> 클래스내의 메소드들이 공유할 데이터
public int juwon()
{
//발생되는 데이터
su = 300;
//발생된 데이터 주기 =>> 리턴
return su;
}
}
class You
{
public void lime(int su)
{
System.out.println("su = " + su);
}
}
package A0416;
public class MethodCallTest
{
public static void main(String[] args) {
A a = new A();
a.hello();
//메인 메소드 실행 중 발생 데이터 : 100
int su = 100;
String name = "나길동";
String name2 = "길라임";
int age = 15;
//m1()메소드에게 su를 전달
a.m1(su);//메소드 호출 () 소괄호 안에 데이터를 표시
a.m2(name); // 메소드 호출 시 ㅌ데이터를 전달 할 수 있다.
//데이터 두개 : 15,"길라임" => m3에게 전달
a.m3(name2, age);
//String name2라는 변수는 m3에 전달되지 않음
//name2가 담고 있는 데이터(value) "길라임"만 전달!
//---------------
int i = 10;
int j = 20;
int k = 30;
// m4()메소드에게 정수값 10, 20, 30 전달!
a.m4(i, j, k);
} //main
}
//A.java
package A0416;
public class A {
//메소드 정의!
public void hello()
{
System.out.println("A클래스 안녕~!");
}
public void m1()
{
}
public void m1(int su)
{
System.out.println("m1() : " + su );
}
public void m2(String name)
{
//main()메소드에 a.m2("나길동"); 실행되면
//m2()에서는 String name = "나길동";이 가장 먼저 실행되어집니다.
System.out.println("m2() : " + name);
}
public void m3(String name2, int age) {
System.out.println("m3() : " + name2 + ", " + age);
}
public void m4(int su1, int su2, int su3) {
System.out.println(su1 + ", " + su2 + ", " + su3);
}
}
배열
-
데이터형이 동일한 자료에 같은 (하나의) 변수명을 정의한 자료들의 집합.
——————-복수 데이터
-
데이터형이 동일한 자료 ==>> 조건
-
같은(하나의) 변수명을 정의 ==>> 특성
-
자료들의 집합 ==>> 정의
-
11 | 22 | 33 |
---|---|---|
ture | false | true |
“길동” | “라임” | “주원” |
‘j’ | ‘a’ | ‘v’ |
- int su1 =11; int su2 = 22; int3 =33;
-
int [ ] su = { 11, 22, 33 }; =>> su라는 배열변수에 복수 데이터를 대입!
-
배열은 왜 쓸까?!
- 그냥 나열하면 되는데…
- 관리가 편하다!
- but, 문제가 있다 구분이 안가… 그래서 구분을 만들었어!
- 실제 {} 안에는 구분이 있음 {ㅁㅁㅁ} 이렇게!
- 자바에서는 배열은 객체
- su[]는 전체 데이터 su[0], su[1] , su[2] 는 각각의 데이터
- 데이터를 구분하기 위해서 사용 =>> su라는 배열변수에 복수 데이터를 대입!
-
int su; =>> 한개의 데이터 입력
-
int []su; =>> 여러개의 데이터 입력 (배열)
-
boolean [ ] b = { true , false, true };
- String [ ] str = { “길동”, “라임”, “주원” };
-
char []ch = { ‘j’, ‘a’, ‘v’, ‘a’ };
-
데이터를 구분하기 위해서 번지를 사용
- 시작번지는 항상 0번지부터 시작!
- 첫번째 데이터 부터 인덱스(자동번호)가 부여
- 인덱스는 0부터 시작해서 1부터 증가
- 배열의 크기가 정해지면 인덱스를 벗어나는 참조를 하면 안됨
- int [] su3 = {10, 20, 30};
- 번지 =>> 0 1 2
- System.out.println( su3[1] ); // 데이터 사용 (두번째 데이터 출력)
-
System.out.println( su3[3] ); // 하면 에러 발생 ArrayIndexOutOfBoundsException
-
for는 규칙적인 수 반복 할때, 배열과 친하다!
자바빈즈
-
서로 관련성 있는 속성을 묶어주는 클래스(객체)
-
사용하는 곳에 따라 VO(ValueObject) 또는 DTO(Data Transfer Object) 라는 이름을 사용하기도 함.
-
사용하고자 하는 속성들을 규칙 약속함! - 개발자들끼리
-
규칙)
- 속성데이터를 private하게 선언
- public 선언된 주고 받는 메소드 (get, set)를 정의
==========================================
- public한 기본생성자, 오버로딩 생성자를 정의 할 수 있다.
- 반드시 속성의 수와 일치하는 get, set이 정의되지 않아도 됩니다.
-
참고)
- get으로 시작되는 메소드들 : 게터(getter)메소드
- set으로 시작하는 메소드들 : 세터(setter)메소드
- public한 기본생성자, 오버로딩생성자 정의 할 수 있다.
-
public class Person { private String name; private int age; private String job; public Person(){} public Person (String name, int age, String job) { this.name = name; this.age = age; this.job = job; } public void setName(String name) //main에 있는 홍길동 받아옴 { this.name = name; } public void setAge() { this.age = age; } public String getName() { return name; // this. 생략 } public String getJob() { return job; // this. 생략 } } //private 붙이면 쓰레긴데?! //===main=== Person p = new Person(); p.name = "홍길동"; //=>> 이름 정보 주기(설정) : 에러발생 p.setName("홍길동") //=>> 실행 OK //system.out.println(p.name); //=>> 이름정보를 받기(얻기) private없다면 "홍길동 출력" System.out.println( p.getName() ); //but, Person class에 private String name; 을 해버리면 에러가 난다!
-
public class Person { String name; int age; String job; }
alt + shift + s 통해서 getter setter 자동 생성!
ctrl + shift +enter 기본생성자 생성!
필드값도 생성하자!
매개변수와 get는 같지만 방향성이 조금 다른것일 뿐
추상클래스
- 후손 class를 제어할 목적으로 사용.
- 객체화 될 수 없는 클래스
- 구현(정의)된 메소드와 선언된 메소드로 구성
- 스스로 객체생성 불가 ( new 사용 X ), 후손class 객체생성(지식은 부모다)해서 사용
class 기본클래스
{
//정의(구현)된 메소드
void hello(){}
}
//---
class 추상클래스
{
//선언된 메소드, 정의된 메소드
void hello();
void goodBye(){}
}
//---
interface 인터페이스
{
//선언된 메소드만!
void hello(){};
}
//추상 클래스 형식
abstract class 클래스명
{
//필드선언
public void hello(){}//구현된(정의된) 메소드
abstract void print(): // 선언된 메소드(abstract 붙여줘야해)
}
- 주의!
- 선언된 메소드를 사용하는 경우 반드시 abstract 명시!
- 만약 abstract 미기재시에는 에러 발생!
궁금상자
- 배열에서 시작은 0인데 바꿀 수 없나? 그리고 순서가 +1이 아니라 +2 씩 증가하게 할 수 없나?
- 배열은 타입이 같아야 하는데 만약 문자 숫자 배열 두개를 매번 교차로 출력하고 싶다면 그냥 for문 써서 하나씩 해야 하나?
선생님이 설명해주심 바로,,ㅋㅋ 숫자를 문자로 형변환 후!
- super(); ? 빼도 된다구?
- 매개변수와 getter
- 자바 ioc?
'클라우드 기반 웹 개발자 과정 공부 > JAVA' 카테고리의 다른 글
190118_Day9 복습, 삼항연산자, 클래스 객체 비교, 오토박싱 언박싱 (0) | 2019.04.18 |
---|---|
190417_Day8 라인단위 입력, 클래스 객체 생성, 배열, 2차원 배열 (0) | 2019.04.17 |
190415 Day6 이클립스 설치, 접근지정(제한)자, 자기참조연산자, 인터페이스, final, 클래스와 인터페이스 간의 상속 문법 (0) | 2019.04.15 |
190412 Day5 Escape Character, printf, OOP, 오버라이딩, 오버로딩, 생성자 (0) | 2019.04.12 |
190411 Day4 자바의 입력 (0) | 2019.04.11 |