-
TIL #6 - 배열 활용 (2)프로그래밍/TIL(국비과정) 2020. 4. 1. 20:18
# list vs set vs map
자바에서는 여러가지 '무리' 를 만드는 방법들이 있다.
무리란, 똑같은 데이터타입이 모여있는 것이고 Collection이라고도 한다.
1) list
배열과 가장 비슷하다.
입력한 순서대로 들어가게 된다
중복값 입력이 가능하다
예시)
0~9번의 중복값이 존재하는 int 배열 {1, 2, 3, 3, 1, 2, 4, 5, 6, 6}
2) set
내가 입력한 순서대로 들어가지 않을 수도 있다.
중복값은 허용되지 않는다
예시 ) 0~9번의 중복값을 허용하지 않는 int 배열
3) map
맵은 위의 list와 set과는 다르게 index 번호로 관리하는게 아니라 key-value 구조로써
우리가 key값을 주면 그것과 일치하는 value값을 준다.
중복된 키는 허용되지 않는다.
예시 ) {"1학년", 38}, {"2학년", 40}
# 학생 이름, 국어, 영어, 수학 점수 여러개 받기
과연 2세대 언어에서는 이 문제를 어떻게 해결했을까?
>>구조체(Struct)라는 것으로 해결했다.
구조체란 그들이 직접 데이터타입을 만드는데 그 데이터타입은 작은 데이터타입의 모음집이었다.
지금같은 경우에는 학생이란 커다란 데이터타입을 하나 만들어 그 안에 이름이라는 스트링, 국어점수 int, 수학점수 int, 영어점수 int를 가지고 있게 만든다.
C에서 구조체를 만드는 방법은 아래와 같다
typedef {
들어갈 데이터의 종류들
} 구조체 이름
하지만 자바에서는... 못만든다!
좀 더 자세하게 말하자면 다른 개념에 흡수되었다고 한다.
자바에서는 구조체와 해당 구조체가 가지고 있어야 할 기능을 다 합쳐서 '클래스' 라고 부른다.
필드와 메소드로 구성되어 있는 클래스를 우리가 메소드 없이 필드만 만들어주면
구조체처럼 쓸 수 있지 않을까 하는 생각을 할 수도 있다.
Student.java
public class Student { // 여기저기서 써야하니까 public public String name; public int kor; public int math; public int eng; }
StructEx.java
import java.util.Scanner; // 구조체의 배열 public class StructEx { public static void main(String[] args) { Scanner scan = new Scanner(System.in); Student[] students = new Student[3]; for(int i = 0; i < students.length; i++) { // 연결할 주소를 가진 Student s를 하나 만들어준다 Student s = new Student(); System.out.print("이름 : "); String name = scan.next(); System.out.print("국어 : "); int kor = MyScanner.nextInt(scan); System.out.print("수학 : "); int math = MyScanner.nextInt(scan); System.out.print("영어 : "); int eng = MyScanner.nextInt(scan); // 입력받은 애들 s에 담아서 배열에 차례대로 넣어주면 된다. s.name = name; s.kor = kor; s.math = math; s.eng = eng; students[i] = s; // 이 배열안에 입력받은 정보들을 넣는다. } for(Student s : students) { System.out.printf("%s: %03d점\t %03d점\t %03d점\n", s.name, s.kor, s.math, s.eng); } scan.close(); } }
구조체 배열 만들기는 어렵지 않다.
일반 배열처럼 데이터타입[] 배열이름 = new 데이터타입[크기] 해주면 된다.
그렇다면 학생 구조체의 데이터타입은 Student가 되는 것이다.
구조체 배열을 만들어 주고
배열에 값을 넣을 땐 모든 요소에 대해 new Student를 실행시켜줘야한다.
상당히 귀찮은 작업이니 입력할 때 마다 임시로 s라는 Student 변수를 만들어
거기에 값을 넣고 나서 이후에 student[i]에 s를 넣어주자.
즉 연결할 주소를 가진 student 객체를 하나 만들어 부르는 것이다.
입력을 다 받으면 마지막에 students[i] = s; 로 s의 입력값들을 students 배열에 넣는다.
다른 클래스에서 사용할 때도 마찬가지로 객체를 생성해 메모리에 자리를 확보해주어야한다.
public class StructEx2 { public static void main(String[] args) { Student s = new Student(); s.name = "양아무개"; s.kor = 80; s.math = 100; s.eng = 30; System.out.println("이름 : " + s.name); System.out.println("국어점수 : " + s.kor); System.out.println("수학점수 : " + s.math); System.out.println("영어점수 : " + s.eng); } }
'프로그래밍 > TIL(국비과정)' 카테고리의 다른 글
TIL #7 - 로또 프로그램 (0) 2020.04.02 TIL #7 - 각종 출력, 입력, 조회 기능 (0) 2020.04.02 TIL #6 - 배열 활용 (1) (0) 2020.04.01 TIL #5 - 배열 (0) 2020.03.31 TIL #4 - 메소드, 배열 등 (0) 2020.03.30