iOS

java와 swift의 차이점, 특징, 문법

Mary's log 2024. 8. 21. 10:47

 

 

java 특징

 - (접근 제한자) + 타입 + 변수명,함수명을 적는 문법

 - 상수일 때만 final 키워드 기재

 - 띄어쓰기(빈 공백)이 컴파일러에 큰 영향을 주지 않음

 - 특정 문법에 꼭 소괄호( ) 작성, 문장 마침표처럼 세미콜론; 필수 기재

 - 문자열 치환 java : `${var}`

 - .length  ,   .size   로 객체 갯수 리턴

 

int number = 10;
public long width = number;

private String name = "홍길동";
final String species = "HUMAN";
String age = (String)20;

 

swift 특징

 - (접근제한자) + var변수, let상수를 먼저 필수 지정 후, 변수명 뒤에 :타입을 적는 문법

 - python과 비슷하게 띄어쓰기(빈 공백)을 하나의 문자로 인식하기도 함. 초기화 등호 양쪽에 공백 둘다 있거나 둘다 없거나

 - 형 추론에 의해서 타입,키워드 생략이 가능하면 생략하는게 많은 문법. 소괄호( ) 나, 세미콜론; 을 작성하지 않음

 - 문자열 치환 swift : “\(var)”

 - .count  로 객체 갯수 리턴

 - Tuple 타입 존재.

var age:Int = 20
var age=30
fileprivate var width:Double = 150.0

let country:String = "KR"
let country="KR"
private let address = "Seoul"

 

 

 

java 함수, 클래스, 인터페이스 등 특징

java 접근 제한자 + class/interface ... + 클래스명/인터페이스명 + extends/implements { 

 - java 접근 제한자 + 리턴 타입/void + 함수명 ( 매개변수타입 매개변수명 ) throws {

 - 생략이 거의 없음

public class UserVO extends UserSession {
public interface UserServiceImpl implements UserService {

public void readUserInfo() {
private String saveUser(UserVO uvo) throws Exception {

 

swift 함수, 클래스, 구조체, 구조체 확장, 프로토콜 등 특징

 - class/struct/protocol ... + 클래스명/구조체명 + : 상속클래스/상속구조체 {
   상속클래스에서 필요한 함수를 overriding 가능.

 - 필요어노테이션/키워드 + func + 함수명 (매개변수명 : 매개변수 타입) {

 - struct 구조체 내부 지역변수 value 값을 변경하는 함수의 맨 앞에는 mutating 키워드 필요...

 - 기존에 제공되는 라이브러리나 클래스,구조체에 추가적인 기능을 넣어서 사용하려면 extension

 - protocol은 interface,abstract class와 비슷. 무조건 받아서 재정의해야함. 골라쓰는게 아니라서 overriding이 붙지 않음.

 - 생략할 수 있으면 거의 생략

 - 매개변수에 '외부매개변수/내부매개변수' 별도 사용자화로 사용 가능. 외부매개변수 언더스코어로 생략 가능. 가능만하면 생략.

   * 라이브러리 함수들은 지정된 외부매개변수 at: , contentOf:   존재

 

class UserVO { // 타입이 UserVO
class UserVO : UserSession { // 타입이 UserVO인데 UserSession으로 상속받음

struct UserService {
extension Double {

func readUserInfo() { // 매개변수가void 리턴타입이void
override func saveUser(uvo:UserVO) -> UserVO { 
//상속받는 객체에 있는 함수를 오버라이딩, UserVO타입 uvo 매개변수, 리턴타입이 UserVO

 

 

* ❗️❓structure 기능과 사용

구조체 인스턴스는 값을 항상 넘기며, 클래스 인스턴스는 항상 참조를 넘겨줌.

이 의미는 서로 다른 작업의 종류에 적합하다는 의미.

프로젝트에 필요한 데이터 구조와 기능을 고려하여, 각각의 데이터는 클래스나 구조체로 정의하도록 구성해야 함.

class structure
copy of reference copy of value
reference 참조 주소값이 복사 value 복사됨. Call Stack 만들어짐…?

 

 

 

 


★ Swift guard 조건 부정 함수

if a = b  {   // if문에서  a = b가 true면 블록 안을 수행하지만

guard a =b else {   // a = b false라면 블록 안을 수행

} // 예외처리 해주기

 

★ Swift  for문

for row상수 in range범위 {

 

★ Swift 다중선택문if, switch는

초기 변수명 선언하고 바로 if,switch조건문 걸면서

변수명 호출 없이 초기화 가능.

 

★ Swift switch boolean이면 default 미사용

 

★ Swift Collection Type

Array : 정렬                                   Array<String> 을 줄이면   [String] 도 같은 표현

Set : 중복불가,순서X                   //  java List는  중복허용,순서OK

Tuple : 타입 상관없음.  수정불가  //  Object 같은건가? 파이썬…

Dictionary : Map

제네릭 : java 동일

 

★ Rest parameter [Array로 취급] (갯수에 구애받지 않음)

Int…  => Int 여러개 사용할수잇다

 

★ Swfi에서는 어떤 타입 함수인지 부르는 방법 : 

매개변수 타입명과 리턴타입명을 줄여서 부름

func hello(name:String) {

} // > String void 타입이다

 

func hello1(name:String, age:Int) -> String {

} // > String Int 타입에 String 타입이다

 

swift  Optional

 

 

swift  Closure

 

 

 

 

 

 

 

 

 

참고 문헌