04 Java의 기본 문법 이해 - 제어문과 배열
- 1차원 배열
- 배열의 특징
- 동일한 자료형만 묶어서 저장 가능
- 생성 시 크기를 지정, 이후 크기는 변경 불가
- 배열의 선언
- 자료형[] 변수명; ← (해당 방식을 많이 사용!)
- ex) int[] a;
- 자료형 변수명;
- ex) int a[];
- 자료형[] 변수명; ← (해당 방식을 많이 사용!)
- 배열의 객체 생성
- 객체 생성 시 개수가 지정되어야 함.
- 힙(Heap) 메모리에 생성
- 선언과 동시에 객체 생성 가능
- ex) int[] a = new int[3];
- 배열 객체의 값 대입 및 읽기
- 값 대입
- 참조변수명[인덱스] = 값;
- ex) a[0] = 1;
- 참조변수명[인덱스] = 값;
- 값 읽기
- 참조변수명[인덱스]
- ex) sout(a[0]); ⇒ 1 출력
- 참조변수명[인덱스]
- 값 대입
- 배열의 생성과 동시에 값 대입
- 자료형[] 참조변수명 = new 자료형[]{값, 값, …, 값}ㅣ
- ex) int[] a = new int[]{3, 4, 5};
- 자료형[] 참조변수명 = {값, 값, …, 값}; ← (해당 방식을 많이 사용!)
- ex) int[] a = {3, 4, 5};
- 위의 두 방법의 차이점
- 첫 번째 방법은 선언과 값의 대입이 분리 가능하고, 두 번째 방법 불가능하다. (new를 안했기 때문)
- 자료형[] 참조변수명 = new 자료형[]{값, 값, …, 값}ㅣ
- 배열 객체의 초기화
- 초기값을 부여하지 않는 경우 빈칸으로 존재
- 0이나 null은 읽기 가능하지만 초기값은 읽기 불가능
- 참조 자료형의 배열 특징
- 변수 복사 시 값이 아닌 위치가 복사된다.
- 기본자료형은 값의 복사
- 배열의 길이
- 배열변수명.length 사용
- 배열 데이터 읽기
- for-each 문 이용
- for(자료형 변수: 묶음참조자료형) { … }
- 예시
-
for (int num : arrNum1) { System.out.println(num); }
- for 문 이용
- 예시
-
for (int i = 0; i < arrNum1.length; i++) { System.out.println(arrNum1[i]); }
- Arrays.toString() 이용
- Array.toString(참조변수명)
- for-each 문 이용
- 배열의 정렬
- 오름차순
- Array.sort(참조변수명); 이용
- 내림차순
- Integer 타입으로 변경 후 Arrays.sort(참조변수명, Collections.reverseOrder());
- 오름차순
- 배열의 특징
- 2차원 배열
- 2차원(정방행렬) 배열
- 가로 세로 방향으로 정렬된 배열
- 2차원 배열의 선언
- 자료형[][] 변수명 ← (해당 방식을 많이 사용!)
- ex) int[][] a;
- 자료형 변수명[][]
- ex) int a[][];
- 자료형[] 변수명[]
- int[] a[];
- 자료형[][] 변수명 ← (해당 방식을 많이 사용!)
- 2차원 배열의 객체 생성
- 배열 객체의 생성 이후 값 대입
- 자료형[][] 참조변수명 = new 자료형[행의길이][열의길이];
- ex) int[][] a = new int[2][3];
- a[0][0] = 1;
- 자료형[][] 참조변수명 = new 자료형[행의길이][열의길이];
- 행과 열의 값을 따로 생성
- 자료형과 대입할 값만 입력
- 자료형[][] 참조변수명 = new 자료형[][] {{값, 값, 값}, {값, 값, 값}};
- ex) int[][] a = new int[][]{{1, 2, 3}, {4, 5, 6}};
- 자료형[][] 참조변수명 = new 자료형[][] {{값, 값, 값}, {값, 값, 값}};
- 대입할 값만 입력 ← (해당 방식을 많이 사용!)
- 자료형[][] 참조변수명 = {{값, 값, 값}, {값, 값, 값}};
- ex) int[][] a = {{1, 2, 3}, {4, 5, 6}};
- 자료형[][] 참조변수명 = {{값, 값, 값}, {값, 값, 값}};
- 배열 객체의 생성 이후 값 대입
- 2차원 배열의 길이
- 행의 길이
- 2차원배열.length
- 열의 길이
- 2차원배열[0].length
- 행의 길이
- 2차원 배열의 출력
- for 문 이용
- 예시
-
for (int i = 0; i < nums.length; i++) { for (int j = 0; j < nums[i].length; j++) { System.out.print(nums[i][j] + " "); } System.out.println(); }
- for-each 문 이용
- 예시
-
for(int[] m: a) { for(int n: m) { System.out.println(n); } }
- for 문 이용
- 2차원(정방행렬) 배열
05 OOP 이해 및 실습 - OOP 기본 학습
- 객체 지향 프로그래밍
- OOP (Object Oriented Programming)
- 부품 객체 먼저 만들고 이것들을 하나씩 조립해 프로그램을 만드는 기법
- 객체 (Object)
- 무리적으로 존재하는 것, 속성과 동작을 가지는 것
- 객체는 필드(속성)과 메소드(동작)로 구성된 객체로 모델링 가능
- 객체간의 관계
- 집합 관계
- 완성품과 부품의 관계
- 사용 관계
- 객체가 다른 객체를 사용하는 관계
- 상속 관계
- 종류 객체와 구체적인 사물 객체 관계
- 집합 관계
- 객체와 클래스
- 클래스에는 객체를 생성하기 위한 필드와 메소드가 정의되어 있다.
- 클래스로부터 만들어진 객체를 해당 클래스의 인스턴스(instance)라고 한다.
- 하나의 클래스로부터 여러개의 인스턴스를 만들 수 있다.
- 클래스가 붕어빵 틀이라면, 객체는 만들어지는 붕어빵들..
- 객체(Object) = 클래스의 인스턴스(instance)
- 절자지향과 객체지향
- 절차지향형 프로그래밍
- 순서에 맞추어 단계적으로 실행하도록 명령어를 나열
- 객체지향형 프로그래밍
- 객체를 구성하고 객체 단위로 프로그래밍 (필드, 메서드)
- 절차지향형 프로그래밍
- 클래스 이름 규칙
- 필수
- 첫번째 글자는 숫자가 올 수 없다.
- $, _ 외 특수문자 사용 불가
- 자바 키워드 사용불가
- 관례
- 다른 단어의 첫글자는 대문자로 작성
- 한 소스 파일당 하나의 클래스 선언
- 필수
- new 연산자
- 객체 생성 역할, 생성 후 객체생성 번지 리턴
- new 클래스(); 의 형태
- 클래스()는 생성자를 호출하는 코드
- 생성된 객체는 Heap 메모리 영역에 생성
- 객체의 생성
- 클래스 변수 = new 클래스(); 형태
- 클래스의 구성 멤버
- 필드 (Field)
- 객체의 데이터가 저장되는 곳
- ex) int fieldName;
- 생성자 (Constructor)
- 객체 생성시 초기화 역할
- ex) ClassName() { … }
- 메소드 (Method)
- 객체의 동에 해당하는 실행 블록
- ex) void methodName() { … }
- 필드 (Field)
- static 예약어
- 객체 생성없이 사용할 정적 변수(객체), 함수를 지정할 때 사용
- ex) static int a = 100;
- static void make() { … }
- static 변수,함수는 new 인스턴스를 생성하지 않고 클래스 이름으로 바로 함수나 멤버변수 사용 가능
- ex) 클래스이름.메서드이름();
- 전역 변수로 클래스 가져올 수 있다. (메인 위 public static 클래스 클래스변수; 작성)
- 프로그램 구동시 고정된 메모리 번지에 들어가고, 프로그램 종료시까지 변경되지 않는다.
- 사용 이유
- 시작점(Entry point)를 지정할 때 사용
- 중요한 데이터를 안정적으로 저장할 때 주로 사용
- 자주 사용하는 유틸성 클래스에 지정
- 객체 생성없이 사용할 정적 변수(객체), 함수를 지정할 때 사용
- void 예약어
- 메서드를 생성할 때 return 값이 없는 경우 void 메서드이름() {…} 형식으로 사용
- 만약 return 값이 있다면 void 대신 return 하는 값의 데이터 타입을 적어주기
- this
- this() 메서드
- 자기 클래스 내부의 다른 생성자를 호출
- 생성자 내부에서만 사용가능
- 중괄호 안의 첫 줄에 위치해야함
- .this
- 자기 클래스 내부의 멤버변수 호출할 때 사용
- 전역변수를 호출할 때 사용
- ex) this.변수 = 값;
- static 메서드 내에서는 this 사용 불가
- this() 메서드
- 메서드의 구조
- 접근지정자 객체생성없이사용 리턴타입 메서드이름 (매개변수) { 메서드 내용 }
- ex) public static int sum(int a, int b) { … }
- 접근지정자 객체생성없이사용 리턴타입 메서드이름 (매개변수) { 메서드 내용 }
- 메서드 오버로딩
- 메서드의 이름이 같지만 매개변수의 데이터 타입과 개수를 다르게 함으로써 함수의 기능을 확장하는 것
- 접근 제어자 (Access Modifier)
- public
- 동일 패키지의 모든 클래스와 다른 패키지의 모든 클래스에서 사용 가능
- protected
- 동일 패키지의 모든 클래스와 다른 패키지의 자식 클래스에서 사용 가능
- default
- 동일 패키지의 모든 클래스에서 사용 가능
- private
- 동일 클래스에서 사용 가능 (캡슐화)
- Getter/Setter 함수를 통하여 접근하도록 허용
- public
- Getter/Setter
- Getter
- private 필드의 값을 리턴하는 역할
- getFieldname() 형식
- Setter
- 외부에서 주어진 값을 필드 값으로 수정
- setFieldName(타입변수) 형식
- Getter
- 싱글톤 객체 (Singleton pattern)
- 프로그램 안에서 유일한 클래스 객체
- new를 사용하여 여러개의 객체를 찍어낼 수 있지만 모두 주소값이 같은 객체를 만들어 낸다.
- 유일한 객체가 필요한 이유는 유일한 정보를 저장하기 위함이다.
- 싱글톤 생성
- 예시
-
class SingletonClass { private static SingletonClass singleton; public static SingletonClass getInstance() { if (singleton == null) { singleton = new SingletonClass(); } return singleton; } } // 메인 영역(psvm) SingletonClass single1 = SingletonClass.getInstance(); SingletonClass single2 = SingletonClass.getInstance(); // 다른 객체 두개를 만들었지만 주소값은 같다. System.out.println(single1); System.out.println(single2);
'교육 (Today I Learned) > Hanaro' 카테고리의 다른 글
[Hanaro] 41일차 / Java (API Method, Exception, Thread, I/O) (0) | 2024.03.15 |
---|---|
[Hanaro] 40일차 / Java (생성자, abstract, interface) (0) | 2024.03.13 |
[Hanaro] 38일차 / Java (제어문) (0) | 2024.03.12 |
[Hanaro] 37일차 / Java (연산자, Scanner) (0) | 2024.03.09 |
[Hanaro] 36일차 / Java (출력문, 변수와 자료형, 형변환, String) (0) | 2024.03.08 |