반응형

출처: 여성시대 파손주의


가장 유명한 곳이 아닌 다양한 지역을 선택함




안정적인 재료 수급과 제품 맛 구현 등으로
제품출시까지 1년 정도 걸린다고 함

728x90
반응형

 

안녕하세요! 제 개발 블로그에 오신 것을 환영합니다. 🧑‍💻 지난번에는 클래스와 객체, 인스턴스에 대해 붕어빵을 굽는 것에 비유해서 재미있게 알아봤었죠.
오늘은 이렇게 만든 객체들을 더 효율적으로 관리하고 활용하는 방법에 대해 이야기해 보려고 합니다.
바로 배열(Array)의 도입인데요, 배열이 객체와 만나면 얼마나 강력해지는지 함께 알아볼까요?

 

객체, 그런데 이제 여러 개를 다루는 방법 📦

우리가 학생 데이터(Student 클래스)를 다루면서 student1, student2 변수를 따로 선언해 관리했어요. 각각의 학생 데이터를 구조적으로 다룰 수 있게 된 것은 좋았지만, 학생 수가 100명이 되면 student100까지 변수를 만들어야 하고, 출력 코드도 100줄을 작성해야 하는 문제가 생기죠.

 

비효율적인 코드의 예시:

// 학생 100명을 선언하고 출력하려면..
Student student1 = new Student();
// ...
Student student100 = new Student();

// 출력 코드도 100줄!
System.out.println("이름:" + student1.name + " 나이:" + student1.age + " 성적:" + student1.grade);
// ...
System.out.println("이름:" + student100.name + " 나이:" + student100.age + " 성적:" + student100.grade);

새로운 학생이 추가될 때마다 코드를 일일이 수정해야 하는 이 지루하고 비효율적인 작업을 배열을 사용해서 혁신적으로 개선할 수 있습니다. 마치 여러 개의 상자를 한 줄로 묶어서 한 번에 관리하는 것처럼요


배열, 객체를 담는 마법의 상자 🎁

배열은 같은 타입의 데이터를 한데 모아서 관리하는 데 최적화된 자료구조입니다. 이전에는 int[]나 String[]처럼 기본 자료형의 배열만 주로 사용했지만, 우리가 직접 정의한 Student 클래스도 하나의 타입이므로 당연히 Student[] 배열을 만들 수 있습니다.

배열에 객체 보관하기:

Student student1 = new Student();
// student1 객체 정보 설정...
Student student2 = new Student();
// student2 객체 정보 설정...

// Student 객체를 담을 수 있는 크기 2짜리 배열 생성
Student[] students = new Student[2];

// 배열에 객체의 '참조값'을 대입
students[0] = student1;
students[1] = student2;

중요한 개념: 여기서 배열에 들어가는 것은 student1이라는 객체 자체가 아니라, 객체의 위치를 가리키는 '참조값(주소)'이라는 사실을 꼭 기억해야 해요. 자바에서 변수 대입(=)은 항상 변수에 들어있는 값을 복사하는데, 객체 변수는 참조값을 가지고 있기 때문에, 이 참조값이 배열에 복사되어 저장됩니다.

위 그림처럼 student1 변수와 students[0] 변수는 모두 같은 x001이라는 주소를 공유하게 되는 거죠. 마찬가지로 student2와 students[1]도 같은 x002 주소를 가리킵니다. 이제 students[0]와 students[1]을 통해 각각 학생1과 학생2 객체에 접근할 수 있게 된 거예요!


배열을 사용한 코드 리팩토링 ✨

배열을 도입한 덕분에 코드가 훨씬 간결하게 변했습니다. 이제 학생이 100명이든 1,000명이든 for문 하나로 모든 학생의 정보를 출력할 수 있어요.

개선된 코드 예시:

// 학생 객체들을 한 번에 배열로 초기화!
Student[] students = new Student[]{student1, student2};

// for문으로 배열의 모든 학생 정보 출력
for (int i = 0; i < students.length; i++) {
    // 배열의 각 인덱스에 접근하고, 다시 .으로 객체의 멤버 변수에 접근
    System.out.println("이름:" + students[i].name + " 나이:" + students[i].age + " 성적:" + students[i].grade);
}

이 코드는 학생이 몇 명인지에 관계없이 students.length만큼 반복하기 때문에, 학생이 추가되어도 출력 코드를 수정할 필요가 없습니다. 아주 깔끔하고 효율적이죠!


배열 초기화: 텅 빈 상자 vs. 채워진 상자 🎁

배열을 만드는 방법은 크게 두 가지로 나눌 수 있어요.

  1. 크기만 지정하고 만들기:
    • int[] numbers = new int[3];
    • 이 코드는 정수(int)를 3개 담을 수 있는 상자를 만들겠다는 뜻이에요. 상자는 만들어졌지만, 안에는 아무것도 넣지 않았죠. 이렇게 만들면 각 칸은 기본값으로 초기화돼요. 정수(int)는 0, 실수(double)는 0.0, 불리언(boolean)은 false, 그리고 객체 타입은 null로 초기화됩니다. null은 '값이 없다'는 특별한 상태를 의미해요.
  2. 크기와 값 모두 지정해서 만들기:
    • String[] fruits = {"사과", "바나나", "딸기"};
    • 이 방법은 배열을 만들면서 동시에 값을 채워 넣는 거예요. 이렇게 하면 자바가 알아서 배열의 크기를 3으로 지정해 줍니다. 배열에 어떤 값이 들어갈지 미리 알고 있을 때 아주 편리해요.

배열의 크기: 한 번 정하면 끝! 📏

배열의 가장 큰 특징 중 하나는 '크기가 고정되어 있다'는 점이에요. int[] numbers = new int[3];처럼 한 번 크기를 3으로 정하면, 나중에 4번째 값을 추가하고 싶어도 불가능해요.

만약 배열의 크기를 늘리거나 줄여야 한다면, 다음과 같은 과정을 거쳐야 해요.

  1. 새로운, 더 큰 배열을 만든다.
  2. 기존 배열의 값들을 새로운 배열로 모두 복사한다.
  3. 새로운 배열에 추가하고 싶은 값을 넣는다.

이 과정은 생각보다 번거롭고 메모리 사용 측면에서도 효율적이지 않아요. 그래서 만약 크기가 변할 수 있는 데이터를 다루고 싶다면, 나중에 배울 ArrayList 같은 다른 자료구조를 사용하는 것이 더 좋아요.


배열과 메모리: 상자와 이름표 🧠

우리가 int[] numbers를 만들면, 변수 numbers는 배열이 담긴 메모리 주소(참조값)를 가리켜요. 그리고 그 주소에 실제 배열 상자가 만들어지는 거죠.

이것은 객체와 마찬가지로, numbers에 = (대입)을 할 때도 참조값만 복사된다는 뜻이에요.

 

int[] a = {1, 2, 3};
int[] b = a; // a의 참조값을 b에 복사

b[0] = 10; // b 배열의 0번째 값을 10으로 변경

System.out.println(a[0]); // 출력 결과는?

위 코드의 출력 결과는 10이 돼요. a와 b가 같은 배열 상자를 가리키고 있기 때문에, b를 통해 값을 바꾸면 a를 통해서도 바뀐 값을 확인할 수 있는 거죠. 처음에는 헷갈릴 수 있지만, 이 '참조값' 개념을 잘 이해하면 객체와 배열을 다루는 데 큰 도움이 될 거예요.

 

한 걸음 더 나아가기: 향상된 for문 🚀

위 for문도 좋지만, 자바에는 배열의 요소를 하나씩 순회할 때 더 편리한 향상된 for문(Enhanced For Loop)이 있습니다.

향상된 for문으로 코드 더 간결하게 만들기:

for (Student s : students) {
    // students 배열의 각 요소를 하나씩 꺼내 s 변수에 담아 사용
    System.out.println("이름:" + s.name + " 나이:" + s.age + " 성적:" + s.grade);
}

이 코드는 "students 배열의 각 Student 타입 요소를 하나씩 꺼내서 s라는 변수에 넣어라"는 의미입니다.
students[i]처럼 인덱스를 직접 사용하는 번거로움이 사라져 코드가 훨씬 읽기 쉬워졌죠.

최종 정리: 객체 + 배열 = 시너지! 🤝

오늘 배운 내용을 간단히 정리해 볼까요?

  • 객체: 학생 한 명의 데이터를 구조적으로 묶는 개별 관리 단위
  • 배열: 여러 객체를 한 번에 묶어서 다루는 집단 관리 단위

이 둘을 함께 사용하면, 데이터를 구조적으로 잘 정리하면서도 확장성 있는 코드를 작성할 수 있게 됩니다.

 

 

 

이 링크를 통해 구매하시면 제가 수익을 받을 수 있어요. 🤗

https://inf.run/b1SMF

 

 

 

728x90
반응형

출처: https://theqoo.net/square/3897381881

 

 

 

 

솥뚜껑삼겹살+곱창에

 

가운데 돼지기름으로 김치 구워먹기...

 

그리고 볶음밥 후식까지 야무지게 제대로 배워감...

 

 

 

728x90
반응형

출처: https://www.dmitory.com/issue/379700385


88,000원
진짜 잘 뽑음

품절이래..

728x90
반응형

 

김영한의 '실전 JAVA' 1강: 클래스, 다시 첫 걸음 떼기 👣

 

오랜만에 책상에 앉아 코드를 다시 마주합니다. 비전공자 직장인으로서 업무와는 거리가 멀었던 자바를 다시 시작하며, 김영한 님의 '실전 자바' 강의를 택했습니다. 첫 강의의 주제는 자바의 가장 기본적인 구성 요소인 클래스(Class)였습니다.
잊고 지냈던 개념들을 다시 복기하며, 단순한 지식을 넘어 실제 프로그램을 설계하는 관점을 다시 한번 복기해보도록 하겠습니다.

 


 

1. 클래스: 현실 세계의 '설계도'와 '틀' 📐

클래스를 해당 강의에선 이해하기 쉽게 두 가지 비유로 설명합니다.

  • 현실 세계의 '설계도': 우리가 집을 짓거나 자동차를 만들 때, 먼저 설계도를 그립니다. 이 설계도에는 어떤 재료를 쓸지, 어떤 구조로 만들지 등 모든 정보가 담겨 있죠. 자바에서 클래스가 바로 이 설계도와 같은 역할을 합니다. Car라는 클래스에는 '색상', '속도'와 같은 자동차의 속성(변수)과 '달린다', '멈춘다'와 같은 기능(메서드)이 정의됩니다. 이 설계도만 있으면, 수많은 자동차를 동일한 형태로 찍어낼 수 있습니다.

  • 데이터를 담는 '틀': 클래스는 단순한 기능의 나열이 아닌, 서로 관련된 데이터와 기능을 한데 묶어 관리하는 틀이기도 합니다. 예를 들어, 회원 정보를 관리한다고 가정해 봅시다. 회원의 '이름', '나이', '이메일'은 모두 밀접하게 연관된 데이터입니다. 이 데이터들을 따로따로 관리하면 매우 비효율적이죠. Member라는 클래스를 만들어 이 세 가지 정보를 한곳에 담아두면, 훨씬 간결하고 체계적으로 데이터를 다룰 수 있습니다.

 

2. 객체와 인스턴스, 이제 헷갈리지 마세요! 🧐

자바를 처음 배울 때 가장 헷갈리는 개념이 바로 객체(Object)와 인스턴스(Instance)입니다.

  • 객체(Object): 클래스로부터 만들어진 모든 대상을 가리키는 포괄적이고 일반적인 용어입니다.
    '자동차'라는 추상적인 개념 자체를 의미한다고 볼 수 있습니다.
  • 인스턴스(Instance): 특정 클래스로부터 생성된 구체적인 실체를 의미합니다. 예를 들어, new Car()를 통해 만들어진 '빨간색 스포츠카'는 'Car 클래스의 인스턴스'가 됩니다. 인스턴스는 메모리에 실제로 할당된 실체를 의미하며, 인스턴스마다 고유한 값을 가질 수 있습니다.

Car car1 = new Car();라는 코드는 Car라는 설계도(클래스)를 바탕으로 new 키워드를 사용해 메모리에 실제 자동차(인스턴스)를 생성하고, 그 인스턴스를 car1이라는 변수가 가리키도록 하는 과정입니다. 여기서 car1은 참조 변수이며, 실제 객체는 메모리의 어딘가에 저장되어 있습니다. 마치 '내 차가 주차된 주차장 번호'를 기억하고 있는 것과 같습니다.


3. 변수의 종류: '멤버 변수' vs. '지역 변수' 🗺️

자바에서는 변수가 선언된 위치에 따라 그 성격이 완전히 달라집니다. 이 차이를 명확히 아는 것이 향후 발생할 오류를 줄이는 데 큰 도움이 됩니다.

  • 멤버 변수 (Member Variable): 클래스 내부에 선언된 변수로, 클래스의 속성을 담당합니다. 이 변수들은 클래스 내부의 모든 메서드에서 접근할 수 있습니다. 가장 중요한 특징은 자동으로 초기화된다는 점입니다. int 타입은 0, boolean 타입은 false, 객체 타입은 null 등으로 기본값이 할당되죠.
  • 지역 변수 (Local Variable): 메서드 내부에 선언된 변수로, 해당 메서드 안에서만 유효합니다. 메서드 호출이 끝나면 메모리에서 사라집니다. 가장 중요한 특징은 반드시 직접 초기화해야만 사용할 수 있다는 점입니다. 초기화하지 않고 사용하려 들면 컴파일 에러가 발생합니다.

지역 변수는 메서드가 끝나는 즉시 메모리에서 사라지므로, 사용하려는 시점에 값이 존재하지 않을 수 있다. 따라서 반드시 초기화해야합니다. 이 차이를 인지하는 것만으로도 실수를 방지할 수 있습니다.

 


 

실제로 코드로 만들어보기 💻

 

이제 이 개념들을 코드로 어떻게 구현하는지 살펴볼게요. Student라는 클래스를 만들고, 학생 객체들을 생성해볼까요?

1. 변수 선언: 붕어빵을 담을 그릇 만들기

Student student1;

이 코드는 student1이라는 변수(그릇)를 만들겠다는 뜻이에요. 이 그릇에는 Student 타입의 객체만 담을 수 있어요. 마치 int 변수가 정수만 담는 것처럼요.

2. 객체 생성: 붕어빵 만들기

student1 = new Student();

이 부분이 바로 붕어빵 틀(Student 클래스)로 실제 붕어빵(객체)을 만드는 과정이에요. new 키워드는 "새로운 객체를 만들어!"라고 명령하는 마법의 주문이랍니다. 이렇게 객체를 만들면, 자바는 그 객체가 메모리 어디에 있는지 알려주는 참조값(주소)을 반환해줘요.

3. 참조값 보관: 붕어빵에 이름표 붙이기

Student student1 = new Student();

이 코드를 한 번에 실행하면, new Student()로 만들어진 객체의 주소값(x001이라고 가정해볼게요)이 student1 변수에 저장돼요. 이제 student1이라는 이름으로 이 주소에 있는 객체에 접근할 수 있게 된 거죠.

4. 객체 사용: 붕어빵에 속성 채우기

student1.name = "학생1"; student1.age = 15; student1.grade = 90;

이제 student1 변수에 있는 주소값으로 실제 객체에 찾아가서 값을 채워 넣을 수 있어요. 변수 이름 뒤에 . (점)을 찍으면 해당 객체의 속성에 접근할 수 있답니다.
마치 student1이라는 이름표를 보고, '이 붕어빵의 속 재료는 팥이야!'라고 정해주는 것과 같아요.


메모리에서 객체 들여다보기 🧠

우리가 만든 객체들이 메모리에서 어떻게 저장되는지 궁금하시죠?

Student student1 = new Student(); Student student2 = new Student();

위 코드를 실행하면, 메모리에는 두 개의 독립적인 Student 객체가 만들어져요. student1은 x001이라는 주소에,
student2는 x002라는 또 다른 주소에 저장되죠. 서로 주소값이 다르기 때문에 student1에 값을 넣는다고 student2의 값이 바뀌지 않아요.

코드로 직접 확인해볼까요? System.out.println(student1); System.out.println(student2);

출력 결과: class1.Student@7a81197d
                class1.Student@2f2c9b19

보이시나요? @ 뒤에 있는 이상한 숫자들이 바로 객체의 고유한 주소값이에요. 이렇게 주소값이 다르기 때문에 두 객체는 서로 다른 존재로 인식된답니다.


정리: 핵심만 콕! 🎯

오늘 배운 내용을 한 문장으로 정리해 드릴게요.

클래스는 객체를 만들기 위한 설계도이고, 이 설계도를 기반으로 실제로 만들어진 실체를 객체 또는 인스턴스라고 부릅니다.


첫걸음의 중요성: 다시 시작하는 의미 ✨

바쁜 업무에 치이다 보면 자바의 기초 개념들은 쉽게 잊혀집니다. 하지만 1강을 들으며 다시 한번 깨달았습니다. 탄탄한 기초 위에 견고한 건물이 세워지듯, 명확한 기초 개념이 있어야 복잡한 프로그램을 만들 수 있다는 것을요. 클래스에 대한 깊이 있는 이해는 단순히 코딩을 넘어, 객체지향이라는 거대한 설계를 이해할 수 있는 첫걸음입니다.

이 작은 공부가 결국 비즈니스 문제를 해결하고, 반복적인 업무를 자동화하는 데 필요한 논리적 사고의 밑거름이 될 것입니다.
저처럼 비전공자이신 분들도 김영한 님의 강의를 통해 자바의 세계를 다시 만나보시길 강력히 추천합니다.

 

 

 

 

 

이 링크를 통해 구매하시면 제가 수익을 받을 수 있어요. 🤗

https://inf.run/b1SMF

728x90
반응형

출처: https://www.dmitory.com/issue/378902267




약 25년전에 데뷔해서 아직도 히트작 생성해냄
드덕들한테는 유명한 장태유임
특히 사극 잘함 근데 현대극도 잘함



https://cafe.daum.net/subdued20club/WU3B/1

사회성 떨어지는 댓 금지
문제시 내 말이 그냥 맞음

728x90

+ Recent posts