728x90
반응형
반응형
모델 

 ✔  클래스를 역할에 따라 부르는 이름

현실 세계에서는 다양한 객체들이 존재하고, 그 객체들은 자신의 역할이 있는데, 역할이 정해져있다는 의미로
객체를 설계할 때는 모델을 만든다라고 합니다. 모델이라 함은 역할에 따라 전부 구분되어져 부르는 이름이라고 생각하면 됩니다.

💡  클래스 = 모델을 설계하는 도구

시작 클래스 (main)

DTO(Data Transfe Object), VO(Value Object) Model : 데이터를 담는 (이동) 모델 / 데이터를 하나로 수집하는 역할 !

  • DTO : 주로 데이터베이스로부터 데이터를 검색하거나 데이터를 저장하기 위해 사용됩니다.
  • DTO는 데이터를 저장하는 속성(멤버 변수)과 해당 데이터에 접근하기 위한 getter 및 setter 메서드를 가지고 있습니다.
  • DTO는 일반적으로 데이터베이스로부터 데이터를 검색하여 그 결과를 전달하거나, 클라이언트와 서버 간의 데이터 교환에 사용됩니다.
    주로 데이터베이스의 레코드나 특정 도메인 객체의 필드를 담고 있는 단순한 데이터 구조로 구성됩니다. DTO는 주로 읽기 전용이며, 데이터를 보관하고 전달하기 위한 목적으로 사용됩니다.

💡 DTO는 일반적으로 다음과 같은 특징을 가지고 있습니다

  1. 데이터 전달: DTO는 데이터를 전송하거나 전달하기 위한 목적으로 사용됩니다.
    예를 들어, 데이터베이스의 결과를 클라이언트에 전달하거나, 클라이언트에서 서버로 데이터를 전송할 때 DTO를 사용할 수 있습니다.
  2. 필드와 접근 메서드: DTO는 데이터 구조를 나타내기 위해 필드(field)를 가지고 있습니다. 일반적으로 필드는 데이터를 저장하거나 조회하는 용도로 사용됩니다.
    또한 필요에 따라 접근자(getter)와 설정자(setter) 메서드를 제공하여 필드에 접근할 수 있도록 합니다.
  3. 직렬화(Serialization): DTO는 데이터 전송을 위해 직렬화(serialization)될 수 있습니다.
    직렬화는 객체를 바이트 스트림 등의 형태로 변환하여 저장하거나 네트워크 상에서 전송할 수 있도록 하는 과정을 의미합니다. DTO는 주로 네트워크 통신이나 분산 시스템에서 사용되므로 직렬화가 필요할 수 있습니다.
  • DTO는 비즈니스 로직을 담지 않고, 순수한 데이터를 전달하는 목적으로 사용됩니다.
    따라서 DTO는 보통 속성(필드)과 그에 대한 접근자(getter)와 설정자(setter) 메서드를 가지는 간단한 데이터 구조로 구성됩니다. DTO는 데이터의 일관성과 효율성을 유지하며, 객체 간의 데이터 전달을 간편하게 만들어 줍니다.

 

 

 

 

DAO(Data Access Object) Model : 데이터를 처리(DB)를 하는 모델

- DAO : 데이터베이스에 데이터(VO, DTO)를 저장, 수정하거나 검색, 삭제를 하기 위해서 만들어지는 모델(클래스) 
   해당 역할을 하는것이 DAO 클래스 - CRUD 동작을 가지고 있는 클래스, 비즈니스 로직을 처리하는 클래스

   

     1) 수집된 데이터를 데이터 베이스에 저장 : insert 수정 : update
     2) 데이터베이스에 저장된 데이터를 검색 : select 삭제 : delete CRUD
         동작을 통해 DB와 서로 데이터를 주고받을 수 있다

 

💡 SQL은 Structured Query Language (구조적 질의 언어)로 관계형 데이터베이스 시스템에서 자료를 관리 및 처리하기 위해 설계된 언어이다.

DAO를 만들 때 저장 , 수정, 검색, 삭제 기능을 만들 때 SQL 명령문을 이용해서 만들 수 있다. 명령문을 이용해 DB를 제어할 수 있다.
DAO는 "Data Access Object"의 약어로, 데이터베이스와의 상호작용을 담당하는 객체를 말합니다. DAO는 데이터베이스에 접근하여 데이터를 조회, 삽입, 수정, 삭제 등의 데이터 조작 작업을 수행하는 역할을 담당합니다.
DAO는 일반적으로 데이터베이스에 대한 접근을 추상화하고, 비즈니스 로직과 데이터베이스 로직의 분리를 지원합니다.
이를 통해 애플리케이션의 유지 보수성과 확장성을 향상시킬 수 있습니다.
DAO는 데이터베이스에 직접적인 접근을 처리하므로, 데이터베이스 종류에 따라 다른 DAO 구현체를 작성해야 할 수도 있습니다.
일반적으로 DAO는 CRUD(Create, Read, Update, Delete) 작업을 수행하는 메서드를 포함합니다.
이를 통해 데이터베이스와 상호작용하면서 애플리케이션의 데이터 관리를 담당합니다.
DAO는 데이터베이스 연결, SQL 문 실행, 결과 처리 등을 담당하며, 비즈니스 로직에서는 DAO를 사용하여 데이터를 조작하고 처리합니다.

 


        import java.util.Scanner;

        public class CarInsertTest {
            public static void main(String[] args) {
                //자동차 정보를 키보드로부터 입력을 받아서 데이터 베이스에 저장을 해라.
                Scanner scan = new Scanner(System.in);
                System.out.print("자동차의 일련번호를 입력해주세요 = ");
                int carSN = scan.nextInt();
                scan.nextLine();

                System.out.print("자동차의 이름을 입력해주세요 = ");
                String carName = scan.nextLine();

                System.out.print("자동차의 가격을 입력해주세요 = ");
                int carPrice = scan.nextInt();
                scan.nextLine();

                System.out.print("자동차의 소유자의 이름을 입력해주세요 = ");
                String carOwner = scan.nextLine();

                System.out.print("자동차의 연식을 입력해주세요 = ");
                int carYear = scan.nextInt();

                scan.nextLine();

                System.out.print("자동차의 타입을 입력해주세요 = ");
                String carFlue = scan.nextLine();


                CarDTO car = new CarDTO();
                car.carSN = carSN;
                car.carName = carName;
                car.carPrice = carPrice;
                car.carOwner = carOwner;
                car.carYear = carYear;
                car.carFlue = carFlue;

                CarDAO carDAO = new CarDAO();
                carDAO.carInsert(car);
                carDAO.carSelect();

            }

 

carDAO.carInsert(car)에서 매개변수로 car를 입력하는 이유는 carInsert() 메서드의 시그니처에 맞게 데이터를 전달하기 위해서입니다.
carInsert() 메서드는 CarDTO 객체를 매개변수로 받아서 해당 객체에 저장된 자동차 정보를 데이터베이스에 저장하는 역할을 수행합니다.
따라서 carDAO.carInsert(car)는 입력받은 자동차 정보를 car 객체에 저장한 후, car 객체를 carInsert() 메서드에 전달하여 데이터베이스에 저장합니다.
반면에 carDAO.carSelect()는 매개변수를 입력하지 않는 이유는 해당 메서드에서는 데이터베이스로부터 자동차 정보를 조회하는 기능만을 수행하기 때문입니다.
자동차 정보를 조회하는 데에는 별다른 매개변수가 필요하지 않기 때문에 carDAO.carSelect()처럼 매개변수를 입력하지 않습니다.

Utility Model : 도움(Utility)을 주는 모델

  • Utility : 반복적으로 사용해야 될 동작(기능)을 별도의 클래스로 만들어놓고 필요할 때 사용하는 클래스 / 꼭 필요한 것은 아니고, 필요하면 만들어서 사용하면 됩니다.

    Utility 모델은 다음과 같은 특징을 가지고 있습니다:
    1. 정적 메서드: Utility 클래스의 메서드는 일반적으로 정적(static)으로 선언됩니다. 이는 객체의 인스턴스 생성 없이 직접 클래스 이름을 통해 메서드에 접근할 수 있다는 의미입니다.
    2. 인스턴스화 불가능: Utility 클래스는 주로 유틸리티 함수를 제공하기 위한 목적으로 사용되므로, 인스턴스화할 필요가 없습니다. 따라서 일반적으로 생성자는 private으로 선언하여 인스턴스화를 방지합니다.
    3. 공통 기능 제공: Utility 클래스는 일반적으로 다양한 클래스나 모듈에서 공통으로 사용되는 기능들을 제공합니다. 예를 들어, 문자열 처리, 날짜 및 시간 계산, 파일 조작 등과 같은 작업을 수행할 수 있는 메서드들이 Utility 클래스에 포함될 수 있습니다.

  • Utility 모델의 주요 목적은 코드의 재사용성과 유지보수성을 향상시키는 것입니다. 반복적이고 공통적인 작업들을 유틸리티 함수로 추상화하여 중복 코드를 피하고, 코드를 모듈화하여 관리하기 쉽게 만듭니다.
    또한 Utility 클래스는 객체 지향 프로그래밍에서 정적 메서드를 통해 유틸리티 함수를 호출하기 때문에, 호출하는 코드가 간결해지고 사용하기 쉬워집니다.

  • 주의할 점은 Utility 클래스가 지나치게 많은 역할과 책임을 가지지 않도록 하는 것입니다.
    즉, 단일 책임 원칙을 지키기 위해 너무 많은 기능을 Utility 클래스에 넣지 않는 것이 좋습니다.
    작은 범위의 관련된 유틸리티 함수들을 포함하는 작은 클래스들을 만들고,
    필요한 유틸리티 함수를 필요한 곳에서 적절히 활용하는 것이 바람직합니다.
    Utility 모델은 주로 간단한 독립적인 메서드들의 집합으로 구성되며, 특정한 작업을 수행하기 위한 유틸리티(도구) 함수를 제공하는 클래스입니다.
728x90
반응형
금은모래 캠핑장

 

친구들과 이야기만 했던 캠핑을 처음으로 가본 날 😄
캠핑 스팟을 찾아 다양한 곳을 가본 친구들이 근교의 캠핑장 중에서도 여주에 금은모래 캠핑장을 추천해줘서 다녀왔다 

 

 

 

 

 

 

728x90
반응형

그동안 int, float, char , boolean 등 기본자료형 또는 사용자 정의 자료형이지만 자주 쓰이는 String 등을
중심으로 기본적인 구조를 공부했지만 이제 사용자 정의 자료형에 대해서 좀 더 학습해보겠습니다.

 

💡 클래스 = 모델을 설계하는 도구

 

 

 

 

 

사용자 정의 자료형의 이해

각각의 데이터에 알맞은 타입을 작성해줌으로써 변수를 선언할 수 있음을 명심해야합니다. 선언이 되지 않으면,
메모리에 만들어 질 수 없기 때문에 자료형이 중요합니다.
사용자 정의 자료형은 class 라는 도구로 설계가 가능(모델링하는 도구)합니다.
객체 (Object) : 기억공간 1개로 표현할 수 없고 , 기억공간 여러개를 모아놓은 구조체를 말합니다.
기억공간을 여러개로 표현할 수 있는 것이 객체입니다. 배열과는 다르게 기억공간 안에 담기는 데이터들의 타입이 다른 이질적인 구조입니다.

DTO(Data Transfer Object) : 데이터 전송을 위해 생성되는 객체 로직을 가지지 않는 순수한 데이터 객체
(getter & setter 만 가진 클래스)

 

Q. 책이라는 데이터를 변수에 저장하기 위해서는 책이라는 자료형이 필요합니다.
제목 | 가격 | 출판사 | 저자 | 페이지수 | ISBN       →     BookDTO = 책;    자료형 변수 : BookDTO b;

객체지향 측면 : 현실세계에 있는 객체를 객체지향프로그램에서 사용하기 위해 객체는 상태정보(멤버변수)와 행위정보(멤버메서드)를 가지고 있습니다.

        public class Ex_11_BookDTO {
            public class BookDTO {
                public String title;
                public int price;
                public String company;
                public String author;
                public String isbn;
                public int page;
            }
        }

        -> 현재 상태정보만 작성이 되어있는 상태 + 행위정보도 같이 가지고 있는 구조로 만들어질 수 있다.

        public void read() {
            System.out.println("책을 읽는다")
        }

 

 

만들어진 클래스를 사용하려면 객체를 생성해야합니다.

객체를 메모리에 로딩하는 것 = 객체를 생성하는 과정을 살펴보겠습니다.

객체 자료형은 4byte의 크기를 가지고 있고, 객체 변수에는 번지수가 저장됨을 다시 한번 말합니다. new 연산자와 생성자 메서드로 객체를 생성하면 데이터가 실체화가 됩니다. 인스턴스변수 p가 구체적인 대상물 인스턴스(객체)를 가리키고 있기 때문에 , 해당 변수가 인스턴스 변수가 됩니다.

 

생성자 메서드 (Constructor)란?

객체를 메모리에 멤버변수 & 멤버메서드를 생성하는 역할 = 생성자 메서드 (행위) 메서드는 어딘가에 정의가 되어있고, 메서드를 사용하려면 호출하여 불러와야 합니다.
new Person() ; → Person 클래스 내부에 있는 public Person이라는 메서드를 찾아가야 합니다.
일반적으로 어떤 클래스를 생성하면 클래스 내부에는 자기 자신을 메모리 객체로 생성해야하는데 이걸 기본생성자 (default constructor) 라고 하고, 모든 클래스는 기본 생성자를 가지고 있습니다.
생성자 메서드의 특징으로는 클래스 이름과 메서드 이름이 동일합니다 그리고 return 타입이 아예 없기 때문에 void를 사용하지 않습니다.

생성자의 역할은 기본적으로 멤버 변수와 메서드를 메모리에다가 기억공간을 만들어주는데, 해당 기능을 하는 코드가 기계적으로 내부에서 자동으로 처리를 해주는 역할을 합니다.

 

this : 자신을 가리키는 객체 변수 , 참조변수 , 포인터 변수라고 불립니다.

객체가 만들어진 다음에 객체가 자기 자신의 번지를 가리키는 객체가 만들어집니다. 컴파일러가 멤버변수 및 메서드의 메모리를 생성하고 해당 번지를 this라는 객체변수에다가 넣어줍니다.
눈에 보이지 않지만 자기 자신을 가리키는 객체의 역할을 하며 객체 내부에서 자기 자신의 멤버변수를 가리킬 때 this를 사용하여 가리킬 수 있습니다.

💡 객체가 생성된 후 멤버에 접근하는 방법 . (dot, 도트, 점) 참조연산자로 접근이 가능해집니다.

Person p = new Person(); p라는 인스턴스 변수를 이용하여 데이터에 접근 < p.> p가 가리키고 있는 곳에 name or age 등에 접근이 가능해집니다. ex) p.name / p.phone / p.play();

하나의 클래스 (Person)을 만들어두고, 언제든지 객체를 생성해서 사용할 수 있기 때문에 재 사용성을 가지고 있습니다.

 

힙(Heap Memory)에 만들어진 객체 , 객체의 실체 = 인스턴스 (instance)

 

728x90
반응형
메서드의 오버로딩
하나의 클래스 내에서 동일한 이름의 메서드를 여러개 사용할 수 있는 객체지향 기법

 

 

 

메서드의 동작 및 기능이 비슷하다면  메서드 이름을 같게 만들어 사용하면 편리하다.
메서드도 변수와 마찬가지로 같은 클래스 내에서 서로 구별될 수 있어야 하기 때문에 각기 다른 이름을 가져야한다.
그러나 자바에서는 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도
조건 - 메서드의 이름이 같고, 매개변수의 개수 or 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있다.
(=메서드의 시그니처가 달라야한다.)

오버로딩된 메서드들은 매개변수에 의해서만 구별될 수 있으므로 반환 타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다.

 

public class Ex_9_Overloading {
    public static void main(String[] args) {
        float v = add(35.6f, 56.7f);
        System.out.println("v = " + v);
        
        int x = add(15,5);
        System.out.println("x = " + x);
    }

    //Q.매개변수로 두개의 정수 값을 받아서 / 총합을 구하여 / 리턴 하는 / [메서드를 정의]하세요.
    public static int add(int a, int b) {  
		//main이 static 키워드를 가지고 있으니 호출될 메서드에도 static을 작성
        int sum = a+b;
        return sum;
    }

    //Q. 매개변수로 두개의 실수 값을 받아서 / 총합을 구하여 / 리턴하는 / [메서드를 정의] 하세요.
    public static float add(float a, float b) {
        float sum = a+b;
        return sum;
    }
}

 

 

생성된 메서드들의 이름은 같지만 메서드 내의 개수는 같고, 매개변수가 int와 float로 다르기때문에 add 2개를 중복하여 정의할 수 있다 
→ 메서드의 오버로딩메서드들의 이름이 같은 상황에서 만약 add의 중복정의가 많이 되어있다면, add 메서드는 어떤 메서드로 호출이 되어야 하는지는아래로 전부 읽어내려가면서 찾기 때문에 실행 속도가 더딜 수 있다.
매개변수의 타입을 하나하나 비교해서 일치하는 메서드를찾아야하기 때문이다.

동작이나 기능이 비슷하더라도 오버로딩기법으로 작성하는 것이 아닌 , 타입에 맞춰 각각의 메서드 이름을 지정하게 되면,
개발자가 알아야하는 메서드 이름들이 너무 많아지기 때문에 효율적으로 작성하기 위해 중복정의가 가능하도록 한다.

 

정적바인딩이란?
컴파일 시점에서 사용될 (호출될) 메서드가 결정(연결) 되는 바인딩

정적 바인딩(Static binding)은 프로그램의 실행 전에 코드가 수행되는 바인딩 방식입니다.

정적 바인딩은 일반적으로 메서드 오버로딩(Overloading)과 관련이 있습니다.
메서드 오버로딩은 같은 이름의 메서드가 매개변수의 개수나 타입에 따라 다른 동작을 수행할 수 있는 기능을 말합니다.
정적 바인딩은 컴파일러가 함수 호출 시 해당하는 함수를 컴파일 타임에 정확하게 판단하고 바인딩합니다.
이는 메서드 호출 시 호출한 코드의 컨텍스트와 매개변수의 개수와 타입을 기반으로 결정됩니다.

ex) add(34.5f, 56.5f) → add_float_float(34.5f, 56.5f) → 정적바인딩으로 인해 왼쪽과 같이 코드를 작성하면
컴파일될 시점에서 매개변수의 타입을 알아내 _float_float 이렇게 바꾼 후 해당 메서드를 호출하기 때문에 시간이 소요되지 않습니다.

정적 바인딩의 장점은 실행 시간에 바인딩이 발생하지 않기 때문에 실행 성능이 빠르다는 것입니다.
또한 컴파일 시에 바인딩이 결정되므로 오류를 미리 확인할 수 있습니다.
하지만 정적 바인딩은 실행 중에 동적으로 객체의 타입이 변하는 상황에서는 적용되지 않습니다.
예를 들어, 다형성(polymorphism)이 적용된 경우에는 정적 바인딩이 아닌 동적 바인딩(Dynamic binding)이 사용됩니다.
동적 바인딩은 실행 시간에 객체의 실제 타입에 따라 메소드를 결정하므로 실행 시 동적으로 바인딩이 발생합니다.

요약하면, 정적 바인딩은 컴파일 타임에 함수 호출을 어떤 구현체와 연결할지 결정하는 바인딩 방식입니다.
함수 오버로딩과 관련이 있으며 실행 성능이 빠르고 컴파일 시에 오류를 확인할 수 있습니다.
하지만 실행 중에 객체의 타입이 변하는 경우에는 적용되지 않습니다.

728x90
반응형
Method : 동작
메서드를 정의하고 메서드를 사용(호출)하는 방법

 

Method(메서드)란?

메서드는 동작을 수행할 때 꼭 필요한 기능을 할 수 있도록 해준다. 메서드가 없이는 기능의 동작이 안된다.
개발자가 프로그래밍을 해 놓은 상태로 동작을 할 때, 그 동작을 할 수 있도록 해주는 방법이라고 이해하는게 쉽다.
반복적인 동일 작업을 메서드를 만들어 사용하면 편리하게 사용이 가능하다.
객체 지향 언어에서의 행위나 동작을 의미한다고 말하며, 메서드를 통해서 데이터를 서로 주고받으며 상호작용을 한다.
→ 코딩의 목적 메서드도 클래스처럼 API에서 제공해주는 메서드 , 사용자 정의 메서드 두 종류로 분류가 가능하다.
    다른 언어들에서는 함수(function)이라고 부르기도 한다.

 

https://cloudstudying.kr/lectures/81

 

Object : 사람 동작 1 → 먹다 동작 2 → 걷다 / 해당 동작들은 독립적으로 만들어진다
class : person 동작 1 → eat() 동작 2 → walk() / 객체 지향 프로그램안에서는 클래스 안에 이런 기능을 하는 동작들을 넣어서 만든다.

프로그래밍 언어에서의 메서드

 

 


메서드는 변수라고도 볼 수 있다. (어떠한 동작이 수행된 후 처리의 결과 값이 담겨진 변수)

 

 

메서드는 우선 접근제한자를 먼저 설정해주는데 보통 public으로 설정하여 사용한다.
리턴타입은 수행된 후에 반환하는 결과의 자료형이며, 아무 결과도 반환하지 않으면 자료형에 void를 입력해준다. → void는 반환할 값이 없다는 걸 의미한다.

메소드명 뒤의 ()안에는 매개변수를 작성하며 콤마로 여러개의 매개변수 작성이 가능하다.만약 매개변수가 없더라도 ()는 꼭 작성해주어야 한다.
매개변수 작성시에는 변수의 타입이 같아도 변수의 타입을 생략할 수 없고, 선언할 수 있는 매개변수의 개수는 제한은 없지만 많은 경우 배열이나 참조변수를 사용하며 된다.

 

public class Ex_6_makeMethod {
    public static void main(String[] args) {
        int a = 3;
        int b = 5;
        //add라는 메서드를 호출하여 두 수의 합의 결과를 받아보자
        int result = add(a,b);
        System.out.println("result = " + result);

    }
    //메서드는 독립적으로 만들어야 한다 / main 메서드 밖에서 작성한 후 main메서드에서 호출하여 사용하는 방식이다.
    //Q.[매개변수로 2개의 정수를 받아서] [총합을 구하여][리턴]하는 [메서드를 정의]해보자

    public static int add(int x, int y) {
        int sum = x+y;
        return sum;
    }
}

 

우선 add 라는 메서드를 만들어서 main 메서드에서 호출하여 결과 값을 출력해보는 코드를 작성해보았다.
메서드의 선언부에서 메서드의 이름(add), 매개변수 선언(int x, int y), 반환 타입(static int)을 정해주었고 두 개의 정수를 입력받아 두 값을 더한 결과를 반환하도록 했다.
메서드의 선언부는 메서드가 호출되는 모든 곳에서 동일하게 쓰이기 때문에 신중하게 작성해야한다. 수정 시 모든 곳을 변경해야 하는 번거로움이 발생할 수 있다.

반환 타입이 정해져있지 않을 때는 void로 작성해두어도 되지만 이후 return 반환값의 타입이 정해진다면 반환 타입을 정해줘야한다.
메서드는 수행한 결과를 반환값을 호출한 메서드로 전달하는데, (여기서는 main) 이 값의 타입은 반환 타입과 일치하거나, 적어도 자동 형변환이 가능한 것이어야한다.
그래서 위의 코드에서도 add메서드 내의 return값인 sum이 int형이므로 main 메서드 에서 호출된 값을 담을 result의 타입도 int형으로 작성되었다. return문은 단 하나의 값만 반환할 수 있다.

 

메서드 앞에 static이 붙어 있으면 클래스 메서드이고 , 붙어 있지 않으면 인스턴스 메서드이다.
클래스 메서드는 클래스 변수처럼 객체를 생성하지 않고도 <클래스이름.메서드이름>과 같은 식으로 호출이 가능하지만( “ . “ 을 이용해서 호출가능), 인스턴스 메서드는 반드시 객체를 생성해야만 호출할 수 있다.
객체를 생성한다는 의미는 new 연산자를 사용하여 인스턴스(객체)를 생성함을 의미한다.

 

static은 언제 붙여서 작성해야 할까?
  1. 클래스를 설계할 때 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙인다.
  2. 클래스 변수(static)는 인스턴스를 생성하지 않아도 사용할 수 있다.
  3. 클래스 메서드(static메서드)는 인스턴스 변수를 사용할 수 없다.
  4. 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려한다.

 

매개변수 전달 기법 (Call By Value & Call By Reference)

 

외부로부터 데이터를 받을 때, 값을 그대로 받을 수도 있지만 (Call By Value - 값 전달) 값을 번지(주소)를 갖고 있는 데이터를 받을 수도 있다. (Call By Reference(번지 전달))
java는 객체 지향 프로그래밍은 객체를 대부분 다루기 때문에 Call By Reference가 자주 사용된다. 이 때, 번지의 데이터가 어떤 데이터인지 확인할 필요가 있다.

Call By Value Call By Reference
값에 의한 호출방식은 인자로 받은 값을 복사하여 처리한다. 참조에 의한 호출방식은 인자로 받은 값의 주소를 찹조하여 직접 값에 영향을 준다.
원래의 값이 수정되지 않는다. 원래의 값이 수정된다.
변수의 복사본이 전달된다. 변수 자체 전달된다.
실제 인수가 다른 메모리 위치에 생성된다. 실제 인수가 같은 메모리 위치에 생성된다.

 

  • 기본 자료형 : call by value 로 동작 (int, short, long, float, double, char, boolean)
  • 참조 자료형 : call by reference 로 동작 (Array, Class Instance)
728x90
반응형
반복문(loop) for , foreach

 

  • 일반적으로 반복하는 횟수가 정해진 경우에 (예측 가능) 사용하고 문법은 초기식, 조건식, 증감식으로 구성되어 있고 세미콜론으로 구문지어진다.
  • 초기식은 맨 처음 한번만 수행되며 이후, 조건식 → 반복문장 → 증감식이 반복적으로 수행된다.

 

for loop의 실행과정

 

http://www.tcpschool.com/php/php_control_loop

 

foreach문의 실행과정 (향상된 for문)

 

http://www.tcpschool.com/php/php_control_loop

 

numArray에서 데이터를 하나씩 전부 꺼내오면서 출력해준다.

//Q. 배열에 있는 원소를 출력해보자
        int [] numbers = {1,2,3,4,5,6,7,8,9,10};

        for (int i=0; i< numbers.length; i++) {
            System.out.println(numbers[i]);
        }

//출력물 -> 1,2,3,4,5,6,7,8,9,10

for(int num : numbers) {
            System.out.println(num);
        }

//출력물 -> 1,2,3,4,5,6,7,8,9,10

 

배열로 만들어진 데이터들은 각각의 기억공간에 저장되어 있으며, 인덱스 번호가 0부터 주어지게 된다.
배열이름[인덱스번호] -> 위의 문법으로 기억공간의 데이터에 접근할 수 있게된다.
해당배열의 길이만큼 반복되어야 해당 데이터가 순서대로 출력될 수 있어 길이는 배열이름.length로 설정할 수 있다.

  • for(int num : numbers) { System.out.println(num);}
    → foreach문법으로 for문안의 괄호에 배열내에 있는 데이터들을 담을 수 있는 변수를 설정한 후 해당 변수를 출력하면 배열 내의 데이터들이 전부 출력된다.

 

While(반복문) - 먼저 조건식 검사를 반복할 문장을 실행한다.

몇번이 반복될 지 예측이 어려울 때 보통 while문을 사용한다.

 

while문은 먼저 조건식을 확인하게 되는데 , 처음부터 조건식이 거짓인 상황이면 내부 코드를 하나도 실행하지 않 바로 수식을 빠져나가는 상황이 발생할 수 도 있다.

 

제어문 break, countinue
반복문의 실행 상태를 제어하고자 break문과 continue 문을 사용한다.

 

  • break문 - 현재 사용중인 반복문을 중단하고 제어를 반복문 바깥으로 이동한다. / 반복문이 동작 중 break를 만나게 되면 break가 속해있는 반복문을 바로 빠져나가게 된다.
  • continume문 - 현재 수행중인 반복문에서 현재 조건 값에 대한 처리를 중단하고 다음 조건 값에 대한 처리를 실행 / 반복문 실행 중 continue를 만나면 continue 아래의 문장을 실행하는 것이 아니라 반복문의 시작으로 돌아가도록 한다.

 

public class Ex_5_breAk_conTinue {
    public static void main(String[] args) {
        char[] c = {'s','h','u','t','d','o','w','n'};

        for(int i=0; i<c.length; i++) {
            if(c[i] == 'o')
                break;
            System.out.println(c[i]);
        }
        int count = 0;
        for (int i=1; i<=10; i++) {
            if(i%3 !=0 ) continue;
                count++;
        }
        System.out.println("count = " + count);
    }
}

//s,h,u,t,d 까지의 문자가 출력된다.
728x90

+ Recent posts