[정리] 배열
- 같은 데이터 타입의 데이터를 넣을 수 있는 변수가 여러 개 필요할 떄 사용
- 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시에 끝. 이번 주말도 복습만 하다 끝났군..
'개발자로 가는 길(국비지원과정) > 1. Java' 카테고리의 다른 글
[210426월] 객체지향 프로그래미의 특징, public과 private, setter와 getter (0) | 2021.04.25 |
---|---|
[질문] 5주차_주말 복습 (0) | 2021.04.24 |
[210422목] 2차원 배열 + 거품정렬 알고리즘 (0) | 2021.04.22 |
[210421수] 배열 Array (0) | 2021.04.21 |
[210420화] for문 (0) | 2021.04.20 |