본문 바로가기
개발자로 가는 길(국비지원과정)/1. Java

[210423금] 객체지향, Class 클래스, 향상된 for문

by 레아Leah 2021. 4. 23.
반응형

[정리] 배열

- 같은 데이터 타입의 데이터를 넣을 수 있는 변수가 여러 개 필요할 떄 사용 

- int[] 변수명 = new int[10]

- heap 영역(new int[10]): 0으로 초기화된다.  (타입에 따라 달라질 수)

- .length 라는 속성이 생성 -> read할 수 잇는 정수 값, 수정 불가(read only) 

- 동적으로 배열의 크기를 변경할 수 없다. (단점) --> ArrayList로 해결.   

 

 

[문자열 배열]

사용할 일은 적지만 활용해서 사용할 수 있기때문에 알아두기! 

 

 

★향상된 for문(collection데이터 사용시)

temp는 일회용 변수로 사용

for(String temp : srr)

System.out.println(temp);

 

밑에 열어보기 ↓

더보기

 

for(데이터타입 임시변수명 : 배열명 )

System.out.println(임시변수명);

 

 

전체를 다 가져와서 쓰고 싶을 때(전체 데이터를 순회하기 위해 사용)

 

 

 

 

★[클래스]★

하나만 잘만들어놓으면 나머지는 그냥 넣어서 사용하면 된다. 

 

객체지향언어

- Java, C#, 파이썬, 자바스크립트, C++

 

Class의 사용

- 선언 후 사용 가능 

- 여러 개의 데이터+ 기능을 하나로 묶은 것 : 객체지향 언어의 특징

 

 

[안에 들어있는 것] <-생략 가능 

더보기

[접근지정자] class 클래스명 {

        [접근지정자] 타입 멤버변수;  

          

        [접근지정자] 멤버메소드{

        }

}

 

ex)

public class Score {

}

: 여기서 public이 접근지정자 

 

메인 안에 있는 것은 지역변수

 

 

 

[Score라는 하나의 타입] : 클래스는 기업에서 사용할 때 데이터가 워낙 많기 때문에 구조화 시키기 위해서 사용한다.

클래스 하나를 잘 정의하는 것이 중요! 

클래스를 일반변수처럼 바로 사용하지 못한다. 클래스를 사용하기 위해서는 객체를 생성한 후 사용할 수 있다. 

이해하기 쉽게 나눈 것이지 나누어진 것이 아니라 큰 박스 하나! 

여러 개의 데이터를 하나로 묶은 것이 클래스,, 배열은 값 하나하나 따로 있는! 

 

 

생성 후 사용가능!

Score s = new Score( ); //클래스 Score에 new Score( );라는 객체를 생성했다! 

 

s라는 변수가 스택에 생성, heap영역에 new Score( ); 저장.

s.name

s.kor

s.eng

s.avg

 

 

[Score라는 클래스를 만들어 사용하는 방법] 

Score.java는 클래스, 큰 틀  

new Score();는 객체, Object, 틀 안에 들어가는 데이터

 

별개의 클래스에서 이용해 사용하지만 다른 클래스에서 데이터를 가져오는 것은 보안상의 문제로 좋지는 않다. 

그렇기때문에 접근지정자 public, private  private을 사용한다. 

 

private은 멤버변수만 사용할 수 있다. 멤버변수는 항상 private하게

클래스 Score 안에 접근지정자가 private인 멤버변수들.

접근지정자 pulic에서 private으로 바꾸면 다른 클래스에서 데이터를 가져갈 수 없다. 

멤버변수를 private으로 설정하면 에러가 나는 것을 볼 수 있다.

그렇다면 정의해둔 클래스어떻게 접근? 멤버 메소드는 public으로 설정한다! 

 

 

[메소드] 

- 하나의 기능을 수행하기 위해 실행문을 갖는 작은 코드 단위 

- 하나의 메소드는 하나의 일만 하도록 설계해야 한다. 

- 특정 클래스 안에 정의된 메소드를 멤버 메소드라고 한다. (클래스 ⊃ 멤버 메소드   멤버 변수) 

- 다른 언어에서 메소드를 함수(function)이라고 부른다. 

- 메소드는 정의를 하고, 호출을 해서 실행한다. 

- 메소드를 호출하면 프로그램의 흐름이 해당 메소드 쪽으로 이동한다. 일반적 위에서 아래로 순차적으로 진행되지만 메소드를 만나면 해당 메소드로 이동(제어이동)해서 데이터를 실행하다가 return을 만나면 다시 되돌아온다. 빈 손으로 돌아오지 않고 값을 가지고 올 수 있음. 이때 사용하는 것이 [return 데이터]

 

 

- 메소드는 실행이 끝나면 호출했던 곳으로 돌아간다. 되돌아갈 때 하나의 return 값을 가져갈 수 있다. 물론 없을 수도 있다.  

- 가져갈 값이 없으면 리턴타입을 void(값 없음, 무치)하고, return문을 생략할 수 있다.  

 

 

 

1) 메소드 정의하는 방법: [ ] <- 생략가능 

더보기

[접근지정자] [키워드] 리턴타입 메소드명(매개변수 선언){

      실행문들; 

     

      [retrun 데이터]

}

 

ex)

[접근지정자] [키워드] 리턴타입 메소드명(매개변수 선언)

public          static     void      main(String[] args) 

 

return은 메인 메소드를 끝낼 용도..였다.. ← 내가 잘못 알고 있었던 부분, return은 메인 메소드를 끝낼 용도가 아니라 메소드 실행이 끝나면 자기자신을 호출한 곳으로 가지고 갈 데이터가 있으면 값과 함께 돌아가고 void와 같이 가져갈 값이 없는 경우도 있다. 

 

모든 메소드는 클래스 안에 넣어야 한다. 

 

 

 

2) 호출하기, 모든 메소드는 호출해서 사용한다. 

호출 방법 : 참조변수명(레퍼런스변수명).메소드명();

메소드 정의를 보면  void/int에서 값을 다룰지 아닐지 알 수 있다. 

→ void는 (값 없음, 무치)을 의미하고, return문을 생략할 수 있다. int/String/char/혹은 객체라면 return 값으로 그 데이터타입의 값을 리턴한다. 

 

 

ex) 메소드 호출의 예

scanner.nextInx();

rand.nextInt();

m.output();

m.output();// 메소드 호출을 하지 않으면 실행되지 않는다. 

 

 

[class MyMethod]

[class MyMethodTest]

[class MyMethod]의 메소드를 사용하기 위해선 [class MyMethodTest]에서 MyMethod객체를 생성해야 한다.

이후 메소드의 호출까지 해줘야 한다 메소드를 사용할 수 있다.  

 

 

메소드 add의 경우,

더보기

 

public int add(int a, int b) {

int result = a + b;

return result; 

}

위처럼 이렇게 int a,b 대입하지 말고

이렇게! 해야함. m.add(15,63);만으로 출력되지 않는다. 

 

위의 사진을 가지고 보자면 왼쪽은 MyMethod라는 클래스에 각각의 3개의 메소드가 생성되어있고, 오른쪽은 왼쪽의 MyMethod라는 클래스를 사용하기 위해 MyMethod m = new MyMethod();라는 객체를 생성하고 m.output(); (참조변수명.메소드명);과 같이 메소드를 호출하고 있다. 

 

int c = m.add(15,63);

System.out.println(c);

 

int c = m.add(5,7);와 비슷한 방식을 사용해본 적이 있다. 

ex) int value = scanner.nextInt();

 

 

 

 

[오후 수업] 

[메소드 연습]

 

[문제]

Calculator.java(메인메소드가 존재하지 않음) /CalculatorTest.java(메인메소드)

public int add(int ,int); //메소드 프로토타입

public int substract(int, int);

public int multiply(int, int);

public double divide(int, int)

 

[조금 어려운 문제]

public int mod(int, int); //앞의 숫자를 뒤의 숫자로 나누었을 때 나머지

mod(3,2)

public int power(int, int); //2, 3 거듭 제곱 2의 3승 //100, 300 너무 큰 값이 오지 않도록! 

power(3, 4) : 3의 4제곱 해라. 

 

 

<내가 한 거>

전혀 감이 안오는거 보니 전혀 모르겠다. 

뭐가 문제이지? 왜 불밭이지? 

왼쪽이 메소드 호출, 오른쪽이 메소드 정의 두 위치가 바뀌었어요^^ 

메인 메소드가 있는 경우는 메소드를 호출할 경우, 없는 경우는 메소드를 정의할 경우! 

 

<카피>

왜 똑같이 했는데 에러가 나지? 다시 해보기 

 

 

♠복습

-4월 25일 일요일 오후 11시에 끝. 이번 주말도 복습만 하다 끝났군.. 

반응형