JAVA 기초 (1)

로쿠's avatar
Sep 25, 2024
JAVA 기초 (1)

1. 왜 자바 객체 지향 프로그래밍 언어를 사용하는가?

 
(주로 작업할 때)대규모 소프트웨어
  • 코드 재사용성
  • 모듈화
  • 확장성과 유연성
  • 추상화를 통한 복잡도 관리
  • 유지보수
등을 해줘야 하는데 이를 캡슐화,상속,다형성을 통하여 할 수 있다.
*문법보다는 왜 쓰이는 지에 대해 본질을 이해하면 spring 까지도 편하게 이해할 수 있다.

2. 클래스가 필요한 이유?

 
String student1Name = "학생1"; int student1Age = 15; int student1Grade = 90; String student2Name = "학생2"; int student2Age = 16; int student2Grade = 85; System.out.println("이름 : " + student1Name + " 나이 : " + student1Age + " 성적 : " + student1Grade); System.out.println("이름 : " + student2Name + " 나이 : " + student2Age + " 성적 : " + student2Grade);
이렇게 만들어주면 학생이 늘어날 때마다 변수를 새로 추가해줘야 한다. 출력 코드 또한 마찬가지.
 
+) 같은 데이터 타입을 하나로 묶기 위해 배열 사용하여 코드 정리
String[] studentNames = {"학생1","학생2"}; int[] studentAges = {15,16}; int[] studentGrades = {90,85}; for(int i = 0; i<studentNames.length; i++) { System.out.println("이름 : " + studentNames[i] + " 나이 : " + studentAges[i] + " 성적 : " + studentGrades[i]);
 
코드 배열은 최소화했으나 데이터를 변경할 때 실수를 해서는 안된다. like 학생 2번을 지우려면 각각 names, ages, grades 배열마다 학생2의 요소를 찾아서 정확하게 지워줘야 한다.
즉, 한 학생 변경시 3개의 배열을 변경해줘야 한다.
= 관리하기 쉽지 않기 때문에 하나의 정보로 묶는 것이 편한데 그게 바로 클래스다.

2-1 클래스도입

 
package class1; public class Student { String name; int age; int grade; }
학생 클래스 내부에 이름, 나이, 성적 변수를 가진다.
 
학생이라는 개념 안에 이름, 나이, 성적을 가짐 = 이렇게 정의한 변수들을 멤버 변수,필드(자바에서는 두 개가 같은 표현)라고 한다. = 클래스에 소속된 변수
package class1; public class ClassStart2 { public static void main(String[] args) { Student student1; student1 = new Student(); // 학생을 실제 메모리에 만든다. student1.name = "학생1"; student1.age = 15; student1.grade = 90; Student student2 = new Student(); student2.name = "학생2"; student2.age = 16; student2.grade = 85; System.out.println("이름 : " + student1.name + " 나이 : " + student1.age + " 성적 : " + student1.grade); System.out.println("이름 : " + student2.name + " 나이 : " + student2.age + " 성적 : " + student2.grade); } }
 
클래스는 대문자로 시작하고, 낙타 표기법을 사용 변수는 소문자로 시작

2-2. 클래스와 사용자 정의 타입

 
타입은 데이터의 종류나 형태를 나타낸다. int 라고 하면 정수 타입 String 이라고 하면 문자 타입. 학생(student) 라는 타입을 만들면 되지 않을까? 학생을 관리하는 타입 = Student 클래스 = 설계도 설계도를 이용하여 실제 메모리에 만들어진 실체를 객체 or 인스턴스 라고 한다. 클래스를 통하여 사용자가 원하는 종류의 데이터 타입을 마음껏 정의할 수 있다.
 
  • 변수 선언 Student student1 : Student 변수 선언 : Student 타입을 받을 수 있는 변수를 선언 like int 정수, String 문자를 받을 수 있듯이 Student 는 Student 타입의 객체(인스턴스)를 받을 수 있다.
  • 객체 생성 객체를 사용하려면 먼저 설계도인 클래스를 기반으로 객체(인스턴스)를 생성해야 한다. student1 = new Student()
    • new Student() : new 는 새로 생성한다는 뜻. new Student는 Student 클래스 정보를 기반으로 새로운 객체를 생성하라는 뜻. => 메모리에 실제로 Studnet 객체(인스턴스)를 생성한다. 객체를 생성할 때는 new 클래스명() 을 사용하면 된다. Student 클래스는 String name, int age, int grade 멤버 변수를 가지고 있다. 이 변수를 사용하는 데 필요한 메모리 공간까지 함께 확보
  • 참조 값 보관 객체를 생성하면 자바는 메모리 어딘가에 있는 이 객체에 접근할 수 있는 참조 값(주소)을 반환한다. = 메모리에 생성된 게 어딨는지 모르기 때문에, 만들 때 주소를 반환해준다. new 키워드를 통해 객체가 생성되고 나면, 참조 값을 반환한다. 선언한 변수인 Student student1 에 생성된 객체의 참조 값을 보관하게 된다. = 이 변수를 통하여 객체에 접근 할 수 있다. like student1 변수를 통해 메모리에 있는 실제 객체를 접근하고 사용할 수 있다.
*참조 값을 변수에 보관해야 하는 이유? new Student() 코드 자체는 이름이 없다. 단순하게 Studennt 클래스를 기반으로 메모리에 실제 객체를 만드는 것이다. 그래서 생성한 객체에 접근할 수 있는 방법이 필요하다. = 집을 샀는데 어딘지 알려주지 않는 격
 
Share article